master定理也叫主定理。它提供了一種通過漸近符號表示遞推關係式的方法。應用master定理可以很簡便的求解遞迴方程。然而,master定理也有其不適用的地方,下面會講到。
假設有如下遞迴方程: t
(n)=
at(n
b)+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)>lgn
f(n)
g(n)
>lgn
f(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)=n
logba=
nlog21
=12. f(
n)=g
(n)
3. 因此t(
n)=θ
(g(n
)lgn)
=θ(lg
n)
怎麼樣,是不是很簡單。再舉幾個不同的栗子接著感受下
二叉樹遍歷的遞迴方程如下: t
(n)=
2t(n
2)+θ
(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(n
4)+θ
(nlgn
) 按照上面的步驟走:a=
2 ,b=
4 ,f(
n)=n
lgn,則g(
n)=n
log4
2<
n f(
n)大f(
n)g(
n)=n
lgnnlog42
>lgn
因此t(
n)=θ
(f(n
))=θ
(nlgn
)
遞迴方程如下: t
(n)=
2t(n
2)+θ
(nlgn
) 這次再按照上面的步驟走:a=
2 , b=
2 , f(
n)=n
lgn, 則g(
n)=n
f(n) 更大f(
n)g(
n)=lg
n≯lgn
因此,這個遞迴方程不能夠使用master定理解決
通過上面的幾個栗子應該能對master定理感覺的差不多了吧?但其實,還是有點小小的問題的。
我這篇部落格裡寫的master定理實際上並不是很嚴謹,為了更加簡便理解與使用對原來的master定理新增了些自己的理解在裡面,完整的master定理的定義可以參考下面維基百科的描述或者直接到《演算法導論》中檢視。
當然,我理解的版本的master定理或許有誤,歡迎批評指正。
應用Master定理求解遞迴方程
master定理也叫主定理。它提供了一種通過漸近符號表示遞推關係式的方法。應用master定理可以很簡便的求解遞迴方程。然而,master定理也有其不適用的地方,下面會講到。假設有如下遞迴方程 t n a t nb f n 其中 n 為問題規模,a為遞推的子問題數量且a 1 nb 為每個子問題的規模...
演算法的複雜度與Master定理
平時設計或者閱讀乙個演算法的時候,必然會提到演算法的複雜度 包括時間複雜度和空間複雜度 比如我們說乙個二分查詢演算法的平均時間複雜度為o log n 快速排序可能是o n log n 那這裡的o是什麼意思?這樣的表達是否準確呢?先插一句,在演算法複雜度分析中,log通常表示以2為底的對數。演算法複雜...
遞迴方法巧解不定方程
多元一次方程往往採用迴圈求解。筆者在與們討論乙個問題 過程中,琢磨出一種演算法,採用遞迴進行多元一次方程的求解。並將解分為整數解和 非負整數解兩種情況,請大家指教。private sub command1 click 演示求x1 x2 x3 x4 x5 10整數解 text1.text dim an...