有人可以澄清快速排序和随机快速排序之间的区别吗?
Can someone clarify the difference between Quicksort and Randomized Quicksort?
如果我 select 随机主元与仅 select 无序 set/list 中的第一个主元有何不同?
如果集合是无序的,select集合中的第一个值本身不是随机的吗?所以本质上,我试图理解 how/if 随机化承诺更好的最坏情况运行时间。
我认为您可能混淆了任意和随机的概念。选择数组的第一个元素是 任意 - 你可以选择任何你喜欢的元素,它同样有效 - 但它不是 random. 随机选择是无法提前预测的选择。 任意选择是可以的
假设您正在对排序序列 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 进行快速排序。
更一般地,在k步之后,你将选择数字k作为主元,将数字k+1,k+2,...,n放在右边,然后递归快速排序。
这里完成的总工作量最终为 Θ(n2),因为在第一次通过时(分区 2、3、...、n 大约 1)你必须查看 n-1 个元素,在第二遍(分区 3、4、5,...,n 大约 2)时,您必须查看 n-2 个元素,等等。这意味着完成的工作是(n-1)+(n-2)+ ... +1 = Θ(n2),效率很低!
现在,将其与随机快速排序进行对比。在随机快速排序中,您真正选择了一个随机元素作为每一步的基准。这意味着虽然你在技术上 可以 选择与确定性情况相同的枢轴,但这不太可能(概率大约是 22 - n ,这是非常低的)这将发生并触发最坏情况的行为。您更有可能选择更靠近数组中心的枢轴,当发生这种情况时,递归分支会更均匀,因此终止得更快。
随机快速排序的优点是没有一个输入总是会导致它在时间 Θ(n log n) 内 运行 并且 运行 时间预计为 O(n记录 n)。确定性快速排序算法通常有以下缺点:(1) 它们 运行 在最坏情况下时间 O(n log n),但具有高常数因子,或者 (2) 它们 运行 在最坏情况下案例时间 O(n2) 并且触发该案例的输入类型是确定性的。
如果我 select 随机主元与仅 select 无序 set/list 中的第一个主元有何不同?
如果集合是无序的,select集合中的第一个值本身不是随机的吗?所以本质上,我试图理解 how/if 随机化承诺更好的最坏情况运行时间。
我认为您可能混淆了任意和随机的概念。选择数组的第一个元素是 任意 - 你可以选择任何你喜欢的元素,它同样有效 - 但它不是 random. 随机选择是无法提前预测的选择。 任意选择是可以的
假设您正在对排序序列 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 进行快速排序。
更一般地,在k步之后,你将选择数字k作为主元,将数字k+1,k+2,...,n放在右边,然后递归快速排序。
这里完成的总工作量最终为 Θ(n2),因为在第一次通过时(分区 2、3、...、n 大约 1)你必须查看 n-1 个元素,在第二遍(分区 3、4、5,...,n 大约 2)时,您必须查看 n-2 个元素,等等。这意味着完成的工作是(n-1)+(n-2)+ ... +1 = Θ(n2),效率很低!
现在,将其与随机快速排序进行对比。在随机快速排序中,您真正选择了一个随机元素作为每一步的基准。这意味着虽然你在技术上 可以 选择与确定性情况相同的枢轴,但这不太可能(概率大约是 22 - n ,这是非常低的)这将发生并触发最坏情况的行为。您更有可能选择更靠近数组中心的枢轴,当发生这种情况时,递归分支会更均匀,因此终止得更快。
随机快速排序的优点是没有一个输入总是会导致它在时间 Θ(n log n) 内 运行 并且 运行 时间预计为 O(n记录 n)。确定性快速排序算法通常有以下缺点:(1) 它们 运行 在最坏情况下时间 O(n log n),但具有高常数因子,或者 (2) 它们 运行 在最坏情况下案例时间 O(n2) 并且触发该案例的输入类型是确定性的。