算法设计动态规划方案编辑距离.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《算法设计和分析》课程汇报 课题名称: 动态计划——编辑距离问题 课题责任人名(学号): 同组组员名单(角色): 无 指导老师: 左劼 评阅成绩: 评阅意见: 提交汇报时间:20XX年 6 月 23 日 动态计划——编辑距离问题 计算机科学和技术 专业 学生 指导老师 左劼 [摘要] 动态计划基础思想和分治法类似,也是将待求解问题分解成若干份子问题,先分别处理好子问题,然后从子问题中得到最终解。但动态计划中子问题往往不是相互独立,而是相互之间有影响,因为有些子问题可能要反复计算数次,所以利用动态计划使这些子问题只计算一次。将字符串A变换为字符串所用最少字符操作数称为字符串A到B编辑距离。 关键词:动态计划 矩阵 字符串操作数 编辑距离 一、问题描述 1、基础概念:设A和B是2个字符串。要用最少字符操作将字符串A转换为字符串B。字符串操作包含: (1) 删除一个字符; (2) 插入一个字符; (3) 将一个字符改为另一个字符。 将字符串A变换为字符串B所用最少字符操作数称为字符串A到B编辑距离,记为d(A,B)。 2、算法设计:设计一个有效算法,对于给定任意两个字符串A和B,计算其编辑距离d(A,B)。 3、数据输入:输入数据由文件名为input.txt文本文件提供。文件第1行为字符串A,第二行为字符串B。 4、结果输出:将编辑距离d(A,B)输出到文件ouput.txt第一行。 输入文件示例 输出文件示例 input.txt output.txt fxpimu 5 xwrs 二、分析 对于本问题,大致思绪为:把求解编辑距离分为字符串A从0个字符逐步增加到全部字符分别想要变为字符串B该怎样改变和改变最短距离。 具体来说,首先选择数组a1存放字符串A(设长度为n),a2存放字符串B(设长度为m),d矩阵来进行具体运算;这里有两个特殊情况比较简单能够单独考虑,即A长度为0而B不为0还有A不为0B为0,这两种情况最终编辑距离分别为m和n;讨论通常情况,d矩阵为d[n][m],假定我们从d[0][0]开始一直进行以下操作到了d[i][j]位置,其中删除操作肯定是A比B长,同理,插入字符操作一定是A比B短,更改字符操作说明一样长,我们所要做是对d[i][j-1] d[i-1][j] d[i-1][j-1]所存数进行比较,其中最小即为目前长度和样式字符串A变为B编辑距离,依次这么计算到最终d[n][m]中所存数即为最终编辑距离。 三、证实 1、理论前提:动态计划基础思想和分治法类似,也是将待求解问题分解成若干份子问题,先分别处理好子问题,然后从子问题中得到最终解。但动态计划中子问题往往不是相互独立,而是相互之间有影响。该算法有效性依靠于两个关键性质:最优子结构性质和问题重合性质。 最有子结构性:以自底向上方法递归地从子问题最优解逐步结构出整个问题最优解。 重合子问题性:每次产生子问题并不总是新问题,利用动态计划对每一个子问题只解一次,并将其存入表格中,下次用到该子问题解时,只要查找表格即可。 2、本题:本题首先符合最优子结构性,即让字符串A从1开始递增到最终长度n,也就是从只有一个字符开始计算,每增加一个字符计算一次,符合自底向上方法递归地处理子问题;其次符合重合子问题性,每增加一个字符计算时候总要用到前一状态时编辑距离,而且本题我采取了矩阵来存放旧子问题数据,全部只计算了一次,所以也符合。 3、总结:综上两点,可知本题采取了动态计划思想来处理,并能得到正确答案。 四、代码及解释(注释) #includeiostream.h #includefstream #includestdlib.h #includestring.h using namespace std; const int MAX=1000; int min(int a,int b) { if(a=b) return b; else return a; } int main() { int d[MAX][MAX]; int i,j; char a1[MAX], a2[MAX]; FILE *fp; fp=fopen(input.txt,r); fscanf(fp,%s,a1); fscanf(fp,%s,a2); fclose(fp); int n=strlen(a1)-1; //字符串末尾多1 int m=strlen(a2)-1; for(i=0;i=n;i++) //从i变到0字符串,i个需要i次(添加) d[i][0]=i; for(

文档评论(0)

159****1748 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档