- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析课程设计
实验指导书
一、运动员比赛日程表
设有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, …, yn作为输入。输出两个数组c[0..m ,0
您可能关注的文档
最近下载
- 2025入团积极分子考试题库(含答案).pdf VIP
- 2024中职专业目录(新版).docx VIP
- 迪斯尼音乐厅的建筑与声学.pdf VIP
- 第6章空间力系分解.ppt VIP
- 2025年部编人教版(统编新教材)小学语文二年级上册教学计划及进度表.docx
- 2025年肺功能检查测试题及答案.doc VIP
- 2025年高考数学全国新课标Ⅱ卷试卷评析及备考策略(课件).pptx VIP
- 酒吧调研报告.pptx
- 第8课《回忆鲁迅先生》课件 (共45张ppt) 2025-2026学年统编版语文八年级上册.pptx VIP
- 2023版《思想道德与法治》(绪论-第一章)绪论 担当复兴大任 成就时代新人;第一章 领悟人生真谛 把握人生方向 第3讲 创造有意义的人生.pptx VIP
文档评论(0)