求编辑距离
Posted 寻道的 Programmer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求编辑距离相关的知识,希望对你有一定的参考价值。
定义
编辑距离又称Leveinshtein距离,是由俄罗斯科学家Vladimir Levenshtein在1965年提出。编辑距离是计算两个文本相似度的算法之一,以字符串为例,字符串a和字符串b的编辑距离是将a转换成b的最小操作次数,这里的操作包括三种:
- 插入一个字符
- 删除一个字符
- 替换一个字符
举个例子,kitten和sitting的编辑距离是3,kitten -> sitten(k替换为s) -> sittin(e替换为i) -> sitting(插入g),至少要做3次操作。
实现
用 leva,b(i,j) 来表示a和b的Leveinshtein距离(i和j分别代表a和b的长度),则:
- 当min(i,j)=0时,leva,b(i,j)=max(i,j),一个字符串的长度为0,编辑距离自然是另一个字符串的长度
- 当ai=bj时,leva,b(i,j)=leva,b(i−1,j−1),比如xxcz和xyz的距离=xxc和xy的距离
-
否则,leva,b(i,j)为如下三项的最小值:
- leva,b(i−1,j)+1(删除ai),比如xxc和xyz的距离=xx和xyz的距离+1
- leva,b(i,j−1)+1(插入bj),比如xxc和xyz的距离=xxcz和xyz的距离+1=xxc和xy的距离+1
- leva,b(i−1,j−1)+1(替换bj),比如xxc和xyz的求编辑距离