T(n) = 2T(n/2) + nlogn的asymptotically tight bound
时间: 2023-05-28 07:02:17 浏览: 176
我们可用主定理(Master Theorem)来证明T(n) = 2T(n/2) 的时间复杂度为nlogn的asymptotically tight bound。
根据主定理,对于递归式T(n) = aT(n/b) + f(n)(其中a和b为常数,且f(n)为渐进正的函数):
如果f(n) = O(n^log[b]a-ε) 对某个常数ε > 0,则T(n) = Θ(n^log[b]a)。
如果f(n) = Θ(n^log[b]a * logk n),则T(n) = Θ(n^log[b]a * logk+1 n) 。
如果f(n) = Ω(n^log[b]a+ε) 对某个常数ε > 0,并且如果对某个常数c < 1和足够大的n,有af(n/b) ≤ cf(n),则T(n) = Θ(f(n)) 。
在这里,a = 2,b = 2,f(n) = 0,因此f(n) = Θ(n^0),即 f(n) = Θ(1)。
因为 f(n) = Θ(1) = Θ(n^0),所以我们可以应用主定理的第一种情况来计算时间复杂度,即:
T(n) = Θ(n^log[b]a) = Θ(n^log[2]2) = Θ(nlogn)
证毕。
相关问题
T(n) = 2T(n/2) + nlogn的tight bound
通过主定理(Master Theorem),可得T(n)=O(nlogn)。因为a=2, b=2, f(n) = n^log_ba = n^log_22 = n。根据主定理,当f(n) = O(n^log_ba-ε)时,复杂度为O(n^log_ba);当f(n) = Θ(n^log_ba)时,复杂度为O(n^log_ba * logn);当f(n) = Ω(n^log_ba+ε)且af(n/b) <= cf(n)时,复杂度为O(f(n))。 因为n = Ω(n^ε),且2(n/2) <= cn,所以满足上述条件。故复杂度为O(nlogn)。
利用主定理说明以下时间函数的复杂度: T(n) = 9T(n/3) + n ;T(n) = T(2n/3) + 1 ;T(n) = 3T(n/4) + nlogn;T(n)=2T(n/2)+2
对于第一个时间函数,根据主定理,其中的a=9,b=3,d=0,因为logb(a) = log3(9) = 2 > d,所以时间复杂度为 O(n^(log3(9))),即 O(n^2.08)。
对于第二个时间函数,根据主定理,其中的a=1,b=3/2,d=0,因为logb(a) = log3/2(1) = 0 < d,所以时间复杂度为 O(1)。
对于第三个时间函数,根据主定理,其中的a=3,b=4,d=1,因为logb(a) = log4(3) < d,所以时间复杂度为 O(nlogn)。
对于第四个时间函数,根据主定理,其中的a=2,b=2,d=1,因为logb(a) = log2(2) = 1 = d,所以时间复杂度为 O(nlogn)。
阅读全文