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

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

}

原文地址:https://www.cnblogs.com/wwywy/p/11700729.html

时间: 2024-11-04 00:45:34

动态规划--编辑距离算法的相关文章

由LCS到编辑距离—动态规划入门—算法学习笔记

一切计算机问题,解决方法可以归结为两类:分治和封装.分治是减层,封装是加层. 动态规划问题同样可以用这种思路,分治. 它可以划分为多个子问题解决,那这样是不是用简单的递归就完成了?也许是的,但是这样会涉及太多的不便的操作.因为子问题有重叠! 针对这种子问题有重叠的情况的解决,就是提高效率的关键. 所以动态规划问题可以总结为:最优子结构和重叠子问题. 解决这个子问题的方式的关键就是:memoization,备忘录. 动态规划算法分以下4个步骤: 描述最优解的结构 递归定义最优解的值 按自底向上的方

最短编辑距离算法

一般情况下,电商在当客户输入一个不存在的商品时,会返回客户一个与客户输入最为接近的商品,并加以提示"您是不是在找XXX?".这其中用到了一种算法,叫做"最短编辑距离算法",能在一大堆已存在的字符串中找到与原字符串最为接近的那个字符串,称之为最短编辑距离. 这种算法是基于动态规划思想,下面是算法的思路描述: 描述: 设A和B是2个字符串.要用最少的字符操作将字符串A转换为字符串B.这里所说的字符操作包括: (1)删除一个字符; (2)插入一个字符: (3)将一个字符改

编辑距离算法(Levenshtein)

编辑距离定义: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数. 许可的编辑操作包括:将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将eeba转变成abac: eba(删除第一个e) aba(将剩下的e替换成a) abac(在末尾插入c) 所以eeba和abac的编辑距离就是3 俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念. 算法: 算法就是简单的线性动态规划(最长上升子序列就属于线性动态规划).

Levenshein distance最小编辑距离算法实现

Levenshein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距离,有下列的公式. 其中d[i-1,j]+1代表字符串s2插入一个字母,d[i,j-1]+1代表字符串s1删除一个字母,然后当xi=yj时,不需要代价,所以和上一步d[i-1,j-1]代价相同,否则+1,接着d[i,j]是以上三者中最小的一项. 算法实现(Python): 假设两个字符串分别为s1,

编辑距离算法

编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 算法思想:动态规划经常被用来作为这个问题的解决手段. 首先需要定义这样一个函数——edit(i, j),它表示第一个字符串的

C#实现Levenshtein distance最小编辑距离算法

Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距离,有下列的公式. 其中d[i-1,j]+1代表字符串s2插入一个字母才与s1相同,d[i,j-1]+1代表字符串s1删除一个字母才与s2相同,然后当xi=yj时,不需要代价,所以和上一步d[i-1,j-1]代价相同,否则+1,接着d[i,j]是以上三者中最小的一项. 算法实现(C#): 假设两个

编辑距离及编辑距离算法 (一)摘自http://www.cnblogs.com/biyeymyhjob/archive/2012/09/28/2707343.html

编辑距离及编辑距离算法 编辑距离概念描述: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念. 问题:找出字符串的编辑距离,即把一个字符串s1最少经过多少步操作变成编程字符串

java文本相似度计算(Levenshtein Distance算法(中文翻译:编辑距离算法))----代码和详解

算法代码实现: package com.util; public class SimFeatureUtil { private static int min(int one, int two, int three) { int min = one; if (two < min) { min = two; } if (three < min) { min = three; } return min; } public static int ld(String str1, String str2)

最短编辑距离算法(字符串比较)

一.编辑距离 1.从字符串a变为字符串b所需要的元操作有3种: 增加一个字符 删除一个字符 变化一个字符 2.编辑距离:从字符串a变为b所需要的最少操作步骤. 二.最短编辑距离(动态规划) 首先定义一个函数--step(i, j),它表示第一个字符串的长度为i的子串到第二个字符串的长度为j的子串的编辑距离. 显然可以有如下动态规划公式: if i == 0 且 j == 0,step(i, j) = 0 if i == 0 且 j > 0,step(i, j) = j if i > 0 且j