做推廣賺錢的網(wǎng)站有哪些建網(wǎng)站費用
漸進記號及時間復雜度計算
- 漸近符號
- 時間復雜度計算:遞歸方程
- 代入法
- 迭代法
- 套用公式法
漸近符號
漸近記號 Ω \Omega Ω
?? f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n)) 當且僅當存在正的常數(shù)C和 n 0 n_0 n0?,使得對于所有的 n ≥ n 0 n≥ n_0 n≥n0? ,有 f ( n ) ≥ C ( g ( n ) ) f(n)≥C(g(n)) f(n)≥C(g(n))。此時,稱 g ( n ) g(n) g(n)是 f ( n ) f(n) f(n)的下界。
??根據(jù)符號 Ω \Omega Ω的定義,用它評估算法的復雜度得到的是問題規(guī)模充分大時的一個下界。這個下界的階越高,評估越精確,越有價值。
例:設 f ( n ) = n 2 + n f(n)=n^2+n f(n)=n2+n,則
f ( n ) = Ω ( n 2 ) f(n)=\Omega(n^2) f(n)=Ω(n2),取 c = 1 , n 0 = 1 c=1,n_0=1 c=1,n0?=1 即可
f ( n ) = Ω ( 100 n ) f(n)=\Omega(100n) f(n)=Ω(100n),取 c = 1 / 100 , n 0 = 1 c=1/100,n_0=1 c=1/100,n0?=1 即可
顯然, Ω ( n 2 ) \Omega(n^2) Ω(n2)作為下界更為精確。
漸進記號 Θ \Theta Θ
?? f ( n ) = Θ ( g ( n ) ) f(n)=\Theta(g(n)) f(n)=Θ(g(n)) 當且僅當存在正常數(shù)和 C 1 , C 2 , n 0 C_1,C_2,n_0 C1?,C2?,n0?,使得對于所有的 n ≥ n 0 n≥n_0 n≥n0?, 有 C 1 ( g ( n ) ) ≤ f ( n ) ≤ C 2 ( g ( n ) ) C_1(g(n))≤f(n)≤ C_2(g(n)) C1?(g(n))≤f(n)≤C2?(g(n))。此時,稱 f ( n ) f(n) f(n)與 g ( n ) g(n) g(n)同階。
??這種漸進符號是指,當問題規(guī)模足夠大的時候,算法的運行時間將主要取決于時間表達式的第一項,其它項的執(zhí)行時間可以忽略不計。第一項的常數(shù)系數(shù),隨著n的增大,對算法的執(zhí)行時間也變得不重要了。
例: 3 n + 2 = Θ ( n ) 3n+2= Θ(n) 3n+2=Θ(n)
10 n 2 + 4 n + 2 = Θ ( n 2 ) 10n^2+4n+2= Θ(n^2) 10n2+4n+2=Θ(n2)
5 × 2 n + n 2 = Θ ( 2 n ) 5×2^n+n^2= Θ(2^n) 5×2n+n2=Θ(2n)
漸進記號小 ο \omicron ο
?? f ( n ) = ο ( g ( n ) ) f(n)=\omicron(g(n)) f(n)=ο(g(n))當且僅當 f ( n ) = ο ( g ( n ) ) f(n)=\omicron(g(n)) f(n)=ο(g(n))和 g ( n ) ≠ ο ( f ( n ) ) g(n)\neq \omicron(f(n)) g(n)=ο(f(n)),此時, g ( n ) g(n) g(n)是 f ( n ) f(n) f(n)的一個絕對上界。
??小 ο \omicron ο提供的上界可能是漸近緊確的,也可能是非緊確的。(如: 2 n 2 = ο ( n 2 ) 2n^2=\omicron(n^2) 2n2=ο(n2)是漸近緊確的,而 2 n = ο ( n 2 ) 2n=\omicron(n^2) 2n=ο(n2)是非緊確上界。
例: 4 n l o g n + 7 = ο ( n 2 ) 4nlogn + 7= \omicron(n^2) 4nlogn+7=ο(n2)
漸進記號小 ω \omega ω
?? f ( n ) = ω ( g ( n ) ) f(n)=\omega(g(n)) f(n)=ω(g(n))當且僅當 f ( n ) = ω ( g ( n ) ) f(n)=\omega(g(n)) f(n)=ω(g(n))和 g ( n ) ≠ ω ( f ( n ) ) g(n)\neq \omega(f(n)) g(n)=ω(f(n)),此時, g ( n ) g(n) g(n)是 f ( n ) f(n) f(n)的一個絕對下界。
?? ω \omega ω表示一個非漸進緊確的下界。
例: f ( n ) = n 2 + n f(n)=n^2+n f(n)=n2+n,則 f ( n ) = f(n)= f(n)=\omega ( n ) (n) (n)是正確的, f ( n ) = f(n)= f(n)=\omega ( n 2 ) (n^2) (n2)是錯誤的。
漸進記號大 O \Omicron O
??設 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n) 是定義域為自然數(shù)集上的函數(shù)。若存在正數(shù) c c c和 n 0 n_0 n0?c和n_0c,使得對一切 n ≥ n 0 n≥ n_0 n≥n0? 都有 0 ≤ f ( n ) ≤ c g ( n ) 0 ≤ f(n) ≤ cg(n) 0≤f(n)≤cg(n)成立,則稱 f ( n ) f(n) f(n)的漸進的上界是 g ( n ) g(n) g(n),記作 f ( n ) = O g ( n ) f(n)=\Omicron g(n) f(n)=Og(n)。
??根據(jù)符號大 O \Omicron O的定義,用它評估算法的復雜度得到的只是問題規(guī)模充分大時的一個上界。這個上界的階越低,評估越精確,越有價值。
例:設 f ( n ) = n 2 + n f(n)=n^2+n f(n)=n2+n,有
f ( n ) = O ( n 2 ) f(n)=\Omicron(n^2) f(n)=O(n2),取 c = 2 , n 0 = 1 c=2,n_0=1 c=2,n0?=1即可
f ( n ) = O ( n 3 ) f(n)=\Omicron(n^3) f(n)=O(n3),取 c = 1 , n 0 = 2 c=1,n_0=2 c=1,n0?=2即可
常見的時間復雜度關系
O(1)<O(log(n))<O(n)<O(nlogn)<O(n^{2})
?? O ( 2 n ) O(2^{n}) O(2n)和 O ( n ! ) O(n!) O(n!)大于以上的所有時間復雜度,具體原因參考圖像。
時間復雜度計算:遞歸方程
??加、減、乘、除、比較、賦值等操作,一般被看作是基本操作,并約定所用的時間都是一個單位時間;通過計算這些操作分別執(zhí)行了多少次來確定程序總的執(zhí)行步數(shù)。一般來說,算法中關鍵操作的執(zhí)行次數(shù)決定了算法的時間復雜度。
??比較簡單的算法時間復雜性估計通常需要觀察在for、while循環(huán)中的關鍵操作執(zhí)行次數(shù),在這里我們只討論一種比較復雜的時間復雜度計算問題:求遞歸方程解的漸近階的方法。遞歸式就是一個等式,代表了遞歸算法運算時間和n的關系,通過更小輸入的函數(shù)值來描述一個函數(shù)。那么如何求得遞歸算法的Θ漸進界呢?主要有三種方法。
代入法
??代入法是指自己猜測一個界,然后用數(shù)學歸納法進行驗證是否正確,這種猜測主要靠經(jīng)驗,不常用。
迭代法
??迭代法是指循環(huán)地展開遞歸方程,然后把遞歸方程轉化為和式,使用求和技術解之。
套用公式法
??這個方法為估計形如: T ( n ) = a T ( n / b ) + f ( n ) T(n)=aT(n/b)+f(n) T(n)=aT(n/b)+f(n) 的遞歸方程解的漸近階提供三個可套用的公式。要求其中的a≥1和b>1是常數(shù),f(n)是一個確定的正函數(shù)。那么在三種情況下,我們可以得到T(n)的漸進估計式,懶得打公式,所以截圖。