master公式求遞歸時間複雜度

 

轉載連接:http://blog.csdn.net/qq_33859479/article/details/78295039

 

 

 

什麼是Master定理

簡介

 

Master定理也叫主定理。它提供了一種通過漸近符號表示遞推關係式的方法。應用Master定理可以很簡便的求解遞歸方程。然而,Master定理也有其不適用的地方,下面會講到。

定義

假設有如下遞歸方程:

 

T(n)=aT(nb)+f(n)

 

其中n爲問題規模,a爲遞推的子問題數量且a≥1,nb爲每個子問題的規模(假設每個子問題的規模基本一樣)且b>1,f(n)爲遞推以外進行的計算工作。

g(n)=nlogba


T(n)=⎧⎩⎨⎪⎪⎪⎪⎪⎪Θ(g(n)),Θ(f(n)),Θ(g(n)lgn),g(n)f(n)>lgnf(n)g(n)>lgnf(n)=g(n)

 

一句話概括就是誰大取誰,相等就乘lgn。

不適用範圍

如上定義所述,當g(n)f(n)<=lgn或f(n)g(n)<=lgn時,Master定理是無能爲力的。因此,當遇到上面的情況時是不能使用Master定理的。

怎麼使用

在應用Master定理時只需自己在心中默默的問上自己幾個問題,就可以計算出遞歸方程的漸進複雜度。下面咱們走上一遍:

  1. a是誰,b是誰,g(n)是多少,f(n)又是多少?
  2. g(n)大還是f(n)大還是一樣大?
  3. 如果g(n)大,那麼g(n)f(n)>lgn?
  4. 如果f(n)大,那麼f(n)g(n)>lgn ?

既然知道了怎麼用,那下面就來幾個例題再近距離感受下Master定理的強大。

舉幾個栗子

二分搜索

二分搜索的遞歸方程如下:

 

T(n)=T(n2)+Θ(1)

 

按照上面的步驟,走上一遍試一下:

在這裏, 
1. a=1,b=2,f(n)=1,那麼g(n)=nlogba=nlog21=1 
2. f(n)=g(n) 
3. 因此T(n)=Θ(g(n)lgn)=Θ(lgn)

怎麼樣,是不是很簡單。再舉幾個不同的栗子接着感受下

二叉樹遍歷

二叉樹遍歷的遞歸方程如下:

 

T(n)=2T(n2)+Θ(1)

 

繼續按照上面的步驟走:

  1. a=2,b=2,f(n)=1,因此,g(n)=n
  2. g(n)大
  3. g(n)f(n)=n>lgn
  4. 因此T(n)=Θ(g(n))=Θ(n)

依然不費力氣,下面再來一個

隨便想的栗子一

遞歸方程如下所示:

 

T(n)=2T(n4)+Θ(nlgn)

 

按照上面的步驟走:

  1. a=2,b=4,f(n)=nlgn,則g(n)=nlog42<n
  2. f(n)大
  3. f(n)g(n)=nlgnnlog42>lgn
  4. 因此T(n)=Θ(f(n))=Θ(nlgn)

隨便想的栗子二

遞歸方程如下:

 

T(n)=2T(n2)+Θ(nlgn)

 

這次再按照上面的步驟走:

  1. a=2, b=2, f(n)=nlgn, 則g(n)=n
  2. f(n)更大
  3. f(n)g(n)=lgn≯lgn
  4. 因此,這個遞歸方程不能夠使用Master定理解決

通過上面的幾個栗子應該能對Master定理感覺的差不多了吧?但其實,還是有點小小的問題的。

一點問題

我這篇博客裏寫的Master定理實際上並不是很嚴謹,爲了更加簡便理解與使用對原來的Master定理添加了些自己的理解在裏面,完整的Master定理的定義可以參考下面維基百科的描述或者直接到《算法導論》中查看。

當然,我理解的版本的Master定理或許有誤,歡迎批評指正。

 

PS:簡單的表達方式

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章