动态规划求编辑距离

问题:给定一个源串和目标串,能够对源串进行如下操作:
在给定位置上插入一个字符
替换任意字符
删除任意字符
要求写一个程序,返回最少的操作数,使得对源串进行这些操作后等于目标串。源串和目标串的长度都小于2000。

关于编辑距离
编辑距离(Edit Distance
),又称
Levenshtein
距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

例如将kitten
一字转成
sitting

sitten (
k

s

sittin (
e

i

sitting (→
g

俄罗斯科学家Vladimir Levenshtein

1965
年提出这个概念。

常见的思路是动态规划,下面是简单的DP
状态方程:

//动态规划:

//f[i,j]表示
d[0...i]与
s[0...j]的最小编辑距离,
d为目标串,
s
为源串。

f[i,j] = min { f[i-1,j]+1, f[i,j-1]+1, f[i-1,j-1]+(s[i]==d[j]?0:1) }
//分别表示:添加
1
个,删除
1
个,替换
1
个(相同就不用替换)。

Java代码:

https://github.com/JiangJiafu/Algorithm/blob/master/src/MinimumEditDistance.java

新浪博客放代码不方便,常常被莫名其妙地更改!!!转到github上了。

参考资料:
http://ccl.pku.edu.cn/doubtfire/Course/Computational Linguistics/contents/Minimum Edit Distance.pdf

你可能感兴趣的:(动态规划求编辑距离)