簡體   English   中英

求解遞歸 T(n) = 2T(n/2) + n^4

[英]Solving a recurrence T(n) = 2T(n/2) + n^4

我正在使用 MIT 課件和 CLRS 書《算法導論》進行學習。

我目前正在嘗試解決重復問題(從第 107 頁開始)

T(n) = 2T(n/2) + n 4

如果我制作一個循環樹,我會得到:

0 級:n 4

級別 1 2(n/2) 4

級別 2 4(n/4) 4

級別 3 8(n/8) 4

樹有 lg(n) 層。 因此我認為復發應該是

T(n) = Θ(n 4 lg n)

但是,如果我使用主定理,我會明白

T(n) = Θ(n 4 )

顯然這兩種方法都不對。 哪一個是正確的? 我的推理哪里出了問題?

第二個看起來是正確的。 請注意,您的重復樹看起來像

n 4 + 2(n/2) 4 + 4(n/4) 4 + ... + 2 i (n / 2 i ) 4

但是 2(n/2) 4 ≠ n 4 ,因為 (n/2) 4 = n 4 / 16,所以 2(n/2) 4 = n 4 /8。 事實上,如果你計算出數學,你會得到在第 i 級完成的工作由下式給出

n 4 / (2 -3i )

所以我們得到 (1 + 1/8 + 1/64 + 1/512 + ... ) n 4 ,可以證明它小於 2n 4 所以你的函數是 Θ(n 4 )。

遞歸是 Θ(n^4)

T(n) = 2*T(n/2) + n^4 
T(n) = 2( 2*T(n/4) + (n/2)^4) + n^4 = 4*T(n/4) + 2*(n/2)^4 + n^4
T(n) = 4(2*T(n/8) + (n/4)^4) + 2*(n/2)^4 + n^4 = 8*T(n/8) + 4*(n/4)^4 + 2(n/2)^4 + n^4

T(n) = 8*T(n/8) + n^4*(1 + 1/(2^3) + 1/(2^6))
...

T(n) = 2^k*T(n/(2^k)) + n^4*(1+ 1/(2^3) + 1/(2^6) + 1/(2^9)...+ 1/((2^(k-1))^3)

We know T(1) = 1

n = 2^k so k = log2(n) Then

T(n) = n*T(1) + n^4*( 1 - (1/(2^3))^k)/(1-1/8)

T(n) = n + (8/7)*n^4*(1 - n^(-3))

T(n) = n + (8/7)*(n^4 - n)

T(n) = (8/7)*n^4 - (1/7)*n


Θ(T(n)) = Θ((8/7)*n^4 - (1/7)*n)
Θ(T(n)) = Θ(n^4)

它是Θ(n^4)

你可以在這里直接使用主定理。

這個方程適合主定理的情況 1,其中log (a) base b < f( n)

a : 重復次數 b : 子部分數

log a base b = log 2 base 2 = 1 < n^4

因此根據主人定理, T(n) = theta(f(n)) = theta(n^4)

由主定理

a=2, b=2, f(n)=n^4

第一步 - 計算 n^(log a to base b) => n(log 2 to base 2) = n*1 = n 第二步 - 是 f(n)> 第一步結果 => n^4> n =>是這意味着使用主定理的案例 3。

第三步 - 檢查規律性條件

a. f(n/b) <= c. f(n) where c>1 
a(n/b) . log(n/b) <= c. f(n)
2.(n/2) . log(n/2) <= c. n^4
n.log(n/2) <= c.n^4

是的,正則性條件滿足,所以我們的解一定是。

T(n) =theta (f(n)) = theta(n^4)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM