字符串间最短距离(动态规划)

本文介绍了如何使用动态规划解决Minimum Edit Distance问题,即计算两个不同字符串变得相同的最小操作次数。通过定义字符修改、增加和删除三种操作,将字符串间的距离转化为相似度。通过递归思想,将问题分解为规模更小的子问题,最终给出示例代码实现。

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

Minimum Edit Distance 问题

对于不同的字符串,判断其相似度。
定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:
  1.修改一个字符(如把“a”替换为“b”)
  2.增加一个字符(如把“abdd”变为“aebdd”)
  3.删除一个字符(如把“travelling”变为“traveling”)
   定义:把这个操作所需要的最少次数定义为两个字符串的距离,而相似度等于“距离+1”的倒数
采用递归的思想将问题转化成规模较小的同样的问题。
u 如果两个串的第一个字符相同,如A=xabcdae和B=xfdfa,只要计算
A[2,…,7]=abcdae和B[2,…,5]=fdfa的距离就可以了。
u 如果两个串的第一个字符不相同,那么可以进行如下的操作:
1.删除A串的第一个字符,然后计算A[2,…,lenA]和B[1,…,lenB]的距离。
2.删除B串的第一个字符,然后计算A[1,…,lenA]和B[2,…,lenB]的距离。
3.修改A串的第一个字符为B串的第一个字符,然后计算A[2,…,lenA]和
B[2,…,lenB]的距离。
4.修改B串的第一个字符为A串的第一个字符,然后计算A[2,…,lenA]和
B[2,…,lenB]的距离。
5.增加B串的第一个字符到A串的第一个字符之前,然后计算
A[1,…,lenA]和B[2,…,lenB]的距离。
6.增加A串的第一个字符到B串的第一个字符之前,然后计算
A[2,…,lenA]和B[1,…,lenB]的距离。
  
我们并不在乎两个字符串变得相等之后的字符串是怎样的。
可以将上面6个操作合并为:
1.一步操作之后,再将A[2,…,lenA]和B[1,…,lenB]变成相同字符串。
2.一步操作之后,再将A[1,…,lenA]和B[2,…,lenB]变成相同字符串。
3.一步操作之后,再将A[2,…,lenA]和B[2,…,lenB]变成相同字符串。

示例代码如下:

#include <iostream>
#include<string.h>

using namespace std;

int Minvalue(int x,int y,int z)
{
    int Min=x;
    if(y<Min)
    {
        Min=y;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值