(三数取中划分)一种改进RANDOMIZED-QUICKSORT的方法是在划分时,要从子数组中更细致地选择作为主元的元素(而不是简单地随机选择)。常用的做法是三数取中法:从子数组中随机选出三个元素,取其中位数作为主元(见练习7.4-6)。对于这个问题的分析,我们不妨假设数组
的元素是互异的且有
。我们用
来表示已排好序的数组。用三数取中法选择主元
,并定义
。
a. 对于
,请给出以
和
表示的
的准确表达式(注意
)。
b. 与平凡实现相比,在这种实现中,选择
(即
的中位数)的值作为主元的概率增加了多少?假设
,请给出这一概率的极限值。
c. 如果我们定义一个“好”划分意味着主元选择
,其中
。与平凡实现相比,这种实现中得到一个好划分的概率增加了多少?(提示:用积分来近似累加和。)
d. 证明:对快速排序而言,三数取中法只影响其时间复杂度
的常数项因子。
解
a.
是一个已排好序的数组,选择其中一个元素
作为主元。该元素将
分为
部分:
、
以及
本身。如果采用三数取中法,要选中
作为主元,只有一种情况:在
中任意选取一个元素,在
中任意选取一个元素,再选取
本身。这种情况一共有
种选法。而从
中选取3个元素一共有
种选法。因此,选中
作为主元的概率为
b.
在PARTITION的平凡实现中,任意一个元素都等可能地被选为主元,因此选择中位数作为主元的概率为
。
采用三数取中法,分两种情况讨论:
(1)
为偶数
(2)
为奇数
从以上分析可以看出,当
趋近于
时,
趋近于
。因此,在
足够大时,三数取中法选取中位数作为主元的概率大约是平凡实现的
倍。
c.
在PARTITION的平凡实现中,产生一个好的划分的概率为
而在三数取中法中,产生一个好的划分的概率为
假如
足够大,三数取中法产生好的划分的概率近似等于
。
因此,三数取中法得到一个好的划分的概率大约是平凡实现的
倍。
算法导论 — 思考题7-5 三数取中划分
猜你喜欢
转载自blog.csdn.net/yangtzhou/article/details/88776542
今日推荐
周排行