Levenshtein距离
来源:互联网 发布:哪里有卖淘宝店铺出售 编辑:程序博客网 时间:2024/06/05 18:49
显然可以有如下动态规划公式:
- if i == 0 且 j == 0,edit(i, j) = 0
- if i == 0 且 j > 0,edit(i, j) = j
- if i > 0 且j == 0,edit(i, j) = i
- if i ≥ 1 且 j ≥ 1 ,edit(i, j) == min{ edit(i-1, j) + 1, edit(i, j-1) + 1, edit(i-1, j-1) + f(i, j) },当第一个字符串的第i个字符不等于第二个字符串的第j个字符时,f(i, j) = 1;否则,f(i, j) = 0。
#include <iostream>
#include <string>
using namespace std;
int min(int a, int b)
{
return a < b ? a : b;
}
int edit(string str1, string str2)
{
int max1 = str1.size();
int max2 = str2.size();
int **ptr = new int*[max1 + 1];
for(int i = 0; i < max1 + 1 ;i++)
{
ptr[i] = new int[max2 + 1];
}
for(int i = 0 ;i < max1 + 1 ;i++)
{
ptr[i][0] = i;
}
for(int i = 0 ;i < max2 + 1;i++)
{
ptr[0][i] = i;
}
for(int i = 1 ;i < max1 + 1 ;i++)
{
for(int j = 1 ;j< max2 + 1; j++)
{
int d;
int temp = min(ptr[i-1][j] + 1, ptr[i][j-1] + 1);
if(str1[i-1] == str2[j-1])
{
d = 0 ;
}
else
{
d = 1 ;
}
ptr[i][j] = min(temp, ptr[i-1][j-1] + d);
}
}
cout << "**************************" << endl;
for(int i = 0 ;i < max1 + 1 ;i++)
{
for(int j = 0; j< max2 + 1; j++)
{
cout << ptr[i][j] << " " ;
}
cout << endl;
}
cout << "**************************" << endl;
int dis = ptr[max1][max2];
for(int i = 0; i < max1 + 1; i++)
{
delete[] ptr[i];
ptr[i] = NULL;
}
delete[] ptr;
ptr = NULL;
return dis;
}
int main(void)
{
string str1 = "sailn";
string str2 = "failing";
int r = edit(str1, str2);
cout << "the dis is : " << r << endl;
return 0;
}
- Levenshtein距离
- 编辑距离-Levenshtein距离
- Levenshtein 距离算法
- 编辑距离(levenshtein)算法
- Levenshtein距离算法详解
- 编辑距离Levenshtein
- Levenshtein距离,Edit Distance
- Levenshtein(编辑) 距离
- Levenshtein编辑距离
- Levenshtein距离(编辑距离)
- Levenshtein 距离(字符串距离)
- 编辑距离(Levenshtein Distance)
- 编辑距离算法 Levenshtein Distance
- 编辑距离(Levenshtein Distance)
- Levenshtein Distance(编辑距离)
- 终于搞定了Levenshtein距离
- mysql 编辑距离levenshtein函数
- Levenshtein距离及其python实现
- 暑假进行中,来说说
- 极客头条---人人都是主编(下)
- 在pycharm中运行代码时提示错误信息 “ValueError: need more than 1 value to unpack”处理方法
- css与js动画对比:谁更快?
- Mac技巧(网页积累)
- Levenshtein距离
- 试卷批分
- A题之NowCoder数列
- Matlab中读取txt文件的几种方法
- C++中各种类型修饰符汇总
- 暴走仿微信底部菜单HTML代码
- Spring注解详解
- Matlab常用函数--gradient
- maven项目配置文件路径的修改