动态规划之编辑距离,简单理解

编辑距离用于计算两个字符串的差距。即字符串s1经过几步操作可以变成字符串s2,操作有增删改。
比如 s1=abc. s2=aecf。 他们的编辑距离是2 ,把s1的b改成e,然后是s1增加f。需要2步。

dp[i][ j]=s1[0…i] 和 s2[0…j] 的最小编辑距离

基本思路是 ,s1下标i对应的s2下标j的字符是否相等。相等不用动,dp[i][j]=dp[i-1][j-1]
不等有3种操作。
增加操作:dp[i][j]=dp[i][j-1]+1; 如果[0…i]已经转成[0…j-1]的情况下,要把[0…i]转成[0…j]需要怎么做呢,需要插入一个j,
删除操作:dp[i][j]=dp[i-1][j]+1;如果[0…i-1]已经跟[0…j]一样了,要把[0…i]转成[0…j]需要怎么做呢,因为i-1的时候已经跟J一样了,所以这个i超了,需要删掉
修改操作:dp[i][j]=dp[i-1][j-1]+1;如果[0…i-1]已经跟[0…j-1]一样了,但是我们知道I跟j不同,那当然需要吧 s1(i)改成s2(j).

编辑距离取得是最小值所以有dp[i][j]=min(增,删,改)

伪码如下
for i in s1:
dp[i][0]=i;#转成空串
for j in s2:
dp[0][j]=j;#空串转s2

for i in s1:
for j in s2:
if i==j:
dp[i][j]=dp[i-1][j-1]
else:
dp[i][j]=min(增,删,改)
return dp[i][j];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值