文档详情

算法设计与分析-课后习题集答案.doc

发布:2018-04-16约6.99千字共13页下载文档
文本预览下载声明
第一章 3. 最大公约数为1。快1414倍。 程序1-2的while循环体做了10次,程序1-3的while循环体做了14141次(14142-2循环) 8.(1)画线语句的执行次数为。。 (2)画线语句的执行次数为 。。 (3)画线语句的执行次数为 。。 (4)当n为奇数时画线语句的执行次数为 , 当n为偶数时画线语句的执行次数为 。。 10.(1) 当 时,,所以,可选 ,。对于,,所以,。 (2) 当 时,,所以,可选 ,。对于,,所以,。 (3) 由(1)、(2)可知,取,,,当时,有,所以。 11. (1) 当时,,所以,。可选 ,。对于,,即。 (2) 当 时,,所以 ,。可选 ,。对于 ,,即 。 (3)因为 ,。当 时,,。所以,可选 ,,对于,,即 。 第二章 2-17. 证明:设,则 。 当 时,。所以,。 第五章 5-4. SolutionType DandC1(int left,int right) { while(!Small(left,right)leftright) { int m=Divide(left,right); if(xP(m) right=m-1; else if(xP[m]) left=m+1; else return S(P) } } 5-7. template class T int SortableListT::BSearch(const Tx,int left,int right) const { if (left=right) { int m=left+(right-left+1)/3; if (xl[m]) return BSearch(x,left,m-1); else if (xl[m]) return BSearch(x,m+1,right); else return m; } return -1; } 7.m=left+(right-left+1)/3 不能用:m=(left+right)/3 ,两者不同。 受对半搜索的影响:m=(left+right)/2和m=left+(right-left+1)/2是一样的 9. 证明:因为该算法在成功搜索的情况下,关键字之间的比较次数至少为,至多为。在不成功搜索的情况下,关键字之间的比较次数至少为,至多为。所以,算法的最好、最坏情况的时间复杂度为。 假定查找表中任何一个元素的概率是相等的,为,那么, 不成功搜索的平均时间复杂度为, 成功搜索的平均时间复杂度为。 其中,是二叉判定树的内路径长度,是外路径长度,并且。 11. 步数 0 1 2 3 4 5 初始时 1 1 1 1 1 1 [1 1] 1 [1 1] ∞ 2 [1] 1 1 [1 1] ∞ 3 1 1 1 [1 1] ∞ 4 1 1 1 [1] 1 ∞ 排序结果 1 1 1 1 1 ∞ 步数 0 1 2 3 4 5 6 7 初始时 5 5 8 3 4 3 2 ∞ 1 [4 2 3 3] 5 [8 5] ∞ 2 [3 2 3] 4 5 [8 5] ∞ 3 [3 2] 3 4 5 [8 5] ∞ 4 [2] 3 3 4 5 [8 5] ∞ 5 2 3 3 4 5 [5] 8 ∞ 排序结果 2 3 3 4 5 5 8 ∞ 12.(1)证明:当或或时,程序显然正确。 当n=right-left+12时,程序执行下面的语句: int k=(right-left+1)/3; StoogeSort(left,right-k); StoogeSort(left+k,right); StoogeSort(left,right-k); ①首次递归StoogeSort(left,right-k);时,序列的前2/3的子序列有序。 ②当递归执行StoogeSort(left+k,right);时,使序列的后2/3的子序列有序,经过这两次递归排序,使原序列的后1/3的位置上是整个序列中较大的数,即序列后1/3的位置上数均大于前2/3的数,但此时,前2/3的序列并不一定是有序的。 ③再次执行StoogeSort(left,right-k);使序列的前2/3有序。 经过三次递归,最终使序列有序。 所
显示全部
相似文档