- 最壞情況:以大O記號形式表示的時間復雜度,給出了一個算法的最壞情況,即--對於規模為n的任意輸入,算法的運行時間都不會超過O(f(n))
- 最好情況 :大 Ω記號-->如果存在正的常數c和函數g(n),對任意n>>2,有T(n) > c * g(n),即認為:在n足夠 大后,g(n)給出了T(n)的一個下界,記為:
T(n) =Ω (g(n))
- 大 Θ記號-->存在正的常數c1和c2,以及函數h(n),對任意n>>2,有 c1*h(n) < T(n) < c2 * h(n),即認為:在n足夠大后,h(n)給出了T(n)的一個確界,記為:
T(n) =Θ (g(n))
- 空間復雜度:
-
- 空間復雜度通常不計入原始輸入本身所占用的空間
- 由於:
-
- 任意算法的任何一次運行過程中所消耗的存儲空間,都不會多於其間所執行基本操作的累積次數;
- 每次基本操作所涉及的存儲空間都不會超過常數規模;
- 即使每次基本操作所占用或訪問的存儲空間都是新開辟的,整個算法所需的空間總量,也不過與基本操作的次數同階;
故:時間復雜度本身就是空間復雜度的一個天然上界
-
- 當然,由時間復雜度確定的平凡上界不能令人滿意,則可更為精細地考察不同算法的空間
- 復雜度分析:
-
- O(1):常數時間復雜度算法
-
- 不含轉向(循環調用、遞歸等)必順序執行,即使O(1),反之則不一定
- O(logn):對數時間復雜度
-
- 常底數無所謂:

- 常數次冪無所謂:

- 常底數無所謂:
- 考慮問題:對於任意非負整數,統計其二進制中數位1的總是
-
- 一般方法:
int countOnes (unsinged int n) {
int ones = 0;
while (n > 0) {
if (1 & n) {
ones += 1;
}
n = n >> 1;
}
return ones;
}
由右移位運算性質,n縮減至0,需要
次運算,即該算法的時間復雜度為:
次運算,即該算法的時間復雜度為:
-
- 對數多項式復雜度:凡運行時間可以表示和度量為
(其中c>0),則 稱為“對數多項式時間復雜度的算法”
- 對數多項式復雜度:凡運行時間可以表示和度量為
