替代方法

时间:2012-03-03 16:01:12

标签: algorithm complexity-theory master-theorem

我只是想验证一些事情我是否按照下面的步骤做了?

T(n)   = 3T(n/3) + n  : Theta(nlogn)

O(nlogn)

T(k)   = cklog(k)  k<n

T(n/4) = c(n/3)log(n/3)
       = c(n/3)[logn - log3]
       = c(n/3)logn - c(n/3)log3    

T(n)   = cnlogn-cnlog3 + n

       <= cnlogn -cn + n 
       <= cnlogn -dn **[STEP A]**
       <= cnlogn if c >= d

Omega(nlogn)
   >= cnlogn -cn + n 
   >= cnlogn -dn **[STEP A]**
   >= cnlogn if 0 < c <= d  

我在步骤A遇到问题,我最终得到的是我的c系列:

对于上限,

c> = 1 0&lt; c <= 1,下限为

为什么要合并cn + n有特殊原因。我可以看到它背后的逻辑但是有必要这样做吗?因为那时我可以做任何情况......这有点奇怪......

1 个答案:

答案 0 :(得分:1)

你还是对的,直到:

T(n) = cnlogn-cnlog3 + n
     >= cnlogn -cn + n

代表Ω(nlogn)

因为它仅适用于c <= 0,这与我们假设c> = 0相矛盾。

修复第二个证明的一种方法可能是:

T(n) = cnlogn - cnlog3 + n
     = cnlogn - n(clog3 - 1)
     <= cnlogn when c >= 1/log3 

因此:T(n) = Ω(nlogn)

通常,下限和上限的值无关紧要。目标是找到两个常量c1c2,以便:

c1*n*logn <= T(n) <= c2*n*logn forall n >= some n0