代換法
- 猜測復雜度
- 驗證是否滿足遞歸式(使用歸納法)
- 找到常數應該滿足的條件
- 針對基本情況,常數足夠大時總是成立的
需要注意的是,我們猜測的復雜度有可能不滿足遞歸式,這個時候就要通過減去一些低階項來使得歸納成立。
對遞歸式T(n)=4T(n/2)+CnT(n)=4T(n/2)+CnT(n)=4T(n/2)+Cn
我們假設T(n)=Θ(n2)?C1n2?C2nT(n)=\Theta(n^2) \leqslant C_1n^2-C_2nT(n)=Θ(n2)?C1?n2?C2?n,下面進行歸納證明:
假設k<n時T(k)?C1k2?C2kT(k) \leqslant C_1k^2-C_2kT(k)?C1?k2?C2?k
T(n)?4(C1n24?C2n2)+Cn=C1n2?C2n?(C2?C)n?C1n2?C2nT(n)\leqslant 4(C_1\frac{n^2}{4}-C_2\frac{n}{2})+Cn=C_1n^2-C2n-(C2-C)n\leqslant C_1n^2-C_2nT(n)?4(C1?4n2??C2?2n?)+Cn=C1?n2?C2n?(C2?C)n?C1?n2?C2?n當C2>CC_2>CC2?>C時成立。
對于基本情況,當C1C_1C1?足夠大的時候成立。
因此,T(n)=Θ(n2)T(n)=\Theta(n^2)T(n)=Θ(n2)
遞歸樹法
- 將遞歸式寫成遞歸式求和的形式
- 逐層求和:一般來講會有規律
對于T(n)=T(n/4)+T(n/2)+n2T(n)=T(n/4)+T(n/2)+n^2T(n)=T(n/4)+T(n/2)+n2
發現系數是等比數列,進行求和
主方法
只能應用到特定的遞歸式上:T(n)=aT(n/b)+f(n),a>1,b>1,f(n)T(n)=aT(n/b)+f(n),a>1,b>1,f(n)T(n)=aT(n/b)+f(n),a>1,b>1,f(n) is asymptotically postive
比較f(n)f(n)f(n)和nlogban^{log_ba}nlogb?a
- 如果f(n)f(n)f(n)多項式地小于nlogban^{log_ba}nlogb?a,T(n)=Θ(nlogba)T(n)=\Theta(n^{log_ba})T(n)=Θ(nlogb?a)
- 如果f(n)=Θ(nlogba?log2nk),k?0f(n)=\Theta(n^{log_ba}\cdot {log_2^n}^k),k\geqslant 0f(n)=Θ(nlogb?a?log2n?k),k?0,T(n)=Θ(nlogba?log2nk+1)T(n)=\Theta(n^{log_b^a}\cdot {log_2^n}^{k+1})T(n)=Θ(nlogba??log2n?k+1)
- 如果f(n)f(n)f(n)多項式地大于nlogban^{log_ba}nlogb?a,而且af(n/b)?(1??)f(n)af(n/b)\leqslant(1-\epsilon)f(n)af(n/b)?(1??)f(n),則T(n)=Θ(f(n)T(n)=\Theta(f(n)T(n)=Θ(f(n)
其他
雖然上面的方法可以解決絕大部分問題,但是還有一些問題無法用上面的方法進行解決,需要使用一定的數學技巧。
例如,如果遞歸式中出現了指數運算,我們首先應該用冪次代替n
,然后變成除法運算再得到結果。
例如:T(n)=T(n3)+1T(n)=T(\sqrt[3]{n})+1T(n)=T(3n?)+1
我們首先令n=2kn=2^kn=2k,即k=log2nk=log_2nk=log2?n。則:
T(n)=T(2k/3)+1=...=T(1)+log3k=log3log2n=loglognT(n)=T(2^{k/3})+1=...=T(1)+log_3k=log_3{log_2n}=loglognT(n)=T(2k/3)+1=...=T(1)+log3?k=log3?log2?n=loglogn