递归关系:T(n) = T(n/2) + n
Posted
技术标签:
【中文标题】递归关系:T(n) = T(n/2) + n【英文标题】:Recurrence relation: T(n) = T(n/2) + n 【发布时间】:2012-06-08 16:52:33 【问题描述】:您好,我正在尝试通过伸缩来解决以下递归关系,但我被困在最后一步。
T(N) = T(N/2) + N T(1)=0
T(N/2) = T(N/4) + N/2
T(N/4) = T(N/8) + N/4
...
T(2) = T(1) + 2
T(N)= T(1) + N + N/2 + N/4
我认为答案是 nlogn,但我不知道如何将上述解释为 nlogn。我可以看到我正在执行登录步骤,但是 n 来自哪里?
【问题讨论】:
【参考方案1】:您已经完全正确地完成了所有操作,但无法找到总和。你得到:n + n/2 + n/4 + ...
,等于n * (1 + 1/2 + 1/4 + ...)
。
您得到了 geometric series 的总和,等于 2
。因此,您的总和是2n
。所以复杂度是O(n)
。
P.S.这不叫伸缩。数学中的伸缩是后续项相互抵消的时候。
【讨论】:
【参考方案2】:答案不是 nlogn 而是简单的 n
T(1)=0
T(N) = T(N/2) + N
T(N/2) = T(N/4) + N/2
T(N/4) = T(N/8) + N/4 ... T(2) = T(1) + 2
伸缩式展开共有log(N)个语句
现在通过伸缩取消,
我们有 T(N) = T(1) + N + N/2 + N/4 + N/8 +.....+ 2
T(1) = 0
T(N) = N + N/2 + ..... + 2
这是一个包含 log(n) 项的几何级数,每个项减半。
T(N) = N [ 1 - (1/2)^log(N)] / (1/2)
T(N) = 2N[1 - 1/N]
T(N) = 2N - 2
因此答案是 O(N)。
【讨论】:
T(1) 不应该是 1 吗?以上是关于递归关系:T(n) = T(n/2) + n的主要内容,如果未能解决你的问题,请参考以下文章
求解递归 T(n) = T(n/2) + lg n? [关闭]
递归的复杂度:T(n) = T(n-1) + T(n-2) + C