重现:T(n)= T(n / 2)+ log N.

时间:2017-02-23 03:51:31

标签: algorithm runtime recurrence induction

我遇到了一个复发问题。

T(n)= T(n / 2)+ log N

我现在所拥有的是:

T(N)= T(N / 2)+ log N

T(N / 2)= T(N / 4)+ log(N / 2)

...

T(N)= T(N / 2 ^ k)+ sum [i = 0且k {log(N / 2 ^ i)}]

我坚持下一步该做什么。请给我一些建议。

谢谢!

2 个答案:

答案 0 :(得分:1)

另一种方法是使用Master Theorem(或Wikipedia)。对于大多数复发,它是适用的,并且提供了非常快的答案。

它基本上给你三个类别,然后答案就会消失。给定形式T(n)= aT(n / b)+ f(n)的重现,我们寻找a,b和f(n)。在您的情况下,我们有a = 1,b = 2,f(n)= log n。

因此(你必须看看引用的链接)我们属于案例2,其中f(n)在Theta(n ^(log_b(a-eps))log ^ k(n))= Theta(n ^ 0 log(n)),然后主定理表明T(n)在Theta(n ^(log_b(a-eps))log ^(k + 1)(n))= Theta(log ^ 2( n))的

答案 1 :(得分:0)

 T(1) = c                         (= c + 0)
 T(2) = T(1) +  log(2)             = c + 1
 T(4) = T(2) +  log(4) = c + 1 + 2 = c + 3
 T(8) = T(4) +  log(8) = c + 3 + 3 = c + 6
T(16) = T(8) + log(16) = c + 6 + 4 = c + 10
...

n | T(n)  | T(n) - T(n-1)
--+---------------------
 1| c +  0| -
 2| c +  1| 1
 4| c +  3| 2
 8| c +  6| 3
16| c + 10| 4

T(n) = c + (log n)(1 + log n) / 2 = O(log^2 n)

另一种看待同样事物的方法:

n = 2^m
S(m) = T(2^m) = T(2^m / 2) + log(2^m) = S(m - 1) + m
m | S(m)
--+-----
0 | c
1 | c + 1
2 | c + 1 + 2 = c + 3
3 | c + 3 + 3 = c + 6
4 | c + 6 + 4 = c + 10
...
S(m) = c + m(m + 1) / 2
T(2^m) = c + m(m + 1) / 2
T(n) = c + (log n)(1 + log n) / 2 = O(log^2 n)