最小编辑距离(Minimum Edit Distance)
概念
编辑距离的概念:
给定两个字符串oppa和apple,如何把前者变成后者?你可以使用的操作有:1.增加字符2.删除字符3.更新字符。
一种可能的做法是:
oppa->appa->appl->apple:共使用了3次编辑。
可以验证,上面的字符串转换做法就是最小编辑距离,其他的做法诸如:
oppa->aoppa->apppa->appla->apple:4次
这都不是我们想要的。
求解
求解两个字符串的最小编辑距离,我们使用动态规划(dynamic programing)的思想。因为我们发现这个问题可以有如下的问题分解形式,即:
我们一旦确定了两个字符串设为 w 1 = w m a , w 2 = w n b w_1=w_ma,w_2=w_nb w1=wma,w2=wnb(这里是将 w 1 , w 2 w_1,w_2 w1,w2分解成了两部分,其中a,b是一个字符,前面的 w m , w n w_m,w_n wm,wn是前面的子串,以上6个符号均可为空)的最小编辑距离 L ( w 1 , w 2 ) L(w_1,w_2) L(w1,w2)和相应的编辑操作序列,那么必有:
- 若 a , b a,b a,b不相等,则:
L ( w 1 , w 2 ) = m i n ( L ( w m , w n ) , L ( w m , w 2 ) , L ( w 1 , w n ) ) + 1 L(w_1,w_2)=min(L(w_m,w_n),L(w_m,w_2),L(w_1,w_n))+1 L(w1,w2)=min(L(wm,wn),L(wm,w2),L(w1,wn))+1 - 若 a , b a,b a,b相等,则:
L ( w 1 , w 2 ) = L ( w m , w n ) L(w_1,w_2)=L(w_m,w_n) L(w1,w2)=L(wm,wn)
显然,上面的两个式子,我们把原问题分解到了规模更小的子问题,这就是动态规划。
上面两个式子没看懂没关系,下面有例子
例子
下面展示动态规划是如何解决oppa和apple的最小编辑距离的。
我们知道动态规划有2步核心,一步是上面的状态转移方程,就是上面的式子,一步是初始状态的确定。
1.初始化
首先在每个字符串的前面添加一个空格(在这里也可以叫做空串)。为什么要添加?显然,按照上面的转移方程 L ( w 1 , w 2 ) = m i n ( L ( w m , w n ) , L ( w m , w 2 ) , L ( w 1 , w n ) ) + 1 L(w_1,w_2)=min(L(w_m,w_n),L(w_m,w_2),L(w_1,w_n))+1 L(w1,w2)=min(L(wm,wn),L(wm,w2),L(w1,wn))+1,要解决后面的问题,需要前面3个子问题的答案才能解决。而这三个子问题不就是左上,左,上的格子要先初始化填好吗?即:
初始化是简单的,拿上面的图片为例,其他依次类推。
- 空格变成空格,需要0次编辑
- 空格变成a,需要1次编辑(添加操作)
- o变成空格,需要1次编辑(删除操作)
依次求解
接下来根据转移方程依次求解剩下来的格子
为什么格子填入了1?由于o和a不相等,所以应用第一个公式 L ( w 1 , w 2 ) = m i n ( L ( w m , w n ) , L ( w m , w 2 ) , L ( w 1 , w n ) ) + 1 L(w_1,w_2)=min(L(w_m,w_n),L(w_m,w_2),L(w_1,w_n))+1 L(w1,w2)=min(L(wm,wn),L(wm,w2),L(w1,wn))+1,我们发现左上,左,上三个格子中最小的是左上0,然后0+1=1,这就是最终结果。
结果解释
:由于是从左上选取的,所以就是说此过程有两步,1.o前面的空串经过0次编辑变成了a前面的空串2.将o替换为a。
为什么格子填入了2?由于o和p不相等,所以应用第一个公式 L ( w 1 , w 2 ) = m i n ( L ( w m , w n ) , L ( w m , w 2 ) , L ( w 1 , w n ) ) + 1 L(w_1,w_2)=min(L(w_m,w_n),L(w_m,w_2),L(w_1,w_n))+1 L(w1,w2)=min(L(wm,wn),L(wm,w2),L(w1,wn))+1,我们发现左上,左,上三个格子中最小的是左上1或者左1,然后1+1=2,这就是最终结果。
结果解释
:两种选择
- 如果是从左上选取的,所以就是说此过程有两步,
1
.o前面的空串已经经过1次编辑变成了a2
.将o替换为p。 - 如果是从左选取的,所以就是说此过程有两步,
1
.o已经经过1次编辑变成了a2
.添加一个p。
其他依次类推,此处省略若干步,到达第二个公式的用武之地:
为什么(p,p)处填入1?根据第二个公式,由于两个字符相等,都是p,所以: L ( w 1 , w 2 ) = L ( w m , w n ) L(w_1,w_2)=L(w_m,w_n) L(w1,w2)=L(wm,wn),即找左上的(o,a)=1拿过来就行了。
第二个公式的证明
:
其实也可以继续使用之前的那个公式,但是需要稍微更改一下,即有能达到目的的3种候选方案,分别是:左上,左加1,上加1。然后选最小。,即:
L(op,ap)=min{1,2+1,2+1}=1
上述3种方案的含义:
- 左上方案,因为最后一个字母相同,所以左上完成后(o已经->a),就相当于整个完成了。
- 左加1,因为左边是指op->a最短需要2步,此时op已经变成了a,当然还要有一个添加p的操作,所以要加1。
- 为什么要上加1,因为上面是o->ap最短需要2步,此时o变成了ap,当然就要把op中的p进行删除操作即可,所以加1。
下一个要证明的问题:为什么这三者一定是左上最小呢?
因为相邻的值的绝对值之差,可能为0,最大为1。由于左和左上相邻,所以最多相差1,由于上和左上相邻,所以最多也相差1。
- 左加1(那么加1后肯定大于等于左上)
- 上加1(那么加1后肯定页大于等于左上)
有了这个结论,我们就可以大胆地选择公式2了,即当 a = b a=b a=b时直接选左上的。
公布最终结果
最小编辑距离(Minimum Edit Distance)相关推荐
- 最小编辑距离算法 Edit Distance(经典DP)
最小编辑距离算法 Edit Distance(经典DP) 转载baodream 最后发布于2018-05-23 11:36:32 阅读数 22226 收藏 展开 编辑距离(Edit Distance ...
- mysql 编辑距离 搜索_最小编辑距离(Minimum Edit Distance)
最小编辑距离 1)定义 编辑距离(Minimum Edit Distance,MED),又称Levenshtein距离,是指两个字符串之间,由一个转成另一个所需要的最少编辑操作次数.允许的编辑操作包括 ...
- Minimum edit distance(levenshtein distance)(最小编辑距离)初探
最小编辑距离的定义:编辑距离(Edit Distance),又称Levenshtein距离.是指两个字串之间,由一个转成还有一个所需的最少编辑操作次数.许可的编辑操作包含将一个字符替换成还有一个字符. ...
- 字符串编辑距离(Edit Distance)
一.问题描述 定义 字符串编辑距离(Edit Distance),是俄罗斯科学家 Vladimir Levenshtein 在 1965 年提出的概念,又称 Levenshtein 距离,是指两个字符 ...
- stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)
I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...
- 编辑距离(Edit Distance)
编辑距离是用于比较两个字符串或者符号序列之间距离的常用距离函数. 含义为:给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数,可以对一个单词进行如下 ...
- 【转】最小编辑距离 算法原理
问题 最小编辑距离 Minimum Edit Distance 关于两个字符串s1,s2的差别,可以通过计算他们的最小编辑距离来决定. 设A.B为两个字符串,狭义的编辑距离定义为把A转换成B需要的最少 ...
- 详解编辑距离(Edit Distance)及其代码实现
概述 编辑距离(Minimum Edit Distance,MED),由俄罗斯科学家 Vladimir Levenshtein 在1965年提出,也因此而得名 Levenshtein Distance ...
- 最小编辑距离 (MED)实现-Python
此帖内容是去年9月份自己做的小实验~ 1. 实验目的 最小编辑距离旨在定义两个字符串之间的相似度,定义相似度可以用于拼写纠 错.计算生物学上的序列对比.机器翻译.信息提取和语音识别等. 最小编辑距离就 ...
最新文章
- 如何对phpcms v9的首页列表进行分页?
- 工信部企业信息核查 谋定“互联网+监管”经信研究创新实践
- 【转】简单介绍几个CDS视图聚合函数
- 哪吒之魔童降世 - 逆天改命,若命运不公,就和它斗到底!
- Java中的原生动态代理和CGLIB动态代理的原理,我不信你全知道!
- Win10+Python3.6配置Spark创建分布式爬虫
- 解线性方程组——有机物燃烧的化学方程组的配平
- R_差值_拟合_回归_样条
- pickerView的简单使用
- 计算机应用技术和cad,计算机图形技术与CAD
- 实时帧数手机_实时音频的混音在视频直播中的技术原理和实践总结
- html 计数器 样式,CSS3 计数器_html/css_WEB-ITnose
- Android 中Fragment之间传递数据
- 四年级计算机课的检讨,四年级下册信息技术教学反思.doc
- 数据上链——区块链相关概念
- 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变,句子中单词以单个空格符隔开,为简单起见,不带标点符号。 例如输入“I am a student”,则通过控制台输出“student a
- WLW blog 小技巧
- 数字水印常见攻击类型汇总,噪声,缩放,旋转,剪切(附matlab代码)
- STM32CUBEMX_SDIO和FATFS_读写SD卡
- (附源码)spring boot大学生综合素质测评系统 毕业设计162308
热门文章
- c++vector使用方法详解
- java计算机毕业设计高校请假管理系统源码+mysql数据库+系统+lw文档+部署
- SQL server的书签查找
- Win10软件出现找不到HID.DLL问题
- 课程实验 【八路抢答器】
- python excel 打印文档_教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!...
- c语言键盘输入打印星,C语言打印星星的问题
- iterm2 字体颜色
- 探究NFC SWP移动支付技术
- 2020年河南成人高考各科目快速备考方法