比较排序算法在最坏的情况下需要Ω(nlgn)比较

时间:2014-09-17 00:33:19

标签: algorithm sorting

这取自名为Intro to Algorithms的畅销书。作者指出,在最坏的情况下,任何比较排序算法都需要Ω(nlgn)比较。以冒泡排序算法为例,在最坏的情况下,我们有一个上限O(n ^ 2)。 Omega表示较低或最小的边界,因此最坏情况的下限不会是Ω(n ^ 2)?如果气泡排序具有下限,例如建议的Ω(nlgn),而不是最差情况下的n ^ 2?在最糟糕的情况下,性能冒泡排序不能至少采用nlgn。

4 个答案:

答案 0 :(得分:3)

作者说任何算法:在最坏的情况下,没有算法能比Ω(N Log(N))更好。

原因很容易理解:任何基于比较的排序算法都是二元决策树(if-then-else的长动态序列)。由于算法必须能够处理数据的任何排列,因此它必须能够以不同的方式置换所有N!个案例,并且树必须至少具有多个叶子。因此,决策树的高度,即最坏情况的复杂性,至少为Lg(N!)=Ω(N.Log(N))

当决策树平衡良好(Heapsort)时,高度也是O(N.Log(N))

当决策树强烈失衡(Bubblesort)时,高度可能变为O(N²)


<强>附录

由于Ω表示下限,因此任何下限都是有效的。因此,冒泡排序的最差情况是Θ(N²),它也是Ω(N²)Ω(N.Log(N))Ω(N)Ω(Log N)Ω(1) ......

答案 1 :(得分:1)

稍微过度简化*,当我们谈论算法问题的下限时,我们对最佳算法在最差情况下的表现感兴趣。最好的基于比较的排序算法(例如,mergesort)在最坏的情况下使用大约n log n比较,因此排序的下限被引用为Omega(n log n)。不是最好的算法,例如冒泡排序,可能比最坏情况下的最佳算法更糟糕。在最好的情况下,它们可能比最佳算法做得更好。这些事实都不符合排序的下限。

*可能没有一个最佳算法。

答案 2 :(得分:0)

您需要关注“至少”的含义,用Ω表示。

“在最坏的情况下,冒泡排序需要进行Ω(nlg(n))比较”这不是一个错误的陈述,因为它需要至少knlg(n)比较一些常数k

是的,我们知道在最坏的情况下,冒泡排序需要Ω(n^2)。但是,这并不会使上述声明为假。因此,作者声称是正确的。

这是一个例子,希望澄清情况:

“无论我有多累,我都可以做至少50次俯卧撑”

所以知道,下面的语句是假的吗?

“无论我有多累,我都可以做至少20次俯卧撑”

答案 3 :(得分:0)

  1. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.8/d3.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>