1. 程式人生 > >主定理求解演算法時間複雜度

主定理求解演算法時間複雜度

主定理

所謂主定理,就是用來解遞迴方程的一種方法,此方法可以用來求解大多數遞迴方程。

設遞迴方程為T(n)=aT(n/b)+f(n)  (其中a≥1,b>1)

主定理:

     1. 如果存在常數ε>0有f(n)=O(n^(logb^a-ε)),則T(n)=Θ(n^(logb^a));

     2. 若f(n)=Θ(n^(logb^a)),則T(n)=Θ(n^(logb^a)logn2^n);

     3. 若對某個常數ε>0有f(n)=Ω(n^(logb^a)+ε),且對某個常數c<1和所有足夠大的n有af(n/b)≤cf(n),則T(n)=Θ(f(n))。

歪曲記憶法:誰大聽誰的,相等就乘個對數係數

多項式大於(小於)

在看演算法導論時候,看到講主定理節時,有“在第一種情況中,不僅要有f(n)小於n^log(b)(a),還必須是多項式地小於……”,之前先入為主的以為多項式地小於就是兩者之差為一個多項式(事實上這麼想也沒大錯,只是形式不對),但注意到是在演算法的世界裡,所以不需要精確到一個多項式(形如n^3+n^2+n+3之類的),只要兩者之比(即f(n)/log(a)(b))漸近小於n^e(e > 0)即可。

歸納起來,就是:(e > 0的任意實數)

f(x) > g(x) * n^e ==> f(x)多項式地大於g(x);

f(x) < g(x) * n^e ==> f(x)多項式地小於g(x)。

歪曲記憶法:就是得差個多項式啊,多項式是n、n^2、n^3……這種樣子的,lgn 不是個合法多項式