编辑距离(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<br>
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);
网友评论