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;
}