编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符。(注意这里的理解就是“最少”两个字,意思就是在所有能达到同样效果的操作次数中选最小的那个,后边的公式也是如此理解)
例子
Levenshtein距离 | index | b | e | a | u | t | y |
index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
b | 1 | 0 | 1 | 2 | 3 | 4 | 5 |
a | 2 | 1 | 1 | 1 | 2 | 3 | 4 |
t | 3 | 2 | 2 | 2 | 2 | 2 | 3 |
y | 4 | 3 | 3 | 3 | 3 | 3 | 2 |
u | 5 | 4 | 4 | 4 | 3 | 4 | 3 |
公式为:d(i, j) == min{ d[i-1, j] + 1, d[i, j-1] + 1, d[i-1, j-1]+ f(i, j) }
索引加一为考虑前一步已经有所替换,所以考虑到此步会加一,公式从行方向,列方向,对角线方向用时进行操作,看达到同样效果时实现效果操作次数最小的那个。
部分引文参考: