1. 程式人生 > >時間復雜度

時間復雜度

not time log exit int 復雜度 算法復雜度 sin ant

老規矩, 先看看維基定義:

The time complexity of an algorithm quantifies the amout of time taken by an algorithm to run as function. The complexity of an algorithm is commonly expressed using big O notation, which excludes coefficients and lower order terms.

算法的時間復雜度量化了函數運行算法所花費的時間,排除了系數以及低階項,算法 通常用大寫的 O 表示。

T(n) = O(f(n))

(f(n) 一般是算法中頻度最大的語句頻度)

概念比較抽象, 舉例說明:

算法一:

1 int x = 1;         // 計算 1 次
2 for  (in i = 0; i < n; i++)
3 {
4     x += 1;        // 計算 n 次
5 }

算法共計算 n + 1 次, n 無限大, 則 n ≈ n + 1(排除低階項), 則此算法的時間復雜度為 T(n) = O(f(n)) = O(n).

算法二:

1 for (int i = 0; i < N; i++)
2 {
3     for (int j = i + 1; j < N; j++)
4 { 5 x += j // 執行 n + (n - 1) + (n - 2) + ...... + 1 次 6 } 7 }

算法執行 n(n + 1)/2 次, 排除系數以及低階項, 算法復雜度T(n) = O(n2).

時間復雜度