嗨,我正在尝试通过伸缩来解决以下递归关系,但我被困在最后一步。
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 来自哪里?
嗨,我正在尝试通过伸缩来解决以下递归关系,但我被困在最后一步。
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 来自哪里?
您已经完全正确地完成了所有操作,但无法找到总和。你得到:n + n/2 + n/4 + ...
,它等于n * (1 + 1/2 + 1/4 + ...)
。
你得到一个几何级数的总和,它等于2
。因此,您的总和是2n
。所以复杂度是O(n)
。
PS这不叫伸缩。数学中的伸缩是后续术语相互抵消的时候。
答案不是 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)。