经典算法 | 字符串最小编辑距离分析与证明
来源:互联网 发布:幽灵行动4画面优化 编辑:程序博客网 时间:2024/05/22 18:56
所谓的求字符串的编辑距离就是给你两个字符串A和B,每次对A进行下列三个操作之一:
1) 改变一个字符
2) 删除一个字符
3) 增加一个字符
将A变成B所需要的最小步骤数就是AB之间的编辑距离。
1如何使用笔算出AB之间的编辑距离
首先分析AB的长度,对其中较短的字符串进行加0填充,使填充之后的字符串长度相等,并且保证填充后的字符串之间每一位尽可能的相等,比如A是aabbcc,B为aawbbwccw,那么A填充之后变成A^:aa0bb0cc0,需要注意的是,0并不是一个字符,只是表示一个占位,
这时可以得到A和B 的编辑距离,将A^和B一一对应,不相等的位数的个数就是A到B所需要的最短编辑距离,同时也是B变成A的最短编辑距离,这里为3
2AB之间的编辑距离计算编程思路
1) AB最后一位相等
设A长度为i位,B长度为j位,d(i,j)为A,B之间的编辑距离,当A[i]==B[j]的时候,对其中较短的一个字符串进行加0填充,这里假设是A,填充后为A^,那么在填充之后B[j]所对应的字符有两种情况,其一是B[j]对应A[i],那么这里很明显,d(i,j)==d(i-1,j-1)成立,当B[j]对应0的时候,这是可以在不改变编辑距离的情况下对A^进行更改,将A^的最后一个0与前一个与B[j]相等的字符交换位置,这个时候A^和B之间的不同位数不会改变,编辑距离也就不会改变,这个时候d(i,j)==d(i-1,j-1)成立
2) AB最后一位不等
当AB最后一位不等的时候,A^和B最后一位有两种情况,情况一:0和一个字符,这个假设A^最后为0,那么最后一步为插入字符,那么d(i,j)=d(i,j-1)+1,情况二:当A^和B最后一位为两个不同字符的时候,那么最后一步为更改字符,d(i,j)=d(i-1,j-1)+1,
3) 递推公式
综上所述,能很容易的得到AB之间编辑距离的递推公式,
d(i,j)=min{d(i-1,j-1)+@(A[i],B[j]),d(i-1,j)+1,d(i,j-1)+1}
@(A[i],B[j])的值当A[i]==B[j]时为0,当A[i]!=B[j]时为1
- 经典算法 | 字符串最小编辑距离分析与证明
- 经典算法求字符串的编辑距离
- 最小编辑距离算法
- 算法设计与分析--编辑距离问题
- 字符串编辑距离算法
- 【算法】字符串编辑距离
- 使用最小编辑距离算法求字符串相似度
- 编辑距离与编辑算法
- poj3356 AGTC(经典DP最小编辑距离)
- levenshtein字符串编辑距离算法
- 编辑距离问题算法分析
- 最小编辑距离(字符串相似度)
- 动态规划(最小字符串编辑距离实现)
- 《算法设计与分析》实践报告--编辑距离问题
- Levenshtein distance最小编辑距离算法实现
- 最小编辑距离算法JAVA实现
- Levenshtein distance最小编辑距离算法实现
- Levenshtein distance最小编辑距离算法实现
- 12.20
- 维特比算法
- SparkStream源码分析:JobScheduler的JobStarted、JobCompleted是怎么被调用的
- Java的算数运算符、关系运算符、逻辑运算符、位运算符
- IT行业与风险投资
- 经典算法 | 字符串最小编辑距离分析与证明
- Java笔记12.9
- 《剑指offer》刷题笔记(链表):删除链表中重复的结点
- MYSQL5.7版本sql_mode=only_full_group_by问题
- 如何学习JAVA
- NGUI页签Tabview
- 特征选择——卡方检验(使用Python sklearn进行实现)
- 小东吖 之 java Map集合类
- 4519: [Cqoi2016]不同的最小割