如何計算時間複雜度

1、定義
(1)若是一個問題的規模是n,解這一問題的某一算法所須要的時間爲T(n),它是n的某一函數 T(n)稱爲這一算法的「時間複雜性」。咱們經常使用大O表示法表示時間複雜性,稱之爲大O記法。
(2)一個問題自己也有它的複雜性,若是某個算法的複雜性到達了這個問題複雜性的下界,那就稱這樣的算法是最佳算法。常見的時間複雜度高低順序以下:
O(1) 常數階 < O(logn) 對數階 < O(n) 線性階 < O(nlogn) < O(n^2) 平方階 < O(n^3) < O(2^n) < O(n!) < O(n^n)

2、時間複雜度計算步驟

⑴ 找出算法中的基本語句;
算法中執行次數最多的那條語句就是基本語句,一般是最內層循環的循環體。
⑵ 計算基本語句的執行次數的數量級;
只需計算基本語句執行次數的數量級,這就意味着只要保證基本語句執行次數的函數中的最高次冪正確便可,能夠忽略全部低次冪和最高次冪的係數。這樣可以簡化算法分析,而且使注意力集中在最重要的一點上:增加率。
⑶ 用大Ο記號表示算法的時間性能。
將基本語句執行次數的數量級放入大Ο記號中。
若是算法中包含嵌套的循環,則基本語句一般是最內層的循環體,若是算法中包含並列的循環,則將並列循環的時間複雜度相加。

3、時間複雜度計算規則

(1)對於一些簡單的輸入輸出語句或賦值語句,近似認爲須要O(1)時間
(2)對於順序結構,須要依次執行一系列語句所用的時間可採用大O下"求和法則"
求和法則:是指若算法的2個部分時間複雜度分別爲 T1(n)=O(f(n))和 T2(n)=O(g(n)),則 T1(n)+T2(n)=O(max(f(n), g(n)))
特別地,若T1(m)=O(f(m)), T2(n)=O(g(n)),則 T1(m)+T2(n)=O(f(m) + g(n))
(3)對於選擇結構,如if語句,它的主要時間耗費是在執行then字句或else字句所用的時間,需注意的是檢驗條件也須要O(1)時間
(4)對於循環結構,循環語句的運行時間主要體如今屢次迭代中執行循環體以及檢驗循環條件的時間耗費,通常可用大O下"乘法法則"
乘法法則: 是指若算法的2個部分時間複雜度分別爲 T1(n)=O(f(n))和 T2(n)=O(g(n)),則 T1*T2=O(f(n)*g(n))
(5)對於複雜的算法,能夠將它分紅幾個容易估算的部分,而後利用求和法則和乘法法則技術整個算法的時間複雜度
相關文章
相關標籤/搜索