轉載連接: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定理時只需自己在心中默默的問上自己幾個問題,就可以計算出遞歸方程的漸進複雜度。下面咱們走上一遍:
- a是誰,b是誰,g(n)是多少,f(n)又是多少?
- g(n)大還是f(n)大還是一樣大?
- 如果g(n)大,那麼g(n)f(n)>lgn?
- 如果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)
繼續按照上面的步驟走:
- a=2,b=2,f(n)=1,因此,g(n)=n
- g(n)大
- g(n)f(n)=n>lgn
- 因此T(n)=Θ(g(n))=Θ(n)
依然不費力氣,下面再來一個
隨便想的栗子一
遞歸方程如下所示:
T(n)=2T(n4)+Θ(nlgn)
按照上面的步驟走:
- a=2,b=4,f(n)=nlgn,則g(n)=nlog42<n
- f(n)大
- f(n)g(n)=nlgnnlog42>lgn
- 因此T(n)=Θ(f(n))=Θ(nlgn)
隨便想的栗子二
遞歸方程如下:
T(n)=2T(n2)+Θ(nlgn)
這次再按照上面的步驟走:
- a=2, b=2, f(n)=nlgn, 則g(n)=n
- f(n)更大
- f(n)g(n)=lgn≯lgn
- 因此,這個遞歸方程不能夠使用Master定理解決
通過上面的幾個栗子應該能對Master定理感覺的差不多了吧?但其實,還是有點小小的問題的。
一點問題
我這篇博客裏寫的Master定理實際上並不是很嚴謹,爲了更加簡便理解與使用對原來的Master定理添加了些自己的理解在裏面,完整的Master定理的定義可以參考下面維基百科的描述或者直接到《算法導論》中查看。
當然,我理解的版本的Master定理或許有誤,歡迎批評指正。
PS:簡單的表達方式