动态规划实验报告.doc

动态规划实验报告.doc

ID:57413694

大小:32.50 KB

页数:3页

时间:2020-08-16

动态规划实验报告.doc_第1页
动态规划实验报告.doc_第2页
动态规划实验报告.doc_第3页
资源描述:

《动态规划实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验课程:算法分析与设计实验名称:实验3动态规划算法(综合性/设计性)实验目标:1、熟悉最长公共子序列问题的算法;2、初步掌握动态规划算法;实验任务:若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时

2、,称Z是序列X和Y的公共子序列。给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 实验设备及环境:PC;C/C++的编程环境VisualC++。实验主要步骤:(1)明确实验目标和具体任务;(2)理解实验所涉及的动态规划算法;(3)编写程序并实现动态规划算法;(4)设计实验数据并运行程序、记录运行的结果;实验数据及运行结果、实验结果分析及结论:(学生填写)#include#includevoidLcsLength(char*x,cha

3、r*y,intm,intn,intc[][100],intb[][100]){puts(x);puts(y);inti,j;for(i=0;i<=m;i++)c[i][0]=0;for(j=1;i<=n;j++)c[0][j]=0;for(i=1;i<=m;i++)for(j=1;j<=n;j++){if(x[i-1]==y[j-1]){c[i][j]=c[i-1][j-1]+1;b[i][j]=0;}elseif(c[i-1][j]>=c[i][j-1]){c[i][j]=c[i-1][j];b[i][j]=1;}el

4、se{c[i][j]=c[i][j-1];b[i][j]=-1;}}}voidPrintLCS(intb[][100],char*x,inti,intj){if(i==0

5、

6、j==0)return;if(b[i][j]==0){PrintLCS(b,x,i-1,j-1);printf("%c",x[i-1]);}elseif(b[i][j]==1)PrintLCS(b,x,i-1,j);elsePrintLCS(b,x,i,j-1);}voidmain(){charx[100]={"ABCBDAB"};chary[100

7、]={"BDCABA"};intc[100][100];intb[100][100];intm,n;m=strlen(x);n=strlen(y);LcsLength(x,y,m,n,c,b);printf("最长子序列为:");PrintLCS(b,x,m,n);printf("");printf("最长子序列长度为:%d",c[m][n]);}实验结果:结果分析:在写规划方程时,只要对两条路径走到同一个点的情况稍微处理一下,减少可选的决策个数:从这个例子中可以总结出设计动态规划算法的一个技巧:状态转移一般。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。