编辑距离问题

来源:互联网 发布:秘鲁域名后缀 编辑:程序博客网 时间:2024/05/18 02:58
1、问题描述:
  ?设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。这
  里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另
  一个字符。将字符串A变换为字符串B 所用的最少字符操作数称为字符串A到B 的编
  辑距离,记为 d(A,B)。试设计一个有效算法,对任给的2 个字符串A和B,计算出它
  们的编辑距离d(A,B)。
  
  2、题目分析:
  题目要求计算两字符串的编辑距离,可以采用动态规划算法求解,由最优子结构性质可建立递归关系如下:
   其中数组d[i][j] 存储长度分别为i、j的两字符串的编辑距离;用edit标记所比较
  的字符是否相同,相同为0,不同为1;用m、n存储字符串a、b的长度。
  
  3、算法设计:
  a. 函数min()找出三个数中的最小值;
  b. 函数d()计算两字符串的编辑距离:
   ①用edit标记所比较的字符是否相同,相同为0,不同为1;
  ②分别用m、n存储字符串a、b的长度,用数组d[i][j] 存储长度分别为i、j的两字符串的编辑距离,问题的最优值记录于d[n][m]中
  ③利用递归式写出计算d[i][j]的递归算法。

首先给定第一行和第一列,然后,每个值d[i,j]这样计算:d[i][j]   =   min(d[i-1][j]+1,d[i][j-1]+1,d[i-1][j-1]+(s1[i]  ==  s2[j]?0:1));   
最后一行,最后一列的那个值就是最小编辑距离
原创粉丝点击