关于排序算法复杂性的下限

时间:2017-10-15 02:25:48

标签: sorting mergesort lower-bound

我正在阅读R. Sedgewick和Kevin Wayne撰写的“算法第4版”:

  

这个结果可以作为我们在设计排序算法时知道我们可以做得多好的指南。例如,如果没有这样的结果,人们可能会尝试设计一种基于比较的排序算法,在最坏的情况下,使用与mergesort一半的比较。命题I的下限表示这样的努力是徒劳的 - 不存在这样的算法。

在最坏的情况下,没有基于比较的排序算法使用的数量与mergesort相比减少了一半吗?

1 个答案:

答案 0 :(得分:1)

当然,你不能在{sup> 1 基于比较的 2 排序中进行优于O(nlogn)的排序。这里有一个数学证明:

  

在最坏的情况下,没有算法比mergesort使用一半的算法确实是真的吗?

这完全是另一个问题。理论下限是对比数的lg(n!)。

可能有一种算法比合并排序使用更少的比较,但仍然适合理论界限。这取决于合并排序的精确实现以及在最坏情况下它需要做的比较次数。

根据Wikipedia

  

在最坏的情况下,比较合并排序的数量等于或略小于(n⌈lgn⌉ - 2⌈lgn⌉+ 1),它在(n lg n - n + 1)之间和(n lg n + n + O(lg n))

请注意,这些不是精确的措施!

但是,是否存在“优于合并排序”算法的问题归结为“略小于(n lg n - n + 1)”与lg(n!)的接近程度。

在预测实际绩效时(与复杂性不同)要考虑的其他事项是:

  • 算法中的其他开销,如果只计算比较,则会隐藏。
  • 算法在常见用例中的表现如何;例如当输入几乎被命令开始时。

1 - 例如,不假设输入列表的初始顺序。

2 - 计数排序为O(n),但不依赖于比较。