最小编辑距离(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. 实验目的 最小编辑距离旨在定义两个字符串之间的相似度,定义相似度可以用于拼写纠 错.计算生物学上的序列对比.机器翻译.信息提取和语音识别等. 最小编辑距离就 ...
最新文章
- 数学之美——隐含马尔科夫模型
- 中国剩余定理 互质与非互质版本
- POJ 2886 能被3除尽的数之和
- 问题三十七:C++怎么解一元四次方程?(3)——怎么解一元四次方程
- android之专栏目录
- C++仿函数和typename的用法
- 人脸识别源码运行指南
- 2019 力扣杯全国秋季编程大赛:3. 机器人大冒险(模拟)
- 汉洛塔问题(c解决)
- python爬虫搜狐新闻_应用案例2:爬取搜狐体育的新闻信息
- iPhone的九宫格实现代码
- 利用激活图谱探索神经网络-Exploring Neural Networks with Activation Atlases (上)
- 谷歌浏览器翻译插件使用不了,替代品 AnyTranslation
- java12.0.1版本环境变量设置,2019年5月16,小白笔记
- 外贸版ChatGPT,每天节省5小时开发客户时间,可以用来干这些事情
- 日历节气显示不正常2015年1月6号是小寒,而现在是显示2015年1月5号是小寒
- JAVASCRIPT之函数-输入秒J数转换成时分秒的一个小效果
- 怎么用生活照制作一寸证件照片
- 2022年江苏省建筑三类人员(项目负责人B证)练习题及答案
- NVIDIA APX 能直接运行QUAKE 3,真正的手机3D游戏时代不远了!
热门文章
- 用jupyter打开ipynb文件并运行
- 适配器模式:类适配器模式 对象适配器模式 详细讲解
- 亚商投资顾问 早餐FM/1215扩大内需战略规划纲要
- 十块钱做个好看的心形彩灯
- 联想小新15怎么样?看完对比便知道
- 计算机盖,如何设置华硕笔记本计算机盖的功能
- ...矩阵键盘计算器的C语言,单片机: 简易计算器的实现(键盘)
- NECCS|全国大学生英语竞赛C类|词汇和语法|语法题|时态|22:30~11:44
- Luogu P4516 [JSOI2018] 潜入行动
- 简易浏览器 java_GitHub - JemmyZhong/Simple-browser-implementation: 基于Java实现的简单浏览器...