题目内容
(请给出正确答案)
[主观题]
如教材62页代码2.28所示mergeSort()算法,即便在最好情况下依然需要Ω(nlogn)时间。实际上略微修改这段代码,即可使之在(子)序列业已有序时仅需线性时间,为此,mergeSort()的每个递归实例仅需增加常数的时间,且其它情况下的总体计算时间仍然保持o(nlogn)。试给出你的改进方法,并说明其原理。
答案
查看答案
第1题
第2题
第4题
第5题
第6题
对于几乎有序的向量,如教材代码2.26(60页)和代码2.27(60页)所示的起泡排序算法,都显得效率不足,比如,即便乱序元素仅限于A[0,√n)区间,最坏情况下仍需调用bubble()做Ω(√n)次调用,共做Ω(n)次交换操作和Ω(n3/2)次比较操作,因此累计运行Ω(n3/2)时间。
a)试改进原算法,使之在上述情况下仅需o(n)时间;
b)继续改进,使之在如下情况下仅需o(n)时间:乱序元素仅限于A[n-√n,n)区间;
c)综合以上改进,使之在如下情况下仅需o(n)时间:乱序元素仅限于任意的A[m,m+√n]区间。
第7题
设采用实现如教材48页代码2.21所示的二分查找binSearch()算法版本A,针对独立均匀分布于[0,2n]内的整数目标,在固定的有序向量(1,3,5,...,2n-1)中查找。
a)若将平均的成功和失败查找长度分别记作S和F,试证明:(S+1)•n=F•(n+1);
b)上述结论,是否适用于binSearch()算法的其它版本?为什么?
c)上述结论,是否适用于fibSearch()算法的各个版本?为什么?
d)若待查找的整数按照其它的随机规律分布,以上结论又应如何调整?
第8题
第9题
第10题
第11题