時間複雜度與 P 類

漸近成長(asymptotic growth)

如果你看著兩株樹苗,今天稍高的那一株,幾乎無法告訴你五十年後誰會是更大的樹;重要的是各自持續成長得多快。漸近成長就是把這種長期視角套用到函數上。它問的不是「n = 10 時執行時間有多大?」,而是「當 n 一路朝無窮邁進時,執行時間如何表現?」對於判斷哪個演算法在大問題上勝出,最終的成長就是全部,早期的搖擺只是雜訊。

這種長期視角,正是大 O、大 Omega、大 Theta 都定義在「對所有大於某個 n0 的 n」之上的原因:它們描述尾端深處的行為,忽略小輸入時發生的事。漸近地看,成長率形成一個嚴格的高下次序,而低階項就直接消失。例如,n^2 最終成長得比 100n + 50 快,儘管 100n + 50 在小 n 時比較大。一旦 n 越過交叉點,高階項就永遠佔主導,常數與加法項對這場比較就變得無關緊要。這就是我們說一個演算法「贏過」另一個時的精確意思。

用漸近的方式思考是一種解放,因為它讓我們在不知道機器、語言或確切常數的情況下比較方法,這也是單一條曲線(如 n log n)就能概括一個演算法命運的原因。但同一種抽象也可能誤導:「最終」可能要等到非常大的 n。若一個 O(n log n) 方法藏著巨大常數,它在小輸入上可能輸給 O(n^2) 方法,這就是為什麼實際工程仍要量測,也是我們在把漸近多項式時間等同於「可行」時必須謹慎的原因。

比較 T1(n) = 1000n 與 T2(n) = n^2。對 n = 100,T1 = 100000、T2 = 10000,T1 較大。但從 n = 1001 起,T2 = n^2 永遠超越 T1 = 1000n,因為交叉點在 n = 1000。漸近地看,n^2 成長較快,所以在大規模下 T2 是較差的演算法。

在交叉點以下,成長較慢的函數可能反而較大;過了交叉點,成長率永遠勝出。

「漸近」意指「當 n 趨向無窮」,所以成長較快的函數在小 n 時可能反而較小;交叉點可能落在實際輸入永遠到不了的大 n 上。

又稱
asymptotic behaviourgrowth rateasymptotics漸近行為成長率