请验证我的逻辑,看看我正在尝试的是有效还是阴暗。
W(n) = W(n/2) + nlg(n)
W(1) = 1
n =2^k
尝试模式
line 1 : W (2^k) = W(2^k-1) + nlgn
line 2 : = W(2^k-2) + nlgn + nlgn
...
line i : = W(2^k-i) + i*nlgn
然后解决剩下的问题。
如果我在一个地方(在第1行)替换2 k 而在n lg n
替换另一个地方,我只是想确保它很酷。
我发现2^k for 2^k lg(2^k)
中的副词变得非常油腻。
欢迎任何想法(特别是如果我应该在2 ^ k中进行补充,如果我应该,那么你会如何建议解决方案)
答案 0 :(得分:0)
根据需要在n和2 k 之间来回切换是很好的,因为你假设n = 2 k 。但是,这并不意味着您拥有的内容是正确的。请记住,当n减小时,n log n的值也会不断减小,因此声明不是这样的
第i行= W(2 k-i )+ i * n lg n
是真的。
让我们再次使用迭代方法:
W(n)= W(n / 2)+ n log n
=(W(n / 4)+(n / 2)log(n / 2))+ n log n
= W(n / 4)+(n / 2)(log n - 1)+ n log n
= W(n / 4)+ n log n / 2 -n / 2 + n log n
= W(n / 4)+(1 + 1/2)n log n -n / 2
=(W(n / 8)+(n / 4)log(n / 4))+(1 + 1/2)n log n - n / 2
= W(n / 8)+(n / 4)(log n - 2)+(1 + 1/2)n log n - n / 2
= W(n / 8)+ n log n / 4 - n / 2 +(1 + 1/2)log n - n / 2
= W(n / 8)+(1 + 1/2 + 1/4)n log n - n
=(W(n / 16)+(n / 8)log(n / 8))+(1 + 1/2 + 1/4)n log n - n
= W(n / 16)+(n / 8)(log n - 3))+(1 + 1/2 + 1/4)n log n - n
= W(n / 16)+ n log n / 8 - 3n / 8 +(1 + 1/2 + 1/4)n log n - n
= W(n / 16)+(1 + 1/2 + 1/4 + 1/8)n log n - n - 3 / 8n
我们可以看看这个,看看我们是否发现了一个模式。首先,注意n log n项的系数为(1 + 1/2 + 1/4 + 1/8 + ...),因为我们不断向外扩展。该系列收敛到2,因此当迭代停止时,该项将在n log n和2 n log n之间。接下来,查看-n term的系数。如果你仔细观察,你会发现这个系数是-1倍
(1/2 + 2/4 + 3/8 + 4/16 + 5/32 + ......)
这是i / 2 i 的总和,它收敛于2.因此,如果我们迭代这个过程,我们将在每个步骤中找到值为Θ(n log n) - Θ(n),因此整体递归求解为Θ(n log n)。
希望这有帮助!