关闭

编辑距离问题

237人阅读 评论(0) 收藏 举报
分类:
#include "iostream"
#include "algorithm"
#include "fstream"
using namespace std;

/*
d[i,j] = 0   a[i] = b[j]
       = 1   a[i] != b[j]
D[i,j] = min{D[i-1][j-1]+d[i][j], D[i-1][j]+1, D[i][j-1]+1}
D[i][0] = i
D[0][j] = j
解释:
将a[i]改为b[j]需要d[i][j]次操作 D[i-1][j-1]+d[i][j]
a中删除a[i],需要1次操作  D[i-1][j]+1
a中插入b[j],需要1次操作  D[i][j-1]+1
*/

int D[100][100];

int min(int a, int b, int c)
{
    int temp = a<b? a:b;
    return temp<c? temp:c;
}

int change(char a[], char b[])
{
    int lena = strlen(a)-1; 
    int lenb = strlen(b)-1;

    for(int i=0; i<=lena; i++)
        D[i][0] = i;
    for(int j=0; j<=lenb; j++)
        D[0][j] = j;

    for(i=1; i<=lena; i++)
        for(j=1; j<=lenb; j++)
            D[i][j] = min(D[i-1][j-1]+ !(a[i]==b[j]), D[i-1][j]+1, D[i][j-1]+1); 
    return D[lena][lenb];
}

int main()
{
    ifstream fin("string.txt");
    char a[100];
    char b[100];
    cout << "输入字符串a:";
    fin >> a+1; cout << a+1;
    cout << "\n输入字符串b:";
    fin >> b+1; cout << b+1;
    cout << "\n编辑距离为:" << change(a, b) << endl;
    fin.close();
    return 0;
} 

这里写图片描述

0
0
查看评论

编辑距离问题

编辑距离问题 给定两个字符串S和T,对于T我们允许三种操作: (1) 在任意位置添加任意字符 (2) 删除存在的任意字符 (3) 修改任意字符  问最少操作多少次可以把字符串T变成S?  例如: S=  “ABC...
  • Mr_liubai
  • Mr_liubai
  • 2017-08-09 20:40
  • 86

算法导论 15-3 编辑距离

题目概述有六种操作,分别是复制(copy)、替换(replace)、删除(delete)、插入(insert)、交换(twiddle)、消灭(kill)。 将这六种操作任意组合(可以重复或者没有)得到一个操作序列。 操作序列的输入是一个字符串,操作的输出是另一个字符串。 例如字符串algori...
  • mishifangxiangdefeng
  • mishifangxiangdefeng
  • 2016-12-21 17:57
  • 812

算法_动态规划_编辑距离问题

问题描述 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符;(2)插入一个字符;(3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的2...
  • huangxiang360729
  • huangxiang360729
  • 2016-04-11 18:01
  • 414

算法导论-15-3-编辑距离

题目: 思考: (1)初始化: s[0,0]=0 s[i,0] = i * cost(delete) s[0,j] = j * cost[insert] (2)递推 (3)最后的操作kill c[i][j] = MIN(c[m,n], ...
  • mishifangxiangdefeng
  • mishifangxiangdefeng
  • 2012-08-30 16:07
  • 4493

编辑距离问题

描述 设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B 所用的最少字符操作数称为字符串A到B 的编辑距离,记为d(A,B)。试设计一个...
  • a997930294
  • a997930294
  • 2014-01-16 10:23
  • 789

最小编辑距离问题(Edition Distance)

注:这篇博客讨论的算法是怎样求解两个字符串的最小编辑距离,其目的是为了下一篇的虚拟DOM,来做一个预备工作,这里主要讨论的用LevenshteinDistanceLevenshtein Distance,主要通过的是动态规划。什么是最小编辑距离:给定一个长度为m和n的两个字符串,设有以下几种操作:替...
  • zp1996323
  • zp1996323
  • 2016-06-17 22:54
  • 1542

51Nod 1183 编辑距离(DP—编辑距离问题)

1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间...
  • zwj1452267376
  • zwj1452267376
  • 2016-04-19 22:03
  • 1163

最短编辑距离问题 : Levenshtein Distance

个人觉得只要你能明白edit数组的含义就可以理解状态转移方程了。/* 可以用来表示字符串的相似度? */ #include using namespace std; int edit[100][100] ;//edit(i,j)表示从 A的前i个字符 转化成 B的前j个字符所需的操作次数 int ...
  • qq_21063873
  • qq_21063873
  • 2016-10-29 21:02
  • 250

java--动态规划--编辑距离问题

编辑距离就是用来计算从原串(s)转换到目标串(t)所需要的最少的插入,删除和替换的数目
  • xd_ysl
  • xd_ysl
  • 2014-11-09 17:50
  • 574

[经典面试题]字符串编辑距离

题目给定一个源串和目标串,能够对源串进行如下操作: 1.在给定位置上插入一个字符 2.替换任意字符 3.删除任意字符 写一个程序,返回最小操作数,使得对源串进行这些操作后等于目标串,源串和目标串的长度都小于2000。思路如果有两个串 A = xabcdae 和 B = xfdfa,它们的第一...
  • SunnyYoona
  • SunnyYoona
  • 2015-02-16 17:54
  • 3313
    个人资料
    • 访问:396489次
    • 积分:12043
    • 等级:
    • 排名:第1469名
    • 原创:833篇
    • 转载:47篇
    • 译文:4篇
    • 评论:127条
    最新评论