最小编辑距离算法
编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另外一个所需的编辑操做次数。最小编辑距离,是指所需最小的编辑操做次数。数组
编辑操做包含:插入、删除和替换三种操做。函数
动态规划的核心思想是:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各类可能的局部解,经过决策保留那些有可能达到最优的局部解,丢弃其余局部解。依次解决各子问题,最后一个子问题就是初始问题的解。spa
因为动态规划解决的问题多数有重叠子问题这个特色,为减小重复计算,对每个子问题只解一次,咱们将其不一样阶段的不一样状态保存在一个二维数组中。3d
最小编辑距离算法伪代码:blog
输入:字符串1-str1 字符串2-str2 字符串
输出:最小编辑距离it
实质问题:io
求解动态规划矩阵。假设咱们以str1为主串(即对str1进行操做)table
算法:
# |
A |
B |
C |
D |
|
# |
|||||
A |
|||||
C |
|||||
D |
#表示在串前能够插入任何字符。
# |
A |
B |
C |
D |
|
# |
0 |
1 |
2 |
3 |
4 |
A |
1 |
||||
C |
2 |
||||
D |
3 |
矩阵方向 |
编辑操做 |
计算公式 |
向右走:Right |
删除 |
|
向下走:Down |
插入 |
|
对角线:Diagonal |
替换|匹配 |
|
循环计算整个矩阵
# |
A |
B |
C |
D |
|
# |
0 |
1 |
2 |
3 |
4 |
A |
1 |
0 |
1 |
2 |
3 |
C |
2 |
1 |
1 |
1 |
2 |
D |
3 |
2 |
2 |
2 |
1 |
5. 即为最小编辑距离
最小编辑距离一般做为一种类似度计算函数被用于多种实际应用中,详细以下:(特别的,对于中文天然语言处理,通常以词为基本处理单元)