master定理也叫主定理。它提供了一種通過漸近符號表示遞推關係式的方法。應用master定理可以很簡便的求解遞迴方程。然而,master定理也有其不適用的地方,下面會講到。
假設有如下遞迴方程:t(
n)=a
t(nb
)+f(
n)其中
n 為問題規模,
a為遞推的子問題數量且a≥
1 ,nb
為每個子問題的規模(假設每個子問題的規模基本一樣)且
b>
1 ,f(
n)為遞推以外進行的計算工作。設g
(n)=
nlogbn
則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定理的。
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)=2
t(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)=2
t(n4
)+θ(
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)=2
t(n2
)+θ(
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 at n b f n 其中n 為問題規模,a 為遞推的子問題數量且a 1 nb 為每個子問題的規模...
主定理(主方法)求解遞迴式
用主方法求解遞迴式有條件,必須要求遞迴式為以下形式 其中a 1,b 1,f n 漸進趨正,意為對足夠大的n,f n 是正的,即n n 0n 0 n0 時,f n 0。其中 n為問題規模,a為遞推的子問題數量,n b 為每個子問題的規模 假設每個子問題的規模基本一樣 f n 為遞推以外進行的計算工作。...
遞迴應用演算法設計 求解最大值
問題描述 int maxvalue int value,int n 函式的返回值為求得的最大值 輸入說明 第一行 整數個數n 第二行 n個整數 整數與整數之間用空格分隔 輸出說明 第一行 最大值 輸入範例 7 1 4 2 67 89 23 21 輸出範例 89題目分析 每一次呼叫執行的操作 最大值和...