考虑RANDOMIZED-QUICKSORT操作在n个互不相同的输入数据的序列上。证明:对于任何常数k>0,n!种输入排列除了其中种之外,运行时间都为。
Consider RANDOMIZED-QUICKSORT operating on a sequence of n distinct input numbers. Prove that for any constant k > 0, all but of the n! input permutations yield an running time.
通过与英文原版对比,不难发现中文翻译有一定问题,题中应为占n!的比例而非数量。
考虑令e为数组中的任一元素,为第次划分后,包含元素e的子数组大小,其中 ,
引理:
证明:这个还是比较好理解的,考虑仅当划分选取的主元是数组中较小或较大的部分时(两部分概率均为1/t),才能实现,因此引理成立
接下来对数组中的元素e,对包含e的数组大小进行分析。若则称第次划分是成功的。因,在p次成功后,包含元素e的数组大小不大于。不难看出,时,数组规模减小到1,排序完成(实际上时即满足排序)。
结合引理我们知道,成功的概率至少为,不成功的概率至多为。
考虑二项分布,不妨先假定次数为a,不成功次数随机变量为X,根据书中练习5-6可知:
令成功次数随机变量为Y,上式等价于:
代入之前的,令,得到:
此即经过a次划分后数组完成排序的概率,令 ,不等式右边指数部分化为:
该项在s趋近于+∞时趋近于-无穷,由此可知可以通过在 ,即复杂度上调节系数,得到的划分次数能够使排序完成概率以任意程度趋近于1,加上每次划分消耗,于是命题得证。
参考文献
[1] 霍红卫, 许进. 快速排序算法研究[J]. 微电子学与计算机, 2002(6): 6-9.