注意定義的方式與細節!!!
定義:
一條語句的頻度是指該語句在算法中被重復執行的頻率。而算法中所有語句的頻度之和記做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;
所以就有了:最壞時間復雜度;平均時間復雜度:所有輸入的實例在等概率的情況下出現,算法的期望時間;最好時間復雜度;之說,一般情況下,我們總是考慮最壞時間復雜度,以保證算法的運行時間不會比它更長
運算規則:
加法: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)
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。