[英]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 = 3
, c = log3(3) = 1
並且因為n^c
以與f(n) = n/3
相同的速率增長,所以您屬於第二種情況。
這里你有你的k=1
,因此答案是O(n log(n))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.