编辑距离
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程任务:
对于给定的字符串A和字符串B,编程计算其 编辑距离d(A,B)。
数据输入:
由文件edit*.in提供输入数据。文件的第一 行是字符串A,文件的第二行是字符串B。
结果输出:
程序运行结束时,将编辑距离d(A,B)输出到 文件edit*.out的第1行中。
例如: 1) A = abcd B = ef d(A,B) = 4 ; 2) A = cd B = abcb d(A,B) = 3 ;
算法设计思路:
编辑距离问题具有最优子结构性质。
现在要将a1,a2 …ai-1,ai转换为b1, b2 ,… bj-1, bj 则可以分为以下几种情况进行讨论: (1)如果ai = bj
,则
Ai = Bj
(2)如果ai ≠ bj ,则 有三种方式将a1, a2 …ai-1,ai转换为b1, b2 ,… bj-1,bj
编辑距离问题
问题描述:
设A和B是2个字符串。要用最少的字符操作将字符 串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数 称为字符串A到B的编辑距离,记为d(A,B)。试设计一 个有效算法,对任给的2个字符串A和B,计算出它们的 编辑距离d(A,B)。
子问题的递归结构
由编辑距离的最优子结构性质可知,要找出字符串 A到字符串B的最短编辑距离,可以按照通过递归来实 现。可以建立递归关系如下: d[i-1][j-1] a[i] = b[j] d[i][j-1]+1 a[i] ≠ b[j] ; d[i][j-1]<=d[i-1][j-1] ; d[i][j-1]<=d[i-1][j] //insert d[i][j] = d[i-1][j]+1 a[i] ≠ b[j] ; d[i-1][j]<=d[i-1][j-1] ; d[i-1][j]<=d[i][j-1] //delete d[i-1][j-1]+1 a[i] ≠ b[j] ; d[i-1][j-1]<=d[i-1][j] ; d[i-1][j-1]<=d[i][j-1] //modify
பைடு நூலகம்
例如:
( 1 ) a4 = b3 bcde dfe bcd df ( 2 ) a4 ≠ b3 bcdg dfk i ) 在bcdg 末尾增加k 得到 bcdgk bcdg dfk bcdg+k bcdg df ii ) 删除bcdg 末尾字符g 得到 bcd bcdg dfk bcd bcd dfk iii) 将bcdg末尾字符g修改为 k , 得到bcdk bcdg dfk bcdk bcd df
a 将ai修改为bj,使求Ai到Bj的最短编辑距离问 题转化为求 Ai-1: a 1,a2 …ai-1到Bj-1:b1, b2 ,… bj-1 的最短编辑距离问题 b 通过删除 ai,使求Ai到Bj的最短编辑距离问 题转化为求Ai-1: a 1,a2 …ai-1到 Bj:b1, b2 ,… bj-1, bj 的最短编辑距离问题 c 通过增加 ai,使求Ai到Bj的最短编辑距离问 题转化为求Ai: a 1,a2 …ai-1,ai到 Bj-1:b1, b2 ,… bj-1, 的最短编辑距离问题
设置边界值
d[0][i] = i d[j][0] = j 0 < i < n 0 < j < m
问题的时间复杂性
算法耗时 0(mn )
关键程序
for(i=0;i<=n;i++) c[0][i]=i; for(i=0;i<=m;i++) c[i][0]=i; for(i=1;i<=m;i++) for(j=1;j<=n;j++) { if (x[i]==y[j]) c[i][j]=c[i-1][j-1]; else if(c[i-1][j-1]<=c[i-1][j]&&c[i-1][j-1]<=c[i][j-1]) c[i][j]=c[i-1][j-1]+1;//modify else if (c[i-1][j]<=c[i-1][j-1]&&c[i-1][j]<=c[i][j-1]) c[i][j]=c[i-1][j]+1;//delete else c[i][j]=c[i][j-1]+1;//add }
分析最优解结构
设字符串 A=a1,a2,…am B=b1, b2,… bn ; d[i][j] 用于记录字符串Ai到字符串B j的最短 编辑距离,其中Ai = a1,a2 …ai , Bj = b1, b2… bj Ai到Bj的最短编辑距离可以分解为三个子 题 :即求Ai-1 到Bj-1 ,Ai 到Bj-1 ,Ai-1 到Bj的最 短编辑距离,通过修改,增加,删除一个字符 得到;从这三种方式中选择编辑距离最短的一 个就是Ai到Bj的最短编辑距离。 显然可知计算d[i][j]的一个最优解所包含 的计算d[i-1][j-1], d[i][j-1], d[i-1][j]也 是最优的。