算法导论 练习12.4-5

考虑RANDOMIZED-QUICKSORT操作在n个互不相同的输入数据的序列上。证明:对于任何常数k>0,n!种输入排列除了其中O(1/n^{k})种之外,运行时间都为O(nlgn)

Consider RANDOMIZED-QUICKSORT operating on a sequence of n distinct input numbers. Prove that for any constant k > 0, all but O(1/n^{k}) of the n! input permutations yield an O(nlgn) running time.

通过与英文原版对比,不难发现中文翻译有一定问题,题中O(1/n^{k})应为占n!的比例而非数量。

 考虑令e为数组中的任一元素,n_{j}为第j次划分后,包含元素e的子数组大小,其中 j \ge1n_{0} = n

引理:Pr\{n_{j+1} \ge(t-1)n_{j}/t\} \le 2/t

证明:这个还是比较好理解的,考虑仅当划分选取的主元是数组中较小或较大的部分时(两部分概率均为1/t),n_{j+1}\ge(t-1)n_{j}/t才能实现,因此引理成立

接下来对数组中的元素e,对包含e的数组大小进行分析。若n_j\le(t-1)n_{j-1}/t则称第j次划分是成功的。因n_{0} = n,在p次成功后,包含元素e的数组大小不大于(\frac{t-1}{t})^p \cdot n。不难看出,p = log_{\frac{t-1}{t}}\frac{1}{n} = log_{\frac{t}{t-1}}n时,数组规模减小到1,排序完成(实际上p > log_{\frac{t}{t-2}} \frac{n}{2}时即满足排序)。

 结合引理我们知道,成功的概率至少为1-2/t,不成功的概率至多为2/t

考虑二项分布,不妨先假定次数为a,不成功次数随机变量为X,根据书中练习5-6可知:

Pr\{X \ge r + \frac{2a}{t}\} \le e^{-r^{2}/2a}

令成功次数随机变量为Y,上式等价于:

Pr\{Y \le \frac{t - 2}{t}a - r\} \le e^{-r^2/2a}

代入之前的p = log_{\frac{t-1}{t}}\frac{1}{n} = log_{\frac{t}{t-1}}n,令\frac{t-2}{t}a - r = log_{\frac{t}{t-1}}n,得到:

Pr\{Y \le log_{\frac{t}{t-1}}n\} \le e^{-(\frac{t-2}{t})^{2} \cdot \frac{a}{2} + \frac{t-2}{t}\cdot log_{\frac{t}{t-1}}n - (log_{\frac{t}{t-1}}n)^{2}/2a}

此即经过a次划分后数组完成排序的概率,令 a = slog_{\frac{t}{t-1}}n,不等式右边指数部分化为:

[-(\frac{t-2}{t})^{2} \cdot \frac{s}{2} + \frac{t-2}{t} - \frac{1}{2s}]\cdot log_{\frac{t}{t-1}}n

该项在s趋近于+∞时趋近于-无穷,由此可知可以通过在 O(log_{\frac{t}{t-1}}n),即O(lgn)复杂度上调节系数,得到的划分次数能够使排序完成概率以任意程度趋近于1,加上每次划分消耗O(n),于是命题得证。

参考文献

[1] 霍红卫, 许进. 快速排序算法研究[J]. 微电子学与计算机, 2002(6): 6-9.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值