6

嗨,我正在尝试通过伸缩来解决以下递归关系,但我被困在最后一步。

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 来自哪里?

4

2 回答 2

9

您已经完全正确地完成了所有操作,但无法找到总和。你得到:n + n/2 + n/4 + ...,它等于n * (1 + 1/2 + 1/4 + ...)

你得到一个几何级数的总和,它等于2。因此,您的总和是2n。所以复杂度是O(n)

PS这不叫伸缩。数学中的伸缩是后续术语相互抵消的时候。

于 2015-12-14T05:27:26.130 回答
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)。

于 2012-06-13T05:25:40.493 回答