【发布时间】:2013-12-22 21:38:19
【问题描述】:
我希望得到一些澄清......
我正在学习递归关系,我正在尝试做的一个例子是归并排序。我已经做了好几次递归关系,我一直得到的结果是 O(N),即使教科书上说它是 O(Log(N))。
Mergesort 有重复:
T(1) = 1 T(N) = 2 * T(N/2) + c
经过几次迭代,我得到...
2^k * T(N/2^k) + C*sum(i = 0 -> k-1)2^i
当我求解 k 时,我得到 log2(N),所以我可以通过以下方式简化:
(2^log2(N)) * T(N/2^log2(n)) + C*sum(i = 0 -> k - log2(n)-1)2^i =
N * T(N/N) + C(N-1) = N * d + CN + N
归结为 O(N)
但是
根据我的教科书,Mergesort 应该是 O(log(N))。
我的计算有问题吗?
我还发现有人在这里做了同样的关系并得到了完全相同的结果:http://courses.cs.washington.edu/courses/cse326/06su/lectures/lecture13_proofs.pdf
任何指导将不胜感激!
【问题讨论】:
-
合并排序既不是 O(N) 也不是 O(log N)(就时间复杂度而言)...
-
这是一道数学题,不是编程题。
标签: algorithm sorting recursion mergesort recurrence