最小编辑距离 | Minimum Edit Distance

最小编辑距离用于衡量两个字符串之间的差异,通过计算转换所需的最少删除、插入和替换次数。状态转移通过二维dp数组实现,当字符串对应位置字符相等时,dp[i][j]=dp[i-1][j-1];不等时,dp[i][j]取删除、插入、替换操作的最小值。这是一种坐标DP的应用,状态依赖于整个矩阵的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于两个字符串s1,s2的差别,可以通过计算他们的最小编辑距离来决定。
设A、B为两个字符串,狭义的编辑距离定义为把A转换成B需要的最少删除(删除A中一个字符)、插入(在A中插入一个字符)和替换(把A中的某个字符替换成另一个字符)的次数,用ED(A,B)来表示。直观来说,两个串互相转换需要经过的步骤越多,差异越大。

对于编辑距离的状态转移较为难想。
正确的思路应当是将s1的前i位数据转换成s2的前j位数据所需要的转换步数设置为dp[i][j]
图片1
如上图,由上往下表示添加,例如a->azc
由左往右表示删除,例如abc->a
斜向下表示更新,例如abc->azc

于是某一点的最小编辑距离首先需要考虑的是s[i]==s2[j]??
如果相等,则考虑d[i][j]=dp[i-1][j-1];也即这一位不需要进行变换。
而不相等的时候,需要进行变换,并寻找如何才能在最短的步数完成变换。

故有3条方式:以ab->az为例
不考虑b的时候,a->az = 1,故ab->az = 2 ,也即在a->az基础上添加b
不考虑z的时候,ab->a = 1,故ab->az = 2 , 也即在a->az基础上删除b,添加z,一共2步
不考虑b和z的时候,a->a = 0, 故ab->az=1,也即在a->a基础上,将b->z 一共1步

//说实话这个挺晦涩,过几天再好好总结一下

不过这样一来DP方程倒是比较简单了。
s[i]==s[j]时,dp[i][j]=dp[i-1]][j-1]
s[i]!=s[j]时,dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值