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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

算法设计技巧与分析习题参考答案Word格式.docx

1、数组的所有元素之和Ai i=1nSUM(low, high)1.if high = low then2. return Alow3.else4. mid(low+high)/25. s1SUM(low,mid)6. s2SUM(mid+1, high)7. return s1+s28.end if工作空间:mid(logn), s1&s2(1)(后序遍历树,不断释放空间,故为常数(1),总的工作空间为(logn).6.6 用分治法求元素x在数组A中出现的频次。freq(Alow, high, x)1.if high=low then2. if Alow=x then3. return 14.

2、else5. return 06. end if7.else8. mid (low+high)/29. f1 freq(Alow, mid)10. f2 freq(Amid+1, high)11. return f1+f212.end if复杂度:T(n)=T(n/2)+ T(n/2)2T(n/2) (设2kn2k+1)=2kT(n/2k) =2kT(1) = n6.16修改后的MERGESORT算法最大比较次数最小比较次数令n/2k=m2,展开可知:T(n)= 2kT(n/2k) + kn - (2k-1)= n/mm(m-1)/2 + nlog(n/m)- n/m+1= n(m-1)/2

3、+ nlog(n/m) -n/m+1 若T(n)=(nlogn), 其中表达式有nm, nlogn, nlogm, n/m等.有n/m nlogm nm 且须有nm=O(nlogn), i.e., nm cnlogn,则须有mclogn. 可令c=1,则mlogn. 另一方面,C(n) = 2kC(n/2k)+kn/2 = n/m(m-1) + (n/2)log(n/m)= (nlogn)6.35 split(Alow,.high)1. xAlow /备份为x2. while (lowhigh)3. while (low0) -high;4. Alow Ahigh5. while (low A

4、low0) +low;6. Ahigh Alow7.8.Alow x /这时, low=high7.3 动态规划法计算二项式系数,并分析其时间复杂度。1. for i1 to n2. Ci,0 1; Ci, i 13. end for4. for i2 to n5. for j1 to i-1 / min(k, i-1) /例如计算C6,26. Ci,j Ci-1,j-1 + Ci-1,j7. end8. end for9. return Cn.k复杂度分析: 或8.5硬币的面值为1, 2, 4, 8, ., 2k, 要兑换的值n2k+1,用贪心算法解这个问题,要求算法复杂度为O(logn)k

5、+1个不同硬币的面值,其中包括单位币(面值为1)若要兑换的值n,给出各个面值硬币的数目num0k1.将k+1个不同的面值按递增顺序排列,记为Value0.k2.num0k03.for j k downto 04. numj n/Valuej 5. nn - numjValuej6.end for7.return num0k8.16 修改Dijkstra算法,使它找出最短路径和它的长度。1. X=1; YV-1; 10; pre10;2. for y2 to n3. if y 相邻于1 then ylength1,y 4. else y 5. end if6. end for7. for j1

6、to n-18. 令yY, 使得y为最小的 9. XXy 10. YY - y 11. for 每条边(y,w) 12. if wY and y+lengthy,w w then13. w y+lengthy,w 14. prew y14. end if15. end for16.end for输出最短路径void PrintPath(int node) /输出格式为1node if (node=1) print(“1”); else PrintPath( prenode ); /先递归再输出 print(“”, node); 13.2 考虑3着色问题,给出一个算法判断一张图G=(V,E)的3

7、着色向量c1n是否是合法的。图G=(V,E),向量c1nflag=true 若合法着色;否则flag=false2. for i1 to n3. if ci04. for (i,j)E5. if cj0 and cj=ci6. return false;7. end if9. end if10. end for11. return true13.3 考虑3着色问题,给出一个算法判断一张图G=(V,E)的3着色向量c1k是否是部分的。图G=(V,E),向量c1ktrue 若着色是部分的;否则输出false2. for i1 to k5. if jk and cj0 and cj=ci13.10

8、设计一个回溯算法来生成数字1,2,n的所有排列。数字1,2,n数字1,2,n的所有排列c1,n向量1. for k 1 to n2. ck 05. k 1 6.while k17. while ckn-1 8. ck ck+19. if c为合法的then output c (and goto 12)10. else if c为部分解 then k k+111. end while 12. ck 0 13. k k-1 14. end while 14.7 对二分查找算法进行随机化,即每次迭代时,随机选择剩下的位置代替搜索空间减半,假设在low与high之间每个位置被选中的概率都是相同的。比较

9、这种随机化算法与二分查找的表现。n个元素的升序数组A1n和元素x若x=Aj, 1jn, 则输出j, 否则输出01. low1; high n; j02. while(low high) and (j=0)3. mid ( low+high)/2 / midrandom(low,high)4. if x=Amid then j mid 5. else if xm2.算法设计如下:1. k12. while km3. rrandom(1,n)4. ik-15. while i1 and rAi6. ii-17. end while8. if i=09. Akr10. kk+111. end if1

10、2. end while复杂度分析如下:每次随机生成一个新元素r,要查找r是否已经出现在已经选定的数字中。设生成第i个有效随机数时,平均要产生E(Xi)次, 则复杂度容易证明,且有因为m2n, 则,于是14.16 另解:算法设计思路如下: 生成一个1,n之间的随机数r,互换Xn和Xr;再生成一个1,n-1之间的随机数r,互换Xn-1和Xr;再生成一个1,n-m+1之间的随机数r,互换Xn-m+1和Xr;返回Xn-m+1n,即为随机选择的m个数。好处:不需要重复产生随机数;不需要额外空间。1.for in downto n-m+12. r random(1,i)3. XrXi4.end for5.return Xn-m+1n时间复杂度:(m). 空间复杂度:(1).

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

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