最短编辑距离问题理解
最短编辑距离是指两个字符串,把其中一个字符串转为另一个字符串所需要花费的最小操作成本。
设dp[i][j]为Xi与Yj的最短编辑距离,则Xi与Yj处于最优解时的排列有三种情况
1.Xi最后一个元素xi位于Yj最后一个元素yj的左边
2.Xi最后一个元素xi位于Yj最后一个元素yj的右边
3.Xi最后一个元素xi与Yj最后一个元素yj重合
无论最终dp[i][j]的字符串如何对齐,只用取三种情况的最小值即可。
对于1,转化操作时,yj是必然要删掉的,故必然有1个单位的操作成本,因为dp[i][j]是最优操作成本,故dp[i][j]-1就是Xi与Yj-1的最优操作成本,即dp[i][j]-1=dp[i][j-1],即dp[i][j] = dp[i][j-1] + 1。
对于2,同理,对称,xi是必然要删掉的,dp[i][j] = dp[i-1][j] + 1
对于3,若xi = yj,则没有任何成本,此时Xi与Yj的最小操作成本与Xi-1和Yj-1相同,dp[i][j] = dp[i-1][j-1] + 0;若xi ≠ yj,则必然要将xi替换为yj或反之,故必然有1个单位的操作成本,所以dp[i][j] - 1是Xi-1与Yj-1的最优成本,dp[i][j] = dp[i-1][j-1] + 1;
整理递归式:dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1] + diff(xi, yj));
可直接用递归求解或者动态规划求解。
转载于:https://www.cnblogs.com/SHQHDMR/p/10664927.html
最短编辑距离问题理解相关推荐
- 最短编辑距离问题 : Levenshtein Distance
个人觉得只要你能明白edit数组的含义就可以理解状态转移方程了. /* 可以用来表示字符串的相似度? */ #include <bits/stdc++.h> using namespace ...
- 最短编辑距离(动态规划超详细填表法)
链接:https://www.nowcoder.com/questionTerminal/9649617be3bf42288f50758df4310655 来源:牛客网 UNIX系统下有一个行编辑器e ...
- 经典动态规划问题:最短编辑距离算法的原理及实现
编辑距离的定义 编辑距离(Edit Distance)最常用的定义就是Levenstein距离,是由俄国科学家Vladimir Levenshtein于1965年提出的,所以编辑距离一般又称Leven ...
- 最短编辑距离 python_最短编辑距离算法实现
一,算法介绍 在CS124课程的第一周提到 求解两个字符串相似度的算法---Minimum Edit Distance(最短编辑距离)算法.该算法在NLP(自然语言处理)中也会用到. 如何定义相似度呢 ...
- 动态规划最常见的习题 (最长公共子串、最长公共子序列、最短编辑距离)
(1)理论部分: (2)习题: 最长公共子串: 1 package month7.dp; 2 3 //https://www.nowcoder.com/questionTerminal/181a1a7 ...
- 902. 最短编辑距离
最短编辑距离 #include <iostream> #include <algorithm> using namespace std; const int N = 1001; ...
- DP问题从入门到精通2.2(线性DP,最短编辑距离)
DP入门到精通系列 DP问题入门到精通1 DP问题入门到精通2.1 DP问题入门到精通3 DP问题入门到精通4 DP问题从入门到精通5 dp问题的难点到底是什么呢? 我认为是如何写出dp的更新方式,还 ...
- 动态规划---最短编辑距离
描述: 设A和B是2个字符串.要用最少的字符操作将字符串A转换为字符串B.这里所说的字符操作包括: (1)删除一个字符; (2)插入一个字符: (3)将一个字符改为另一个字符. 将字符串A变换为字符串 ...
- 如何用最短的时间理解一项数字技术?推荐这7本最新的白皮书(大数据、云原生、区块链、联邦学习等,附下载)...
正文开始 信息技术.数据被国家认定为新的生产要素,对于数据从业者来说是时代赋予的巨大红利,但也要认识到,数据要素要发挥出价值,离不开数据要素市场的培育,更依赖于信息技术(大数据.人工智能.区块链.云计 ...
最新文章
- 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )
- [渝粤教育] 中国传媒大学 政治传播学 参考 资料
- c++ 基本排序算法学习
- 有了数据湖探索服务,企业决策“新”中有数
- Web服务生存周期内发生的事件/Soap扩展的阶段/Soap扩展的步骤
- boost serialization 运行错误_boost c++之事件处理
- AI入门,从每个人都应该学的AI第一课开始
- Excel中CONCATENATE函数生成SQL insert 语句
- Xshell和Xftp免费版下载安装
- MAC和夜神模拟器配置adb适配报错
- Azure与Aliyun服务对比
- PAM-PDMDAAC聚丙烯酰胺-聚二甲基二烯丙基氯化铵/PEI-P(Asp-Hyd-ADR 聚乙烯亚胺-聚天冬氨酸
- 将计算机设置成交换机主机名,分享:如何配置学校机房项目交换机?
- 编译Android环境的libjpeg-turbo
- Win10 系统设置共享文件
- redis之可视化工具
- TX2超详细,超实用刷机教程(亲测有效,所有步骤都是博主亲自实践过)
- linux ppp用户管理,linux下ppp拨号上网
- Spring学习中使用javaConfig进行配置时出现 has not been refreshed yet错误
- perl中DBD-oracle安装,perl DBD :: Oracle模块安装
热门文章
- 关于《蜗居》的一点想法
- 一个简单的拖动层(兼容IE,FF)
- android 获取屏幕的宽高
- WebKit如何加载web页面
- springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格
- Flutter入门:如何只关闭自身页面
- Python操作SQLLite(基本操作)
- 多个tomcat配置
- VS2013和VS2015中MVC 区域路由匹配顺序相反
- 【Node.js学习笔记一】什么是Node.js?[概念总结]