随机快速排序是快速排序的扩展,其中随机选择枢轴元素。该算法在最坏情况下的时间复杂度是多少?据我说,它应该是,因为最坏的情况是按排序顺序或反向排序顺序选择随机选择的枢轴。但是在某些文本[1] [2]中,最坏的情况是时间复杂度写为
对不对
随机快速排序是快速排序的扩展,其中随机选择枢轴元素。该算法在最坏情况下的时间复杂度是多少?据我说,它应该是,因为最坏的情况是按排序顺序或反向排序顺序选择随机选择的枢轴。但是在某些文本[1] [2]中,最坏的情况是时间复杂度写为
对不对
Answers:
您的两个来源均引用的“最坏情况下预期的运行时间” 。我猜这是指预期的时间要求,这与绝对最差情况不同。
Quicksort通常具有绝对最坏情况下的时间要求。时,在每一个步骤中,将分区分割过程的发生最坏的情况下Ñ -length阵列分成大小的阵列1和ñ - 1。枢轴元素的这种“不幸”选择需要O (n )递归调用,从而导致O (n 2)最坏的情况。
在排序之前随机选择枢轴或随机对数组进行改组有可能使最坏情况变得不太可能发生,特别是对于大型数组。有关预期时间要求为O (n log n )的证明,请参见Wikipedia。根据另一个消息来源,“在对计算机上的大型阵列进行排序时,快速排序将使用二次比较的可能性远小于闪电击中计算机的可能性。”
编辑:
根据Bangye的评论,您可以通过始终选择中位数元素作为枢轴来消除最坏情况的枢轴选择序列。由于找到中位数需要时间,因此给出了Θ (n log n )最坏情况的性能。但是,由于随机快速排序不太可能偶然遇到最坏的情况,因此很少使用确定性中值查找快速排序。
您错过了这些文本谈论的是“最坏情况的预期运行时间”,而不是“最坏情况的预期运行时间”。
他们正在讨论涉及随机元素的Quicksort实现。通常,您具有确定性算法,该算法对于给定的输入将始终产生完全相同的步骤。要确定“最坏情况的运行时”,请检查所有可能的输入,然后选择产生最差运行时的输入。
但是这里我们有一个随机因素。给定一些输入,由于涉及一些随机性,该算法将不会总是执行相同的步骤。我们没有每个固定输入的运行时间,而是有一个“预期运行时间”-我们检查随机决策的每个可能值及其概率,而“预期运行时间”是随机决策每种组合的运行时间的加权平均值,但仍为固定输入。
因此,我们为每个可能的输入计算“预期运行时间”,并获得“最坏情况下的预期运行时间”,我们找到了预期运行时间最差的一个可能输入。显然,他们表明“预期运行时间”的最坏情况仅为O(n log n)。如果只是随机选择第一个枢轴,会将最坏情况的预期运行时间更改为o(n ^ 2)(小o而不是Big O),我不会感到惊讶,因为n个枢轴中只有少数会导致最坏情况行为。
请注意,要进行期望/平均有两件事:输入排列和枢轴(每个分区一个)。
底线,请检查您的来源,他们使用哪种实现方式以及他们认为随机响应的数量。在分析中固定。
随机快速排序的最坏情况是与输入相同的元素。例如:2,2,2,2,2,2