插入、删除、修改操作 代价不等的 最短编辑距离 动态规化求法

本文深入探讨了在字符删除、插入和替换代价不等的情况下,如何使用动态规划计算两个字符串的最短编辑距离。通过分析不同情况下的状态转移方程,展示了如何从一个字符串转换到另一个字符串所需的最小编辑次数,并介绍了如何优化空间复杂度。
摘要由CSDN通过智能技术生成

直接上干货。

什么叫编辑距离?从字符串str1到字符串str2需要经过多少次编辑。每次编辑只能增加 / 删除 / 替换1个字符。计算出从str1到str2最小的编辑距离(Minimum Edit Distance),用此可作为两个字符串之间的相似度的衡量。

定义符号:

对于两个字符串strA, strB,它俩的长度分别记为lenA, lenB.

MED:最小的编辑距离(Minimum Edit Distance)

记C[i, j] = MED{ strA[0...i], strB[0...j] }. 即C数组中存储的是 以i j 结尾的两个字符串的最小编辑距离。

现在开始分析:

对于strA[0...lenA-1] 和 strB[0...lenB-1],

当计算C[i][j]时,我们认为C数组之前的值都已经计算好了,我们认为经过C[i-1][j-1]次最少次数的编辑之后,处理过的strA[0...i-1] 与处理过的 strB[0...j-1] 相等。

当计算C[i][j]时,不要去管i与j后面的字符串。

若strA[i] == strB[j],则C[i][j] = C[i-1][j-1].这是最简单的情况。

当strA[i] != strB[j]时,就要分情况讨论了:

1.删除strA[i],此时等价于要计算MED{ strA[0...i-1], strB[0...j] },显然,这就是C[i-1][j],此时C[i][j] = C[i-1][j] + cost_Del。

2.删除strB[j],此时等价于要计算MED{ strA[0...i], strB[0...j-1] },显然,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值