算法的時間復雜度


時間復雜度定義

在進行算法分析時,語句總的執行次數T(n) 是關於問題規模n 的函數,進而分析T(n)隨n 的變化情況而確定T(n)的數量級。
算法的時間復雜度,也就是算法的時間量度,記作T(n) = O(f(n))。它表示隨問題規模n 的增大,算法執行時間的增長率和
f(n) 的增長率相同。f(n) 是問題規模n 的某個函數。

這種使用大寫O來體現算法時間復雜度的記法,我們稱之為大O記法。一般而言,隨着n的增大,T(n) 增長最慢的算法為最優算法,如O(1)。

推導大O階方法

1 用常數1取代運行時間中的所有加法常數。f(n) = 6 -> f(n) = 1
2 在修改后的運行次數函數中,只保留最高級階項。 f(n) = n² + n -> f(n) = n²
3 如果最高次項存在且不是1,則去除與這個項相乘的常數。f(n) => n²/2 -> f(n) = n²

常數階

不論n的大小,運行次數恆定的算法,我們稱之為具有O(1)的時間復雜度,又為常數階。如hash算法,即為f(n) = 1。

線性階

運行次數與n的大小呈線性關系,我們稱之為具有O(n) 的時間復雜度,又稱線性階。如遍歷一個集合,即為f(n) = n。

對數階

運行次數與n 的大小呈對數關系,我們稱之為具有O(logn)的時間復雜度,又稱對數階。
如下程序,f(n) = log2n, 時間復雜度為O(n) = logn。

int count =1;
while(count < n) {
  count = count *2;
}

平方階

運行次數與n 的大小呈平方階關系,我們稱之為O(n2)的時間復雜度,又稱平方階。如等比數列。

常見的時間復雜度

執行函數
19 O(1)
n + 1 O(n)
n² + 1 O(n2)
3log2n + 2 O(logn)
n + nlog2n O(nlogn)
n³ + n O(n³)

時間復雜度大小依此為:
O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n³)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM