快速排序算法的性能取决于划分的对称性。通过修改算法partition,可以设计出采用随机选择策略的快速排序算法。在快速排序算法的每一步中,当数组还没有被划分时,可以在a[p:r]中随机选出一个元素作为划分基准,这样可以使划分基准的选择是随机的,从而可以期望划分是较对称的。 算法描述: template int RandomizedPartition ...
所谓随机主元位置,也即每次划分时的位置随机性选择A[1..n]中的某个位置k,将数组随机机划分为A[1..k-1]和A[k+1..n]两部分。 由于主元位置是随机的,也即每次主元位置的概率是相等的,数理统计中称x~B(0,1),也即0-1分布,由此主元刚好划分到k时的数学期望为: 当主元位置随机之后,时间复杂度如何求解?
首先随机化快排是为了解决出现最坏情况时 Ω(n^2)的运行时间的问题,将快速排序变成一个“稳定”的算法,随机化后,快排的期望运行时间为O(n* lg n)。 随机化快排其实做的很简单,就是在划分的时候,不是确定性的选择主元(provit),而是随机的选择主元,这要就保证了只有很小的几率下每次都出现最坏的划分情况。
7.3-1 我们为什么要分析一个随机化算法的平均情况性能,而不是其最坏情况性能呢? 随机化算法下输入较为平均,最坏情况极难出现。 7.3-2 在过程RANDOMIZED-QUICKSORT的运行过程中,最坏情况下对随机数产生器RANDOM调用了多少次?最佳情况下调用了多少次?以⊙记号形式给出你的答案。 都为⊙(n)次...
百度试题 结果1 题目快速排序算法和线性时间选择算法的随机化版本是: ( ) A. 舍伍德算法 B. 蒙特卡罗算法 C. 拉斯维加斯算法 D. 数值随机化算法 相关知识点: 试题来源: 解析 A 反馈 收藏
JS实现随机化快速排序的实例代码 算法的平均时间复杂度为O(nlogn)。但是当输⼊是已经排序的数组或⼏乎排好序的输⼊,时间复杂度却为O(n^2)。为解决这⼀问题并保证平均时间复杂度为O(nlogn)的⽅法是引⼊预处理步骤,它惟⼀的⽬的是改变元素的顺序使之随机排序。这种预处理步骤可在O(n)时间内...
算法实践篇-快速排序-随机化版本,packagecom.sort;importjava.util.Random;publicclassRandomQuickSort{privatestaticintpartition(int[]data,intp,intr){intrandom=newRandom().nextInt(r-p)+p;inttmpR=data[random];