最小编辑距离(Edit Distance)


编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括:

(1)任意位置插入一个字符
(2)任意位置删除一个字符
(3)任意未知修改一个字符

将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。


思路:

(1)当其中某个字符串长度为0的时候,编辑距离就是另一个字符串的长度。(我们可以理解为,对长度为0的字符串一直插入字符变成另一个字符串)

dp表 - failing - sailn

(2)当字符串不等的时候, 我们发现从后往前可以简化步骤。

(3)求状态转移方程:

  • 当 a[i] = b [j] 时候,f(i, j) = f(i-1, j-1);

  • 当a[i] != b [j] 时候,f(i, j) = f(i-1, j-1) + 1( i-1 = j-1,然后a[max(i,j)] 修改成 b[max(j,i)] ); 或者是 f(i, j-1) +1( i==j-1,然后删掉b[j])或者是 f(i-1, j) + 1;

那么此时动态转移方程为:

   f(i,j) = max(i,j)  
   // if i与j其中一个为0
f(i,j) = f(i-1,j-1) // if a[i]=a[j] f(i,j) = min (f(i-1,j-1) + 1, f(i, j-1) + 1, f(i-1, j) + 1);

你可能感兴趣的:(最小编辑距离(Edit Distance))