鉴于..
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)
但是......我的步骤出了什么问题?
答案 0 :(得分:0)
最终看起来像......
T(n) = 3^k (T(n/3^k)) + cn/3^k
没有。最终它看起来像
T(n) = 3^k * T(n/3^k) + k*n/3
您没有准确地打开括号。
答案 1 :(得分:0)
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
将k替换为log n到基数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)
答案 2 :(得分:0)
使用masters theorem可以轻松解决这些类型的问题。在您的情况a = b = 3
,c = log3(3) = 1
以及n^c
与f(n) = n/3
的增长速度相同的情况下,您将属于第二种情况。
此处您有k=1
,因此答案为O(n log(n))
答案 3 :(得分:0)