1. 字符串编辑距离定义
定义:字符串编辑距离指的是字符串s1变为s2最少需要多少次替换,插入,删除操作。
Ed(s1,s2) = minimum # of operations (insertion, deletion,substitution) to change s1 to s2
Example:
s1: Tom Hanks
s2: Ton Hank
ed(s1, s2) = 2
2. 字符串编辑距离求解
动态规划求解,时间复杂度O(mn)
A = a1 a2...am
B = b1 b2...bn
Di,j = edit distance of a1 a2 ... ai and b1 b2... bj.
Di,0 = i, 0<=i <= m
D0,j = j, 0 <= j<= n
Di,j = min{Di-1, j + 1,
Di, j-1 + 1,
Di-1, j-1 + ti, j}, 1 <= i <=m, 1 <=j <= n
where ti, j = 0 if ai = bj and ti, j = 1 if ai != bj.
2. 源程序
int getMin(int a, int b, int c)
{
int min1 = (a<=b)?a:b;
int min2 =(min1<=c)?min1:c;
return min2;
}
int getED(const char*str1, const char*str2) {
int m = strlen(str1);
int n = strlen(str2);
int **dis = new int*[m+1];
for(int i=0; i<m+1; i++) {
dis[i] = new int[n+1];
}
for(int i=0; i<=m; i++) {
dis[i][0]=i;
}
for(int j=0; j<=n; j++) {
dis[0][j]=j;
}
for(int i=1; i<=m; i++) {
for(int j=1; j<=n; j++) {
int tij=(str1[i-1]==str2[j-1])?0:1;
dis[i][j] = getMin(dis[i-1][j]+1, dis[i][j-1]+1, dis[i-1][j-1]+tij);
}
}
return dis[m][n];
}
分享到:
相关推荐
动态规划 编辑距离 可以用来判别字符串的差异
C#,字符串相似度的莱文斯坦距离(Levenshtein Distance)算法与源代码 莱文斯坦距离(Levenshtein Distance)用于衡量两个字符串之间的相似度。 莱文斯坦距离以俄国科学家(Vladimir I. Levenshtein)命名,他于...
EditDistance 用C++实现,字符串用链表保存,可以输出到控制台,也可以输出到文件
输入任意两个字符串,计算它们的编辑距离。 编辑距离是指两个字符串之间,由一个转换为另一个所需的最少编辑操作次数。许可的编辑操作包括字符的替换、插入和删除。
设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; ...对于给定的字符串A和字符串B,编程计算其编辑距离d(A,B)。
1.字符串操作演示(Visual C++编程 源代码)1.字符串操作演示(Visual C++编程 源代码)1.字符串操作演示(Visual C++编程 源代码)1.字符串操作演示(Visual C++编程 源代码)1.字符串操作演示(Visual C++编程 源...
一个简单的字符串Edit Distance C#程序
试验题目:近似字符串匹配问题计算两个字符串s1+ch1, s2+ch2的编辑距离有这样的性质: 1. d(s1,””) = d(“”,s1) = |s1| d(“ch1”,”ch2”) = ch1 == ch2 ? 0 : 1; 2. d(s1+ch1,s2+ch2) = min( d(s1,s2)+ ch1==...
3.如何旋转显示字符串?(Visual C++编程 源代码)3.如何旋转显示字符串?(Visual C++编程 源代码)3.如何旋转显示字符串?(Visual C++编程 源代码)3.如何旋转显示字符串?(Visual C++编程 源代码)3.如何旋转...
算法-动态规划- 线性 DP- 字符串编辑距离(包含源程序).rar
2.如何折行显示字符串?(Visual C++编程 源代码)2.如何折行显示字符串?(Visual C++编程 源代码)2.如何折行显示字符串?(Visual C++编程 源代码)2.如何折行显示字符串?(Visual C++编程 源代码)2.如何折行...
4.如何显示星期月份字符串?(Visual C++编程 源代码)4.如何显示星期月份字符串?(Visual C++编程 源代码)4.如何显示星期月份字符串?(Visual C++编程 源代码)4.如何显示星期月份字符串?(Visual C++编程 源...
题目描述:对于长度相同的2个字符串A和B,其距离定义为相应位置字符距离之和。2个非空格字符的距离是它们的ASCII码之差的绝对值;空格与空格的距离为0,空格与其他字符的距离为一个定值k。在一般情况下,字符串A和B...
计算两个字符串的编辑距离 -- 快速算法
5.如果显示包括制表符的字符串?(Visual C++编程 源代码)5.如果显示包括制表符的字符串?(Visual C++编程 源代码)5.如果显示包括制表符的字符串?(Visual C++编程 源代码)5.如果显示包括制表符的字符串?...
VC实现字符串编辑距离计算,距离计算分为变换、删除、插入三种。
Levenshtein:快速计算编辑距离以及字符串的相似度
编辑距离算法,比较字符串相似度 pb11.5版本
6.如何使用BIG5显示一个字符串?(Visual C++编程 源代码)6.如何使用BIG5显示一个字符串?(Visual C++编程 源代码)6.如何使用BIG5显示一个字符串?(Visual C++编程 源代码)6.如何使用BIG5显示一个字符串?...
Visual C++源代码 138 如何解析SQL Server连接字符串信息Visual C++源代码 138 如何解析SQL Server连接字符串信息Visual C++源代码 138 如何解析SQL Server连接字符串信息Visual C++源代码 138 如何解析SQL Server...