應用Master定理求解遞迴方程

2021-07-05 14:09:49 字數 2550 閱讀 6764

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題目分析 每一次呼叫執行的操作 最大值和...