Levenshtein距离
Levenshtein距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
求解Levenshtein距离可以依靠动态规划。例如将源字符串'yabd'转换成目标字符串'abc',该问题的求解步骤可以用如下表格表述,例如其中(0)号格代表将'yab'与'ab'之间的距离,(0)号格可以通过(1)(2)(3)号格进行求解,思路如下。
'' | a | b | c | |
---|---|---|---|---|
'' | ||||
y | ||||
a | (3) | (2) | ||
b | (1) | (0) | ||
d |
通过(1)求解:(0) 代表 'yab'->'ab',(1) 代表 'yab'->'a',因此 (0) 比 (1) 多1步 ('a'->'ab')
通过(2)求解:(0) 代表 'yab'->'ab',(2) 代表 'ya'->'ab',因此 (0) 比 (2) 多1步 ('yab'->'ya')
通过(3)求解:(0) 代表 'yab'->'ab',(3) 代表 'ya'->'a',因此 (0) 比 (3) 多2步 ('yab'->'ya','a'->'ab'),但如果源字符串与目标字符串的最后一个字符相同(正如此例中的情况),则多出的2步是不需要的,此时 (0) 与 (3) 的步数相等