有人可以澄清Quicksort和Randomized Quicksort之间的区别吗?

时间:2017-01-06 20:31:08

标签: algorithm sorting

如果我选择一个随机枢轴而不是仅选择无序集/列表中的第一个枢轴,它会有什么不同?

如果集合是无序的,那么不选择集合中的第一个值,它本身就是随机的吗?基本上,我试图理解如何随机化承诺更好的最坏情况运行时。

1 个答案:

答案 0 :(得分:4)

我认为你可能会混淆任意随机的概念。选择数组的第一个元素是任意 - 你可以选择你想要的任何元素,它同样可以正常工作 - 但它不是随机随机选项是无法提前预测的选项。 任意选项可以是。

让我们假设您在排序的序列1,2,3,4,5,6,...,n上使用快速排序。如果您选择第一个元素作为数据透视表,那么您将选择1作为数据透视表。所有n - 1个其他元素然后向右移动,没有任何东西向左移动,你将递归地快速排序2,3,4,5,...,n。

当您快速分配该范围时,您将选择2作为枢轴。对元素进行分区然后在左边放置任何内容,在右边放置数字3,4,5,6,...,n,所以你将递归地快速排序3,4,5,6,...,n。< / p>

更一般地说,在k步之后,你将选择数字k作为枢轴,将数字k + 1,k + 2,...,n放在右边,然后递归地快速分配它们。

这里完成的总工作最终是Θ(n 2 ),因为在第一次传递(到分区2,3,...,n大约1)时你必须看n -1个元素,在第二遍(到分区3,4,5,...,n大约2),你必须看n-2个元素等。这意味着完成的工作是(n-1) +(n-2)+ ... + 1 =Θ(n 2 ),非常低效!

现在,将其与随机快速排序进行对比。在随机快速排序中,您真正选择随机元素作为每个步骤的支点。这意味着虽然你在技术上可以选择与确定性情况相同的枢轴,但这是非常不可能的(概率大约为2 2 - n ,这是非常低的)这将发生并触发最坏情况的行为。你更有可能选择靠近数组中心的枢轴,当发生这种情况时,递归分支更均匀,从而更快地终止。

随机快速排序的优点是没有一个输入总能使它在时间Θ(n log n)内运行,并且运行时期望为O(n log n)。确定性快速排序算法通常具有以下缺点:(1)它们在最坏情况下运行时间O(n log n),但具有高常数因子,或(2)它们在最坏情况下运行时间O(n 2 )触发这种情况的输入类型是确定性的。