【笔记】
SELECT最坏运行情况是线性的。
【练习】
9.3-1 在算法SELECT中,输入元素被分为每组5个元素。如果它们被分为每组7个元素,该算法会仍然以线性时间工作吗?证明如果分成每组3个元素,SELECT无法在线性时间内运行。
考虑每组分为k个元素。则大于或小于中位数的中位数的数至少为
因此在最坏情况下SELECT将处理最多n-(n/4-k)=3n/4+k个元素。
递归式
用代换法解决,假设算法是线性的,猜测有T(n)<=cn。
其中最后只在k>=4时成立。
因此该算法对4个及4个以上的分组是线性的。当k=3时该算法的复杂度是Ω(nlgn)。
9.3-2 分析SELECT,并证明如果n>=140,则至少有n/4个元素大于中位数的中位数x,并且至少有n/4个元素小于x。
9.3-3 假定元素的值不同,说明如何才能使快速排序在最坏情况下以O(nlgn)时间运行。
在快速排序中,使用完美分区即可在最坏情况下有O(nlgn)复杂度。每次以线性时间选出区间的中位数即可。