递归关系: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-1)+ n

求解递归 T(n) = T(n/2) + lg n? [关闭]

具有三个递归调用的递归函数的时间复杂度

递归的复杂度:T(n) = T(n-1) + T(n-2) + C

使用主定理求解递归 T(n) = T(n / 2) + O(1)? [关闭]

求解递归关系 T(n) = T(n-√n)+1