ImageVerifierCode 换一换
格式:DOCX , 页数:51 ,大小:871.27KB ,
资源ID:16630501      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16630501.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法设计与分析+习题参考答案Word文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法设计与分析+习题参考答案Word文档格式.docx

1、 return x1,x2 else if D=0 return b/(2*a) else return “no real roots”else /a=0 if b0 return c/b else /a=b=0 if c=0 return “no real numbers”5. 描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答: a.将十进制整数转换为二进制整数的算法 输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Ki(i=0,1,2.),商赋给n第二步:如果n=0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪

2、代码 算法 DectoBin(n)/将十进制整数n转换为二进制整数的算法/输入:正整数n/输出:该正整数相应的二进制数,该数存放于数组Bin1.n中i=1while n!=0 do Bini=n%2;n=(int)n/2;i+;while i!=0 doprint Bini;i-;9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.(算法略)对这个算法做尽可能多的改进.算法 MinDistance(A0.n-1)数组A0.n-1the smallest distance d between two of its elements习题1.3 1.考虑这样一个排序算法,该算法对于待排序

3、的数组中的每一个元素,计算比它小的元素个数,然后利用这个信息,将各个元素放到有序数组的相应位置上去.a.应用该算法对列表”60,35,81,98,14,47”排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表”60,35,81,98,14,47”排序的过程如下所示:b.该算法不稳定.比如对列表”2,2*”排序c.该算法不在位.额外空间for S and Count4.(古老的七桥问题)习题1.41.请分别描述一下应该如何实现下列对数组的操作,使得操作时间不依赖数组的长度.a.删除数组的第i个元素(1=i0时,(g(n)= (g(n)a. 这个断言是正确的。它指出如果t(n)的增长率

4、小于或等于g(n)的增长率,那么 g(n)的增长率大于或等于t(n)的增长率 由 t(n)cg(n) for all nn0, where c 则: for all nn0b. 这个断言是正确的。只需证明。设f(n)(g(n),则有: for all n=n0, c=n0, c1=c即:f(n)(g(n)又设f(n)(g(n),则有:=n0,c=n0,c1=c/f(n)(g(n)8证明本节定理对于下列符号也成立:a.符号b.符号证明:a。we need to proof that if t1(n)(g1(n) and t2(n)(g2(n), then t1(n)+ t2(n)(maxg1(n

5、), g2(n)。由 t1(n)(g1(n), t1(n)c1g1(n) for all n=n1, where c1由 t2(n)(g2(n), T2(n)c2g2(n) for all n=n2, where c2那么,取c=minc1,c2,当n=maxn1,n2时: t1(n)+ t2(n)c1g1(n)+ c2g2(n) c g1(n)+c g2(n)cg1(n)+ g2(n) cmax g1(n), g2(n)所以以命题成立。b. t1(n)+t2(n) (由大的定义知,必须确定常数c1、c2和n0,使得对于所有n=n0,有: 由t1(n)(g1(n)知,存在非负整数a1,a2和n

6、1使: a1*g1(n)=t1(n)=a2*g1(n)-(1)由t2(n)(g2(n)知,存在非负整数b1,b2和n2使: b1*g2(n)=t2(n)=b2*g2(n)-(2) (1)+(2): a1*g1(n)+ b1*g2(n)=t1(n)+t2(n) = a2*g1(n)+ b2*g2(n)令c1=min(a1,b1),c2=max(a2,b2),则 C1*(g1+g2)= t1(n)+t2(n) =c2(g1+g2)-(3)不失一般性假设max(g1(n),g2(n)=g1(n). 显然,g1(n)+g2(n)2g1(n),即g1+g20,g1(n)+g2(n)g1(n),即g1+g

7、2max(g1,g2)。则(3)式转换为: C1*max(g1,g2) =n0时上述不等式成立。证毕。习题2.41.解下列递推关系 (做a,b)当n1时a.解:b.2.对于计算n!的递归算法F(n),建立其递归调用次数的递推关系并求解。3.考虑下列递归算法,该算法用来计算前n个立方的和:S(n)=13+23+n3。算法S(n) /输入:正整数n 前n个立方的和if n=1 return 1else return S(n-1)+n*n*na. 建立该算法的基本操作次数的递推关系并求解b. 如果将这个算法和直截了当的非递归算法比,你做何评价?7. a. 请基于公式2n=2n-1+2n-1,设计一个

8、递归算法。当n是任意非负整数的时候,该算法能够计算2n的值。 b. 建立该算法所做的加法运算次数的递推关系并求解 c. 为该算法构造一棵递归调用树,然后计算它所做的递归调用次数。 d. 对于该问题的求解来说,这是一个好的算法吗?a.算法power(n)/基于公式2n=2n-1+2n-1,计算2n非负整数n 2n的值If n=0 return 1Else return power(n-1)+ power(n-1)c.8.考虑下面的算法 算法 Min1(A0.n-1) /输入:包含n个实数的数组A0.n-1 If n=1 return A0 Else tempMin1(A0.n-2) If tem

9、pAn-1 return temp Else return An-1a.该算法计算的是什么?b.建立该算法所做的基本操作次数的递推关系并求解a.计算的给定数组的最小值for all n1n=19.考虑用于解决第8题问题的另一个算法,该算法递归地将数组分成两半.我们将它称为Min2(A0.n-1)算法 Min(Ar.l) If l=r return Al Else temp1Min2(Al.(l+r)/2) Temp2Min2(Al.(l+r)/2+1.r) If temp1temp2 return temp1 Else return temp2a.建立该算法所做的的操作次数的递推关系并求解b.

10、算法Min1和Min2哪个更快?有其他更好的算法吗?习题2.6 1.考虑下面的排序算法,其中插入了一个计数器来对关键比较次数进行计数.算法SortAnalysis(A0.n-1)/input:包含n个可排序元素的一个数组A0.n-1/output:所做的关键比较的总次数count0for i1 to n-1 do vAi ji-1 while j0 and Ajv do countcount+1 Aj+1Aj jj+1 Aj+1vreturn count比较计数器是否插在了正确的位置?如果不对,请改正.应改为: if j=0 count=count+1习题3.14. a.设计一个蛮力算法,对于

11、给定的x0,计算下面多项式的值:P(x)=anxn+an-1xn-1+a1x+a0并确定该算法的最差效率类型.b.如果你设计的算法属于(n2),请你为该算法设计一个线性的算法.C.对于该问题来说,能不能设计一个比线性效率还要好的算法呢?a.Algorithms BruteForcePolynomialEvaluation(P0.n,x)/由高幂到低幂用蛮力法计算多项式p在给定点x的值P0.n是多项式按低幂到高幂的常系数,以及定值x 多项式p在给定点x的值p=0.0for i=n to 0 do power=1 for j=1 to i do power=power*x p=p+Pi*power

12、return p算法效率分析:基本操作:两个数相乘,且M(n)仅依赖于多项式的阶nb.tha above algorithms is very inefficient, because we recompute powers of x again and again as if there were no relationship among them.In fact ,we can move from the lowest term to the highest and compute xi by using xi-1.Algorithms BetterBruteForcePolynomia

13、lEvaluation(P0.n,x) P=P0 for i1 to n do powerpower*x pp+Pi*power return p基本操作乘法运算总次数M(n):c.不行.因为计算任意一个多项式在任意点x的值,都必须处理它的n+1 个系数.例如: (x=1,p(x)=an+an-1+.+a1+a0,至少要做n次加法运算) 5.应用选择排序对序列example按照字母顺序排序.6.选择排序是稳定的吗?(不稳定)7.用链表实现选择排序的话,能不能获得和数组版相同的(n2)效率?Yes.Both operationfinding the smallest element and sw

14、apping it can be done as efficiently with the linked list as with an array. 9.a.请证明,如果对列表比较一遍之后没有交换元素的位置,那么这个表已经排好序了,算法可以停止了.b.结合所做的改进,为冒泡排序写一段伪代码.c.请证明改进的算法最差效率也是平方级的.Hints:a.第i趟冒泡可以表示为:如果没有发生交换位置,那么:b.Algorithms BetterBubblesort(A0.n-1)/用改进的冒泡算法对数组A0.n-1排序升序排列的数组A0.n-1countn-1 /进行比较的相邻元素对的数目flagtr

15、ue /交换标志while flag do flagfalse for i=0 to count-1 do if Ai+1Ai swap(Ai,Ai+1) flagtrue countcount-1c最差情况是数组是严格递减的,那么此时改进的冒泡排序会蜕化为原来的冒泡排序.10.冒泡排序是稳定的吗?(稳定)习题3.21.对限位器版的顺序查找算法的比较次数:a.在最差情况下b.在平均情况下.假设成功查找的概率是p(0=p=1)a.Cworst(n)=n+1b.在成功查找下,对于任意的I,第一次匹配发生在第i个位置的可能性是p/n,比较次数是i.在查找不成功时,比较次数是n+1,可能性是1-p.6

16、.给出一个长度为n的文本和长度为m的模式构成的实例,它是蛮力字符串匹配算法的一个最差输入.并指出,对于这样的输入需要做多少次字符比较运算.文本:由n个0组成的文本模式:前m-1个是0,最后一个字符是1比较次数: m(n-m+1)7.为蛮力字符匹配算法写一个伪代码,对于给定的模式,它能够返回给定的文本中所有匹配子串的数量.Algorithms BFStringmatch(T0.n-1,P0.m-1)/蛮力字符匹配数组T0.n-1长度为n的文本,数组P0.m-1长度为m的模式在文本中匹配成功的子串数量for i0 to n-m do j0 while j C(1)=0 设n=2k,C(2k)=2C

17、(2k-1)+1 =22 C(2k-2)+1+1=22C(2k-2)+2+1 =222C(2k-3)+1+2+1=23C(2k-3)+ 22+2+1 =. =2iC(2k-i)+ 2i-1+2 i-2 +.+2+1 =2kC(2k-k)+ 2k-1+2 k-2 +.+2+1=2k1=n-1可以证明C(n)=n-1对所有n1的情况都成立(n是偶数或奇数)d.比较的次数相同,但蛮力算法不用递归调用。2、a.为一个分治算法编写伪代码,该算法同时求出一个n元数组的最大元素和最小元素的值。b.请拿该算法与解同样问题的蛮力算法做一个比较。c.请拿该算法与解同样问题的蛮力算法做一个比较。 a.同时求出最大值

18、和最小值,只需要将原数组一分为二,再使用相同的方法找出这两个部分中的最大值和最小值,然后经过比较就可以得到整个问题的最大值和最小值。算法 MaxMin(Al.r,Max,Min) /该算法利用分治技术得到数组A中的最大值和最小值数值数组Al.r最大值Max和最小值Minif(r=l) MaxAl;MinAl; /只有一个元素时elseif rl=1 /有两个元素时if AlArMaxAr; MinAl elseMaxAl; MinAr else /rlMaxMin(Al,(l+r)/2,Max1,Min1); /递归解决前一部分MaxMin(A(l+r/)2.r,Max2,Min2); /递归

19、解决后一部分if Max1Max2 Max= Max2 /从两部分的两个最大值中选择大值if Min22C(1)=0, C(2)=1C(n)=C(2k)=2C(2k-1)+2=22C(2k-2)+2+2=22C(2k-2)+22+2=222C(2k-3)+2+22+2=23C(2k-3)+23+22+2.=2k-1C(2)+2k-1+2k-2+.+2 /C(2)=1=2k-1+2k-1+2k-2+.+2 /后面部分为等比数列求和=2k-1+2k-2 /2(k-1)=n/2,2k=n=n/2+n-2=3n/22b.蛮力法的算法如下:算法 simpleMaxMin(Al.r)/用蛮力法得到数组A的最大值和最小值Max=Min=Al;for i=l+1 to r do if AiMax MaxAi;else if Ai1 (n=2k)Cbest(1)=0c.键值比较次数M(n)M(n)=2M(n)+2n for nM(1)=0习题4.21.应用快速排序对序列E,X,A,M,P,L,E按字母顺序排序4.请举一个n个元素数组的例子,使得我们有必须对它使用本节提到的”限

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1