算法設計與分析 - 主定理


主定理的作用:求解遞推方程。使用主定理,就可以不用迭代法。

條件:得判斷是否滿足3個條件中的一個。

 

T(n)=aT(n/b)+f(n)

  • n:解的規模
  • a:子問題的個數
  • n/b:歸約后子問題的規模
  • f(n):除了子問題,要求解另外增加的計算代價,不參加遞歸。

 

定理:設a>=1,b>=1,為常數,f(n)為函數,T(n)為非負整數,且T(n)=aT(n/b)+f(n),則有3個條件:

下面是主定理的三大條件:

1.f(n)=O(nlogba-ε)

存在ε>0,就是當nlogba的階高於f(n)時,可以存在ε使得nlogba-ε和f(n)的階相同。

此時取T(n)=θ(nlogba)。

2.f(n)=Θ(nlogba)

注意這時nlogba的階和f(n)的階相同,不需要ε。

此時取T(n)=Θ(nlogbalogn)。

3.f(n)=Ω(nlogba+ε)

首先得存在ε>0,就是當nlogba的階低於f(n)時,可以存在ε使得nlogba+ε和f(n)的階相同。

第二個要滿足的條件是:af(n/b)<=cf(n), c<1。

此時取T(n)=Θ(f(n))。

 

來幾道例題:

例一:求解遞推方程T(n)=9T(n/3)+n。

a=9,b=3,f(n)=n。

先判斷nlogba=nlog39=n2,階數高於n,存在f(n)=O(nlogba-ε)=O(n2-1),ε=1。

滿足主定理的條件1,所以T(n)=Θ(nlogba)=Θ(n2)。

 

例二:求解遞推方程T(n)=T(2n/3)+1。

a=1,b=3/2,f(n)=1。

先判斷nlogba=nlog3/21=n0=1,和f(n)同階。

滿足主定理的條件2,所以T(n)=Θ(nlogbalogn)=Θ(logn)。

 

例三:求解遞推方程T(n)=3T(n/4)+nlogn。

a=3,b=4,f(n)=nlogn。

先判斷nlogba=nlog43≈n0.793,階數低於nlogn,存在f(n)=Ω(n0.793+ε),給ε取0.2。

還得判斷是否滿足不等式:af(n/b)<=cf(n),代入f(n)=nlogn,

3n/4log(n/4)和cnlog(n),只要c>=3/4即可滿足<=的關系。

即滿足主定理的條件3,所以T(n)=Θ(f(n))=Θ(nlogn)。

 

總結一下,上面3例分別是主定理的3種滿足條件的遞推方程。實際上一直在判斷nlogba和f(n)的階,誰高,就取誰。同階取Θ(nlogbalogn)。

還有不能使用主定理的例子,這里就不列舉了。這3個例子的來源是   算法設計與分析 屈婉玲教授  的課上舉的例子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM