为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

算法设计与分析C 语言描述(陈慧南版)课后答案

2019-01-24 20页 doc 206KB 103阅读

用户头像

is_180829

暂无简介

举报
算法设计与分析C 语言描述(陈慧南版)课后答案第一章1-3.最大公约数为1。快1414倍。主要考虑循环次数,程序1-2的while循环体做了10次,程序1-3的while循环体做了14141次(14142-2循环)若考虑其他语句,则没有这么多,可能就601倍。第二章2-8.(1)画线语句的执行次数为。。划线语句的执行次数应该理解为一格整体。(2)画线语句的执行次数为。。(3)画线语句的执行次数为。。(4)当n为奇数时画线语句的执行次数为,当n为偶数时画线语句的执行次数为。。2-10.(1)当时,,所以,可选,。对于,,所以,。(2)当时,,所以,可选,。对于,,所以,。(...
算法设计与分析C 语言描述(陈慧南版)课后答案
第一章1-3.最大公约数为1。快1414倍。主要考虑循环次数,程序1-2的while循环体做了10次,程序1-3的while循环体做了14141次(14142-2循环)若考虑其他语句,则没有这么多,可能就601倍。第二章2-8.(1)画线语句的执行次数为。。划线语句的执行次数应该理解为一格整体。(2)画线语句的执行次数为。。(3)画线语句的执行次数为。。(4)当n为奇数时画线语句的执行次数为,当n为偶数时画线语句的执行次数为。。2-10.(1)当时,,所以,可选,。对于,,所以,。(2)当时,,所以,可选,。对于,,所以,。(3)由(1)、(2)可知,取,,,当时,有,所以。2-11.(1)当时,,所以,。可选,。对于,,即。注意:是f(n)和g(n)的关系。(2)当时,,所以,。可选,。对于,,即。(3)因为,。当时,,。所以,可选,,对于,,即。第二章2-17.证明:设,则。当时,。所以,。第五章5-4.SolutionTypeDandC1(intleft,intright){      while(!Small(left,right)&&left<right){intm=Divide(left,right);if(x<P(m) right=m-1;elseif(x>P[m]) left=m+1;elsereturnS(P)}}5-7.template<classT>intSortableList<T>::BSearch(constT&x,intleft,intright)const{  if(left<=right){intm=(right+left)/3;if(x<l[m])returnBSearch(x,left,m-1);elseif(x>l[m])returnBSearch(x,m+1,right);elsereturnm;}return-1;}第五章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+1>2时,程序执行下面的语句:intk=(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有序。经过三次递归,最终使序列有序。所以,这一排序算法是正确的。(2)最坏情况发生在序列按递减次序排列。,,。设,则。冒泡排序最坏时间复杂度为,队排序最坏时间复杂度为,快速排序最坏时间复杂度为。所以,该算法不如冒泡排序,堆排序,快速排序。13.template<classT>select(T&x,intk){if(m>n)swap(m,n);if(m+n<k||k<=0){cout<<"OutOfBounds";returnfalse;}int*p=newtemp[k];intmid,left=0,right=n-1,cnt=0,j=0,r=0;for(inti=0;i<m;i++){while(k>0){do{mid=(left+right)/2;if(a[mid]<b[i])left=mid;elseif(a[mid]>b[i])right=mid;else{cnt=mid;break;}}while(left<right-1)if(a[left]<b[i])cnt=left;elsecnt=left-1;if(k>cnt){if(cnt>0){for(j=0;j<cnt;j++){temp[j]=a[r];r++;}left=cnt;k-=cnt;}else{temp[j]=b[i];left=0;k--;}}else{for(j=0;j<k;j++){temp[j]=a[r];r++;}left=cnt;k-=cnt;returntemp[k-1];}}}}第六章1.由题可得:,所以,最优解为,最大收益为。8.第六章6-9.普里姆算法。因为图G是一个无向连通图。所以n-1<=m<=n(n-1)/2;O(n)<=m<=O(n2);克鲁斯卡尔对边数较少的带权图有较高的效率,而,此图边数较多,接近完全图,故选用普里姆算法。6-10.T仍是新图的最小代价生成树。证明:假设T不是新图的最小代价生成树,T’是新图的最小代价生成树,那么cost(T’)<cost(T)。有cost(T’)-c(n-1)<cost(t)-c(n-1),即在原图中存在一颗生成树,其代价小于T的代价,这与题设中T是原图的最小代价生成树矛盾。所以假设不成立。证毕。第七章1.Bcost(1,0)=0;Bcost(2,1)=c(1,1)+Bcost(1.0)=5Bcost(2,2)=c(1,2)+Bcost(1,0)=2Bcost(3,3)=min{c(2,3)+Bcost(2,2),c(1,3)+Bcost(2,1)}=min{6+2,3+5}=8Bcost(3,4)=c(2,4)+Bcost(2,2)=5+2=7Bcost(3,5)=min{c(1,5)+Bcost(2,1),c(2,5)+Bcost(2,2)}=min{3+5,8+2}=8Bcost(4,6)=min{c(3,6)+Bcost(3,3),c(4,6)+Bcost(3,4),c(5,6)+Bcost(3,5)}=min{1+8,6+7,6+8}=9Bcost(4,7)=min{c(3,7)+Bcost(3,3),c(4,7)+Bcost(3,4),c(5,7)+Bcost(3,5)}=min{4+8,2+7,6+8}=9Bcost(5,8)=min{c(6,8)+Bcost(4,6),c(7,8)+Bcost(4,7)}=min{7+9,3+9}=122.向后递推的计算过程如上题所示向前递推过程如下:cost(5,8)=0cost(4,6)=7,cost(4,7)=3cost(3,3)=min{1+cost(4,6),4+cost(4,7)}=7,cost(3,4)=min{6+cost(4,6),2+cost(4,7)}=5cost(3,5)=min{6+cost(4,6),2+cost(4,7)}=5cost(2,1)=min{3+cost(3,3),3+cost(3,5)}=8cost(2,2)=min{6+cost(3,3),8+cost(3,5),5+cost(3,4)}=10cost(1,0)=min{5+cost(2,1),2+cost(2,2)}=12所以,d(4,6)=d(4,7)=8,d(3,3)=d(3,4)=d(3,5)=7,d(2,1)=5,d(2,2)=4,d(1,0)=2从s到t的最短路径为(0,d(1,0)=2,d(2,2)=4,d(3,4)=7,d(4,7)=8),路径长为12。第七章9.charA[8]={‘0’,’x’,’z’,’y’,’z’,’z’,’y’,’x’}B[8]={‘0’,’z’,’x’,’y’,’y’,’z’,’x’,’z’}(a)c[i][j]           (b)s[i][j]所以,最长公共字串为(x,y,z,z)。第七章11.voidLCS::CLCS(inti,intj){if(i==0||j==0) return;if(c[i][j]==c[i-1][j-1]+1){CLCS(i-1,j-1);Cout<<a[i];}elseif(c[i-1][j]>=c[i][j-1]) CLCS(i-1,j);elseCLCS(i,j-1);}12.intLCS::LCSLength(){for(inti=1;i<=m;i++) c[i][0]=0;for(i=1;i<=n;i++) c[0][i]=0;for(i=1;i<=m;i++)
/
本文档为【算法设计与分析C 语言描述(陈慧南版)课后答案】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索