- 浏览: 32678 次
最新评论
编辑距离问题
- 博客分类:
- 算法课
#include<iostream>
#include<string>
using namespace std;
#define MAX 1001
int nEditD[MAX][MAX];
void vInit(int nA,int nB);
void vGetEdit(string sA,string sB,int nA,int nB);
void vOut(int nA,int nB);
int min(int nA,int nB);
int get3Min(int nA,int nB,int nC);
int nDiff(char cA,char cB);
int main()
{
int nCase;
int nX,nY;
int i;
string sX,sY;
cin>>nCase;
for(i=1;i<=nCase;i++)
{
cin>>sX>>sY;
sX=" "+sX;
sY=" "+sY;
nX=sX.size()-1;
nY=sY.size()-1;
vInit(nX,nY);
vGetEdit(sX,sY,nX,nY);
vOut(nX,nY);
}
return 0;
}
void vInit(int nA,int nB)
{
int i,j;
for(i=0;i<=nA;i++)
{
nEditD[i][0]=i;
}
for(j=1;j<=nB;j++)
{
nEditD[0][j]=j;
}
}
void vGetEdit(string sA,string sB,int nA,int nB)
{
int i,j;
for(i=1;i<=nA;i++)
{
for(j=1;j<=nB;j++)
{
nEditD[i][j]=get3Min(nEditD[i-1][j]+1,nEditD[i][j-1]+1,nEditD[i-1][j-1]+nDiff(sA[i],sB[j])); }
}
}
void vOut(int nA,int nB)
{
cout<<nEditD[nA][nB]<<endl;
}
int min(int nA,int nB)
{
return (nA<nB?nA:nB);
}
int get3Min(int nA,int nB,int nC)
{
return(min(min(nA,nB),nC));
}
int nDiff(char cA,char cB)
{
return((cA==cB)?0:1);
}
#include<string>
using namespace std;
#define MAX 1001
int nEditD[MAX][MAX];
void vInit(int nA,int nB);
void vGetEdit(string sA,string sB,int nA,int nB);
void vOut(int nA,int nB);
int min(int nA,int nB);
int get3Min(int nA,int nB,int nC);
int nDiff(char cA,char cB);
int main()
{
int nCase;
int nX,nY;
int i;
string sX,sY;
cin>>nCase;
for(i=1;i<=nCase;i++)
{
cin>>sX>>sY;
sX=" "+sX;
sY=" "+sY;
nX=sX.size()-1;
nY=sY.size()-1;
vInit(nX,nY);
vGetEdit(sX,sY,nX,nY);
vOut(nX,nY);
}
return 0;
}
void vInit(int nA,int nB)
{
int i,j;
for(i=0;i<=nA;i++)
{
nEditD[i][0]=i;
}
for(j=1;j<=nB;j++)
{
nEditD[0][j]=j;
}
}
void vGetEdit(string sA,string sB,int nA,int nB)
{
int i,j;
for(i=1;i<=nA;i++)
{
for(j=1;j<=nB;j++)
{
nEditD[i][j]=get3Min(nEditD[i-1][j]+1,nEditD[i][j-1]+1,nEditD[i-1][j-1]+nDiff(sA[i],sB[j])); }
}
}
void vOut(int nA,int nB)
{
cout<<nEditD[nA][nB]<<endl;
}
int min(int nA,int nB)
{
return (nA<nB?nA:nB);
}
int get3Min(int nA,int nB,int nC)
{
return(min(min(nA,nB),nC));
}
int nDiff(char cA,char cB)
{
return((cA==cB)?0:1);
}
发表评论
-
最大子段和
2012-01-05 13:59 779给出N个数字, 计算出最大的子段和。 Input 第一行给 ... -
最长不下降子序列长度
2012-01-05 13:55 1308对于序列(1, 7, 3, 5, 9, 4,,有它的一些不下降 ... -
求两字符串匹配的最长子序列
2012-01-05 13:52 1015如果两种特征序列的公共子序列越长表示越接近,现在请你帮助计算出 ... -
Kruskal最小生成树
2011-12-08 14:26 699#include<iostream> #inclu ... -
prime
2011-12-01 20:09 612#include<iostream> using ... -
哈弗曼编码
2011-11-28 10:43 1#include<iostream> #defi ... -
哈弗曼编码
2011-11-28 10:42 520#include<iostream> #defi ... -
#贪心算法(零件加工)
2011-10-27 13:25 981#include<stdio.h> #includ ... -
众数问题
2011-10-20 14:57 789#include <stdio.h> #inclu ... -
输油管道问题
2011-10-13 14:45 598#include <stdio.h> #inclu ... -
幂的精确求值
2011-09-22 15:07 461#include<iostream> using ... -
大数加法
2011-09-22 12:56 606#include<iostream> #incl ... -
三姐妹之出题
2011-09-15 14:15 663#include<iostream> #incl ... -
最大子段和问题(分治)(##)
2011-09-08 21:31 665#include<stdio.h> #defin ... -
最大子段和问题(O(N^2))
2011-09-08 15:04 610#include<stdio.h> int a[ ... -
最大子段和问题(O(N^3))
2011-09-08 14:45 476#include<stdio.h> int a[ ...
相关推荐
详细说明:此算法也是非常常用的算法之一,在这个算法中我们特别要明白编辑距离问题的实质所在.
编辑距离问题-算法导论.pdf
动态规划之编辑距离问题
Problem A:编辑距离问题 Description 设A 和B 是2 个字符串。要用最少的字符操作将字符串A 转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将...
将字符串A变换为字符串B 所用的最少字符操作数称为字符串A到B 的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的2 个字符串A和B,计算出它们的编辑距离d(A,B)。 编程任务: 对于给定的字符串A和字符串B,编程...
将字符串A变换为字符串B 所用的最少字符操作数称为字符串A到B 的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的2 个字符串A和B,计算出它们的编辑距离d(A,B)。 编程任务: 对于给定的字符串A和字符串B,编程...
利用动态规划算法解决编辑距离,在度量空间中有编辑距离这一个概念,通常利用动态规划等算法进行解决
本题提出了一些关于将字符串x[1..m]转换成y[1..n]的操作。这些操作有复制、替代、删除、插入、互换和终止。这些操作所需的开销是不同的,但每个操作的开销都可以看是一个我们已经的常量,我们假设复制和替代这类操作...
实现3-2编辑距离问题.cpp
用动态规划法解决最短编辑距离问题的完整代码,可以直接运行,有注释。
利用C++实现编辑距离问题,通过input.txt文件输入数据,最终的结果输出到output.txt文件中,对编辑距离问题有较好的理解
最长上升子序列 编辑距离问题、货物堆积问题、骑士周游问题、数组分割问题、资源分配问题、最长上升子序列问题
设A和B是2个字符串.要用最少的字符操作将字符串A转换为字符...将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B).试设计一个有效算法,对任给的2个字符串A和B,计算出他们的编辑距离d(A,B)
设A 和B 是2 个字符串。要用最少的字符操作将...将字符串A变换为字符串B 所用的最少字符操作数称为字符串A到B 的编辑距离,记为 d(A,B)。试设计一个有效算法,对任给的2 个字符串A和B,计算出它们的编辑距离d(A,B)。
用java实现的一个编辑距离算法小例子,实现:你是不是要找XXX功能
1.插入操作 2.删除操作 2.删除操作
字符串的编辑距离,又称为levenshtein距离,是指利用字符操作,把字符串A转换成字符串B所需要的最少操作数,这里的操作包括删除、插入、修改。
用的python 直接pycharm打开就能用
求X和Y的最长公共子序列长度以及最长公共子序列 2 对于给定的字符串A和字符串B,编程计算其编辑距离d(A,B)。 随机产生20以上的字符,放入输入文件input.txt,如:X={A,B,C,B,D,A,B}和Y={B,D,C,A,B,A}。 程序运行结束...