我只是想验证一些事情我是否按照下面的步骤做了?
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有特殊原因。我可以看到它背后的逻辑但是有必要这样做吗?因为那时我可以做任何情况......这有点奇怪......
答案 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)
。
通常,下限和上限的值无关紧要。目标是找到两个常量c1
和c2
,以便:
c1*n*logn <= T(n) <= c2*n*logn
forall n >= some n0
。