C++ 時間復雜度詳解


注意定義的方式與細節!!!


定義:

      一條語句的頻度是指該語句在算法中被重復執行的頻率而算法中所有語句的頻度之和記做T(n),它是該算法問題規模 n 的函數,而時間復雜度主要就是分析 T(n) 的數量級算法中基本運算(就是指最深層的循環內的語句)與T(n) 同數量級,所以通常采用算法中基本運算的頻度 f(n) 來分析算法的時間復雜度。我們將 f(n) 中隨 n 增長最快的項的系數置為1作為時間復雜度的度量。f(n) = a*n^3+b*n^2+c; 時間復雜度為O(n^3)


公式表達:

      算法的時間復雜度記為:T(n) = O(f(n)) ;

其中 'O' 的含義為T(n)的數量級,其嚴格的數學定義為:若 f(n) 和 T(n) 是定義在正整數集合上的兩個函數,則存在正常數C和m,使得當n>=m時,都滿足0<=T(n)<=C*f(n)


復雜度分類:

      算法的時間復雜度不僅依賴於問題的規模n,還依賴於待輸入數據的性質,如下代碼:

i = n-1;
while(i>=0 && (A[i] != K))
i--;
return i;

如上看出,當輸入的數據 A[i] 中沒有與 K 相等的數據,則第三條語句的頻度為 f(n) = n;當輸入數據 A[i] 都等於K時,第三條語句的頻度為0;

      所以就有了:最壞時間復雜度;平均時間復雜度:所有輸入的實例在等概率的情況下出現,算法的期望時間;最好時間復雜度;之說,一般情況下,我們總是考慮最壞時間復雜度,以保證算法的運行時間不會比它更長


運算規則:

加法:T(n) = T1(n) +T2(n) = O(f(n))+O(g(n)) = O(max(f(n),g(n)))

乘法:T(n) = T1(n)*T2(n) = O(f(n))*O(g(n)) = O(f(n)*g(n))

常見的時間復雜度:O(1) < O(logn) <  O(n) <  O(nlogn) <  O(n^2) <  O(n^3) <  O(2^n) <  O(n!) <O(n^n)


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com