动态规划--编辑距离算法

设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。 对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。

 

对于每一个对应字符有三种解决方法案:

 

 

 

 

 

C++代码:

#include <iostream>
#include <string.h>
using namespace std;
int p[2000][2000] = {0};
int min(int a, int b, int c) {
    int cmin = a;
    if (cmin > b)
        cmin = b;
    if (cmin > c)cmin = c;

    return cmin;
}
int main() {
    char a[2000], b[2000];
    cin>>a;
    cin>>b;
    int c = strlen(a), d = strlen(b);
    for (int j = 1; j <= d; j++) {
        p[0][j] = j;
    }
    for (int i = 1; i <= c; i++) {
        p[i][0] = i;
    }
    for (int i = 1; i <= c; i++) {
        for (int j = 1; j <= d; j++) {
 
            if (a[i - 1] == b[j - 1])
                p[i][j] =min(p[i - 1][j]+1, p[i][j - 1]+1, p[i - 1][j - 1]) ;
            else
                p[i][j] =min(p[i - 1][j]+1, p[i][j - 1]+1, p[i - 1][j - 1]+ 1);
        }
    }
cout<<p[c][d];
    return 0;
}

 

posted @ 2019-10-18 20:53  吴伟源  阅读(347)  评论(0编辑  收藏  举报