何时插入排序比合并排序更快?

时间:2012-12-16 22:37:46

标签: runtime mergesort insertion-sort

对于作业问题,我被告知插入排序运行在8n ^ 2,合并排序运行在64(n(lg n))。作为我给出的解决方案的一部分,它说插入排序比合并排序更快,只要n <= 43,但老师的答案并没有真正解释他为什么或如何到达43。有人可以解释这个吗?我找出运行时间并不是那么好,所以我想要更好地理解。是的,我试过问老师,但我还是很困惑。任何帮助都会很棒!谢谢!

2 个答案:

答案 0 :(得分:7)

它来自这个(代数)推理线

steps_in_insertion_sort <= steps_in_merge_sort
8n^2 <= 64n lg n
n^2 <= 8n lg n
n <= 8 lg n

然后43通过反复试验,或通过求解方程零的n - 8 lg n = 0。

对于通过反复试验进行黑客攻击,请注意:

$ python
>>> 8 * log(43)/log(2)
43.41011803761678

因为“lg”表示log-base-two。

(除此之外:像这样的计算并没有真正转化为任何一种算法会击败另一种算法的现实指示。严重的是,恰好是43?)

答案 1 :(得分:1)

这是Cormen第3版“算法入门”中的第二个练习题。 对于算法的新手来说,这个等式的解决方案并不是那么简单:

插入 分类 节拍 合并 分类 什么时候 8N ^ 2 &LT; 64N LG ñ , ñ &LT; 8 LG ñ , 2 ^ N / 8 &LT; ñ 。 这个 是 真正 对于 2 &LT = ñ &LT = 43 (发现 通过 运用 一个 计算器)。 因此,我们可以改写 合并 分类 至 使用 插入 分类 对于 输入 的 尺寸 43 要么 减 在 订购 至 提高 该 赛跑 时间。