- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析程设计-实验指导书
算法设计与分析课程设计
实验指导书
上海第二工业大学
计算机与信息学院软件工程系
一、运动员比赛日程表
设有n=2k个运动员要进行网球比赛。设计一个满足以下要求的比赛日程表:
每个选手必须与其它n-1个选手各赛一次
每个选手一天只能赛一次
循环赛一共进行n-1天
运用分治策略,该问题的递归算法描述如下,根据算法编制程序并上机通过。
输入:运动员人数n(假定n恰好为2的i次方)
输出:比赛日程表A[1..n,1..n]
1. for i←1 to n //设置运动员编号
2. A[i,1]←i
3. end for
4. Calendar(0,n) //位移为0,运动员人数为n。
过程 Calendar(v, k) //v表示位移(v=起始行-1),k表示运动员人数。
1. if k=2 then //运动员人数为2个
2. A[v+2,2]←A[v+1,1] //处理右下角
3. A[v+1,2]←A[v+2,1] //处理右上角
4. else
5. Calendar(v,k/2) //假设已制定了v+1至v+k/2运动员循环赛日程表
6. Calendar(v+k/2,k/2) //假设已制定了v+k/2+1至v+k运动员循环赛日程表
7. comment:将2个k/2人组的解,组合成1个k人组的解。
8. for i←1 to k/2
9. for j←1 to k/2
10. A[v+i+k/2,j+k/2]←A[v+i,j] //沿对角线处理右下角
11. end for
12. end for
13. for i←k/2+1 to k
14. for j←1 to k/2
15. A[v+i-k/2,j+k/2]←A[v+i,j] //沿对角线处理右上角
16. end for
17. end for
18. end if
2、编制该问题的非递归算法,上机通过。
将如上文件保存在命名为“学号+姓名+实验一”的文件夹中并上传到指定的服务器。
二、最长公共子序列
运用动态规划法最长公共子序列问题,给出最优值并输出最优解。
提示:最长公共子序列的结构
最长公共子序列的结构有如下表示:
设序列X=x1, x2, …, xm和Y=y1, y2, …, yn的一个最长公共子序列Z=z1, z2, …, zk,则:
若xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的最长公共子序列;
若xm≠yn且zk≠xm ,则Z是Xm-1和Y的最长公共子序列;
若xm≠yn且zk≠yn ,则Z是X和Yn-1的最长公共子序列。
其中Xm-1=x1, x2, …, xm-1,Yn-1=y1, y2, …, yn-1,Zk-1=z1, z2, …, zk-1。
子问题的递归结构
由最长公共子序列问题的最优子结构性质可知,要找出X=x1, x2, …, xm和Y=y1, y2, …, yn的最长公共子序列,可按以下方式递归地进行:当xm=yn时,找出Xm-1和Yn-1的最长公共子序列,然后在其尾部加上xm(=yn)即可得X和Y的一个最长公共子序列。当xm≠yn时,必须解两个子问题,即找出Xm-1和Y的一个最长公共子序列及X和Yn-1的一个最长公共子序列。这两个公共子序列中较长者即为X和Y的一个最长公共子序列。
?由此递归结构容易看到最长公共子序列问题具有子问题重叠性质。例如,在计算X和Y的最长公共子序列时,可能要计算出X和Yn-1及Xm-1和Y的最长公共子序列。而这两个子问题都包含一个公共子问题,即计算Xm-1和Yn-1的最长公共子序列。
用c[i,j]记录序列Xi和Yj的最长公共子序列的长度。其中Xi=x1, x2, …, xi,Yj=y1, y2, …, yj。当i=0或j=0时,空序列是Xi和Yj的最长公共子序列,故c[i,j]=0。其他情况下,由定理可建立递归关系如下:
计算最优值
直接利用上节节末的递归式,我们将很容易就能写出一个计算c[i,j]的递归算法,但其计算时间是随输入长度指数增长的。由于在所考虑的子问题空间中,总共只有θ(m*n)个不同的子问题,因此,用动态规划算法自底向上地计算最优值能提高算法的效率。
?计算最长公共子序列长度的动态规划算法LCS_LENGTH(X,Y)以序列X=x1, x2, …, xm和Y=y1, y2,
您可能关注的文档
最近下载
- 河南省建设工程安全生产标准化图集.docx VIP
- 别克英朗GT说明书.docx VIP
- 洪水计算(推理公式法).xls VIP
- 初中音乐 西南师大课标版 七年级上册 走进歌乐山 《走进歌乐山》 课件.ppt VIP
- (高清版)DBJ∕T 13-278-2025 《福建省电动汽车充电基础设施建设技术标准》.pdf VIP
- 带式输送机头尾部基础荷载计算书.xls VIP
- 建筑《工程质量》首件验收制度.docx VIP
- (高清版)DB21∕T 4071-2024 沥青路面再生集料应用技术规程.pdf VIP
- 中国冰沙机行业市场现状分析及竞争格局与投资发展研究报告2024-2029版.docx
- Word操作培训ppt课件.pptx VIP
文档评论(0)