同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法,演算法分析的方法就是預估其時間複雜度和空間複雜度。
然而乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才知道。但我們都知道乙個演算法花費的時間與演算法中語句的執行次數成正比,哪個演算法中語句執行次數多,它花費時間相對就多。時間複雜度正是利用這個原理來劃分等級的。
計算機複雜度:
時間複雜度:
以下是網上看到的總結得比較精煉的文章:
求解演算法的時間複雜度的具體步驟是:
⑴ 找出演算法中的基本語句;
演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈體。
⑵ 計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。
⑶ 用大ο記號表示演算法的時間效能。
將基本語句執行次數的數量級放入大ο記號中。
如果演算法中包含巢狀的迴圈,則基本語句通常是最內層的迴圈體,如果演算法中包含並列的迴圈,則將並列迴圈的時間複雜度相加。例如:
for (i=1; i<=n; i++)
x++;
for (i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
第乙個for迴圈的時間複雜度為ο(n),第二個for迴圈的時間複雜度為ο(n2),則整個演算法的時間複雜度為ο(n+n2)=ο(n2)。
常見的演算法時間複雜度由小到大依次為:
ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n2)<ο(n3)<…<ο(2n)<ο(n!)
ο(1)表示基本語句的執行次數是乙個常數,一般來說,只要演算法中不存在迴圈語句,其時間複雜度就是常數階ο(1)。對數階ο(log2n)、線性階ο(n)、線性對數階ο(nlog2n)、平方階ο(n2)和立方階ο(n3)稱為多項式時間,而指數階ο(2n)和ο(n!)稱為指數時間。計算機科學家普遍認為前者是有效演算法,把這類問題稱為p類問題,而把後者稱為np問題。
時間複雜度計算方法
o 1 constant complexity constant 常數複雜度 o log n 對數複雜度 o n 線性時間複雜度 o n 2 平方 o n 3 立方 o 2 n 指數 o n 階乘 隨著現在儲存空間的便宜,很多情況下,我們是願意用空間複雜度來換取時間複雜度的,因為記憶體,磁碟等這些和...
時間複雜度計算方法
o 1 constant complexity constant 常數複雜度 o log n 對數複雜度 o n 線性時間複雜度 o n 2 平方 o n 3 立方 o 2 n 指數 o n 階乘 隨著現在儲存空間的便宜,很多情況下,我們是願意用空間複雜度來換取時間複雜度的,因為記憶體,磁碟等這些和...
時間複雜度計算方法
1.形如 t n a t n b f n 的時間複雜度計算方法 有一種方法叫做主方法 master method 是用來專門計算這種形式的時間複雜度的,方法具體如下 下邊舉例進行說明 例1 t n 25 t n 5 n 2 因為 a 25,b 5,d 2,f n n 2 所以此例符合master m...