嗨,我试图通过伸缩解决以下复发关系,但我被困在最后一步.
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
Run Code Online (Sandbox Code Playgroud)
我认为答案是nlogn,但我不知道如何将上述解释为nlogn.我可以看到我正在做logn步骤但是n来自哪里?
小智 3
答案不是 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)。
| 归档时间: |
|
| 查看次数: |
17985 次 |
| 最近记录: |