解决类似的复发:T(n)= 3T(n / 3)+ n / 3

时间:2014-04-24 03:43:09

标签: algorithm big-o recurrence

鉴于..

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)但是......我的步骤出了什么问题?

4 个答案:

答案 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 = 3c = log3(3) = 1以及n^cf(n) = n/3的增长速度相同的情况下,您将属于第二种情况。

此处您有k=1,因此答案为O(n log(n))

答案 3 :(得分:0)

可以通过大师定理解决这个问题:
以递归形式:
enter image description here

其中a> = 1,b> 1,k> = 0,并且p是实数,则:

  1. 如果a> b k ,则
    first case of master theorem

  2. 如果a = b k

       a.) if p >-1, then 
    

2.a case of master theorem

       b.) if p = -1, then 

enter image description here

       c.) if p < -1, then 

enter image description here
3.如果a k
a。)如果p> = 0,则

enter image description here
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))