簡體   English   中英

求解類似的遞歸:T(n) = 3T(n/3) + n/3

[英]Solving the similar recurrence: T(n) = 3T(n/3) + n/3

鑒於...

T(0) = 3 for n <= 1

T(n) = 3T(n/3) + n/3 for n > 1

所以答案應該是O(nlogn) .. 這就是我是怎么做的,它沒有給我正確的答案:

T(n) = 3T(n/3) + n/3

T(n/3) = 3T(n/3^2) + n/3^2

將其代入 T(n) 給出..

T(n) = 3(3T(n/3^2) + n/3^2) + n/3

T(n/3^2) = 3(3(3T(n/3^3) + n/3^3) + n/3^2) + n/3

最終它會看起來像..

T(n) = 3^k (T(n/3^k)) + cn/3^k

設置k = lgn..

T(n) = 3^lgn * (T(n/3^lgn)) + cn/3^lgn

T(n) = n * T(0) + c

T(n) = 3n + c

答案是O(n) ..我的步驟有什么問題?

最終它看起來像.. T(n) = 3^k (T(n/3^k)) + cn/3^k

不。最終它會看起來像

T(n) = 3^k * T(n/3^k) + k*n/3

你打開的括號不准確。

T(n) = 3T(n/3) + n/3
T(n/3) = 3T(n/9) + n/9

T(n) = 3(3T(n/9) + n/9) + n/3
     = 9T(n/9) + 2*n/3      //statement 1

T(n/9)= 3T(n/27) + n/27
T(n)  = 9 (3T(n/27)+n/27) + 2*n/3 // replacing T(n/9) in statement 1
      =  27 T (n/27) + 3*(n/3)

T(n)  = 3^k* T(n/3^k) + k* (n/3) // eventually

用 log n 替換 k 到基數 3。

T(n)  = n T(1) + (log n) (n/3);
// T(1) = 3
T(n)  = 3*n + (log n) (n/3);
Hence , O (n* logn)

使用大師定理很容易解決這些類型的問題。 在您的情況下a = b = 3c = log3(3) = 1並且因為n^c以與f(n) = n/3相同的速率增長,所以您屬於第二種情況。

這里你有你的k=1 ,因此答案是O(n log(n))

這個問題可以通過主定理來解決:
以遞歸形式:
在此處輸入圖片說明

其中 a>=1, b>1, k >=0 且 p 為實數,則:

  1. 如果 a > b k ,則
    主定理的第一種情況

  2. 如果 a = b k

     a.) if p >-1, then

2.主定理的一個例子

       b.) if p = -1, then 

在此處輸入圖片說明

       c.) if p < -1, then 

在此處輸入圖片說明
3. 如果 a < b k
a.) 如果 p >=0,則

在此處輸入圖片說明
b.) 如果 p<0,則 T(n) = O(n k )

所以,上面的方程

   T(n) = 3T(n/3) + n/3  

a = 3, b = 3, k =1, p =0    

所以它屬於 2.a 情況,其中 a = b k
所以答案將是

O(n⋅log(n)) 

暫無
暫無

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

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