【问题标题】:How can i solve the following recurrence, T(n) = 1 if n = 1, otherwise T(n) = 2T(n/2) + logn ,exactly for n a power of 2?我如何解决以下递归,如果 n = 1,则 T(n) = 1,否则 T(n) = 2T(n/2) + logn ,恰好对于 n 是 2 的幂?
【发布时间】:2017-02-19 01:13:57
【问题描述】:

recurrence is here!

有人可以帮帮我吗?

我知道第一步是:

n = 2^i
T(2^i)=5T(2^i/2) + lg(2^i)
T(2^i)=5T(2^i-1) + lg(2^i)
define t(i) = T(2^i)
t(i)-5t(i-1)-lg(2^i)

我不太擅长 LOG,有人可以指导我吗?

【问题讨论】:

  • lg(2^i)i lg(2)(如果 lg 是底数为 2 的对数,则只是 i)。
  • 把重复放在你的问题中,问题应该是自包含的。
  • 我投票结束这个问题,因为它是一个数学问题,而不是一个编程问题。

标签: algorithm time-complexity recurrence


【解决方案1】:

T(n) = 2*T(n/2) + lg(n)

 = (2^2*T(n/2^2) + 2*lg(n/2)) + lg(n)

 = 2^3*T(n/2^3) + 2^2*lg(n/2^2) + 2*lg(n/2) + lg(n)

 ...    ...    ...

 =  2^i*T(n/2^i) + 2^(i-1)*lg(n/2^(i-1)) + 2^(i-2)*lg(n/2^(i-2)) + .. + 2*lg(n/2^1) + lg(n)

 =  n*T(1) + 2^(i-1)*lg(2) + 2^(i-2)*lg(2^2) + .. + 2*lg(2^(i-1)) + lg(2^i),  where n = 2^i

 =   n*1   +  (2^(i-1) + 2*2^(i-2) + 3*2^(i-3) + ... + (i-1)*2 + i*1)

 =   n   +  (2^(i+1) - 2 - i)    .... (1)

 =   n  + 2*n - 2 - lg(n)

 =   3*n - lg(n) - 2

我们可以将 (1) 显示如下:

  S  =           2^(i-1) + 2*2^(i-2) + 3*2^(i-3) + ... + (i-1)*2 + i*1  (3)
2*S  = 2^(i) + 2*2^(i-1) + 3*2^(i-2) + 4*2^(i-3) + ... + (i)*2          (4)

(4) - (3) => S  = 2^(i) + (2^(i-1) + 2^(i-2) + 2^(i-3) + ... + 2) - i
                = 2^(i) + 2*(2^(i-1)  - 1)/(2-1) - i  
                = 2^i + 2^i - 2 - i   
                = 2^(i+1) - 2 - i  

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2012-10-17
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多