编辑距离及其回溯路径
来源:互联网 发布:数据库表重命名as语句 编辑:程序博客网 时间:2024/06/18 10:21
编辑距离(Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许对字符串中的字符进行的的操作只有替换、插入、删除三种操作。 编辑距离的计算方法和原理网上都有很多介绍,不再赘述。
假设计算
str1=bcdabcdef
str2=abcdefbcd
的编辑距离,先要构建如下图的矩阵
把str2变为str1,将str2写在横行,str1写在竖列
之后每个元素的值按照下式计算
<span style="font-size:18px;"> //计算替换操作的代价,如果两个字符相同,则替换操作代价为0,否则为1 if str1[i]== str2[j] then cost := 0 else cost := 1 //d[i,j]的Levenshtein距离,可以有 d[i, j] := minimum( d[i-1, j] + 1, //在str2上j位置删除字符(或者在str1上i-1位置插入字符) d[i, j-1] + 1, //在str2上j-1位置插入字符(或者在str1上i位置删除字符) d[i-1, j-1] + cost // 替换操作</span>即每一位的值由其左侧、上侧和左上角的数值决定,取以下三个值的最小值:
- 如果最上方的字符等于最左方的字符,则为左上方的数字。否则为左上方的数字+1。(对于3,3来说为0)
- 左方数字+1(对于3,3格来说为2)
- 上方数字+1(对于3,3格来说为2)
之后会得到完整的距离矩阵,最右下角的值即为编辑距离。如下图,str1和str2的编辑距离即为5。
找到编辑距离后要想明白实际是怎样操作的,就需要找到回溯路径。寻找回溯路径时要从右下角的元素开始,依次看当前元素是如何得到的,有时一个元素可能有多种得到的方式,即表明可以有多种操作可以得到相同的结果。上图的红色箭头即为回溯路径。将回溯路径再反过来就可得到实际编辑操作的路径。
编辑过程:
str2=a b c d e f b c d
str1=b c d a b c d e f
1、向左走,即 d[ 1,1] = d[ 1-1,1 ]+1 , str2 要删除第一个字符,变为 bcdefbcd
2、斜向下,且值未变,说明相同,不用操作
str2 =b c d e f b c f
str1 =b c d a b c d e f
3、 d 之后向左,即删除 e
4、斜向下,且值加1,表示替换,将f换为a
str2 =b c d a b c f
str1 =b c d a b c d e f
5、最后两步向下,表示添加,此处添加 e, f
str2 = b c d a b c f e f
str1 = b c d a b c d e f
共5步操作。
0 0
- 编辑距离及其回溯路径
- 编辑距离及其算法
- 编辑距离及其算法详解
- 最小编辑距离及其C++实现
- 输出路径的最小编辑距离
- hdu 1516(编辑距离+记录路径)
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- 编辑距离
- LDAP概念
- windows mobile 6.5 百度输入法 如何集成到系统中去
- 图像深度
- Ubuntu搭建LAMP及相关配置
- 自定义控件
- 编辑距离及其回溯路径
- 内存分配与处理函数
- 初识软考之Java环境配置
- MQTT协议简记
- jquery datatable 参数
- JVM内存结构解析(一)
- 如何简单地在浏览器中使用阿里云的文件上传功能?
- Android 权限配置
- OpenGl Mip贴图