为什么随机化快速排序具有O(n log n)的最坏情况运行时间成本


18

随机快速排序快速排序的扩展,其中随机选择枢轴元素。该算法在最坏情况下的时间复杂度是多少?据我说,它应该是Øñ2,因为最坏的情况是排序顺序或反向排序顺序选择随机选择的枢轴。但是在某些文本[1] [2]中,最坏的情况是时间复杂度写为Øñ日志ñ

对不对


3
您应该在谈论这个“一些文本”。那里藏着什么。如果您再次阅读此“文本”,将会发现它
AJed 2015年

注意:链接[1]已失效。链接[2]明确指出算法是随机的,因此对于任何输入,您都没有“运行时”,而是“预期运行时”。对于最坏的输入,预期的运行时间为O(n log n)。
gnasher729

Answers:


18

您的两个来源均引用的“最坏情况下预期的运行时间” 我猜这是指预期的时间要求,这与绝对最差情况不同。Øñ日志ñ

Quicksort通常具有绝对最坏情况下的时间要求。时,在每一个步骤中,将分区分割过程的发生最坏的情况下Ñ -length阵列分成大小的阵列1ñ - 1。枢轴元素的这种“不幸”选择需要O n 递归调用,从而导致O n 2最坏的情况。Øñ2ñ1个ñ-1个ØñØñ2

在排序之前随机选择枢轴或随机对数组进行改组有可能使最坏情况变得不太可能发生,特别是对于大型数组。有关预期时间要求为O n log n 的证明,请参见Wikipedia。根据另一个消息来源,“在对计算机上的大型阵列进行排序时,快速排序将使用二次比较的可能性远小于闪电击中计算机的可能性。”Øñ日志ñ

编辑:

根据Bangye的评论,您可以通过始终选择中位数元素作为枢轴来消除最坏情况的枢轴选择序列。由于找到中位数需要时间,因此给出了Θ n log n 最坏情况的性能。但是,由于随机快速排序不太可能偶然遇到最坏的情况,因此很少使用确定性中值查找快速排序。ØñΘñ日志ñ


因此,总的来说,我们可以说它在最坏的情况下表现为二次方
Atinesh

@Atinesh不,至少如果您的意思是Θ
拉斐尔

我认为说随机快速排序的最坏情况是Øñ2
James Evans

4
如果人们采用线性时间算法来找到中位数作为枢轴,那么在最坏的情况下,快速排序可能只花费时间。当然,随机快速排序通常具有更好的实用性能。Θñ日志ñ
Bangye 2015年

6

您错过了这些文本谈论的是“最坏情况的预期运行时间”,而不是“最坏情况的预期运行时间”。

他们正在讨论涉及随机元素的Quicksort实现。通常,您具有确定性算法,该算法对于给定的输入将始终产生完全相同的步骤。要确定“最坏情况的运行时”,请检查所有可能的输入,然后选择产生最差运行时的输入。

但是这里我们有一个随机因素。给定一些输入,由于涉及一些随机性,该算法将不会总是执行相同的步骤。我们没有每个固定输入的运行时间,而是有一个“预期运行时间”-我们检查随机决策的每个可能值及其概率,而“预期运行时间”是随机决策每种组合的运行时间的加权平均值,但仍为固定输入。

因此,我们为每个可能的输入计算“预期运行时间”,并获得“最坏情况下的预期运行时间”,我们找到了预期运行时间最差的一个可能输入。显然,他们表明“预期运行时间”的最坏情况仅为O(n log n)。如果只是随机选择第一个枢轴,会将最坏情况的预期运行时间更改为o(n ^ 2)(小o而不是Big O),我不会感到惊讶,因为n个枢轴中只有少数会导致最坏情况行为。


2

请注意,要进行期望/平均有件事:输入排列和枢轴(每个分区一个)。

ñΘñ日志ñ

Θñ日志ñ

底线,请检查您的来源,他们使用哪种实现方式以及他们认为随机响应的数量。在分析中固定。


考虑一下我在考试中提出的问题 postimg.org/image/fiurc4z87。您会建议我认为什么适当的
答案

1
@Atinesh我想我的答案为您提供了足够的信息。
拉斐尔

-1

Øñ2

随机快速排序的最坏情况是与输入相同的元素。例如:2,2,2,2,2,2

Ťñ=Ťñ-1个+ñØñ2


那就是如果您对quicksort的实现非常愚蠢。任何像样的实施将在#1和#6,#2和#5,#3和#4,将然后排序长度3的两个子阵列的第一个分区交换
gnasher729

我猜您在从LHS和RHS扫描的两个指针上都具有<=和> =。这就是为什么你这么说。'='与两个指针中的一个相关联,而不是与两个都相关联。在这种情况下,递归树长到n。
pratyay '16

这就是我所说的极其愚蠢的实现。对于“所有元素都相等”的情况,任何需要二次运行的实现都是愚蠢的。在这种情况下,实际上有一些实现需要花费线性时间(O(n),而不是O(n log n))。
gnasher729
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.