LD算法的C++实现(基于编辑距离的文本比较算法)
算法看这里:
http://www.cnblogs.com/grenet/archive/2010/06/01/1748448.html
用数组实现:
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std; //LD算法(Levenshtein Distance)又成为编辑距离算法(Edit Distance)。他是以字符串A通过插入字符、删除字符、替换字符变成另一个字符串B,那么操作的过程的次数表示两个字符串的差异。 void cal(int count[][], char s1[], char s2[], int i, int j){ //注意这里:传入二维数组时,最低维必须指定维数!!
if(s1[i]==s2[j]){
count[i][j] = count[i-][j-];
}
else {
int min = count[i-][j-]<count[i-][j] ? count[i-][j-] : count[i-][j];
min = min<count[i][j-] ? min : count[i][j-];
count[i][j] = min+;
}
//cout<<sizeof(count)<<endl; //输出貌似还是4 这就是一个指针的大小了吧?
} int LD(char s1[], char s2[], int len1, int len2){
int i,j; //cout<<strlen(s1)<<strlen(s2)<<endl; //可以得到正确的长度
//cout<<sizeof(s1)<<sizeof(s2)<<endl; //输出一直是4!可能是因为变成了指针?
//cout<<sizeof(s1[0])<<sizeof(s2[0])<<endl;
//cout<<len1<<len2<<endl;
//cout<<s1[0]<<s2[0]<<endl;
//cout<<s1<<s2<<endl;
int count[][]; //声明数组!维数不能是变量!
//int count[len1+1][len2+1]; //这样编译不通过!
for(i=; i<len2+; i++){
count[][i] = i;
}
for(i=;i<len1+;i++){
count[i][] = i;
} for(i=; i<len1+;i++){
for(j=; j<len2+; j++){
cal(count,s1,s2,i,j);
}
}
for(i=;i<len1+;i++){
for(j=;j<len2+;j++){
cout<<count[i][j]<<" ";
}
cout<<endl;
}
return count[len1][len2];
} int main(){ char s1[]; //= "ABSDFADFSF";
char s2[];// = "ASFDSGGGHFH";
while(scanf("%s%s",s1,s2)!=EOF){
int len1 = strlen(s1);
int len2 = strlen(s2);
int result = LD(s1,s2,len1,len2);
cout<<result<<endl;
}
return ; }
LD算法的C++实现(基于编辑距离的文本比较算法)的更多相关文章
- Tone Mapping算法系列一:基于Fast Bilateral Filtering 算法的 High-Dynamic Range(HDR) 图像显示技术。
一.引言 本人初次接触HDR方面的知识,有描述不正确的地方烦请见谅. 为方便文章描述,引用部分百度中的文章对HDR图像进行简单的描述. 高动态范围图像(High-Dynamic Range,简称HDR ...
- 文本比较算法Ⅱ——Needleman/Wunsch算法
在"文本比较算法Ⅰ--LD算法"中介绍了基于编辑距离的文本比较算法--LD算法. 本文介绍基于最长公共子串的文本比较算法--Needleman/Wunsch算法. 还是以实例说明: ...
- JavaScript基于时间的动画算法
转自:https://segmentfault.com/a/1190000002416071 前言 前段时间无聊或有聊地做了几个移动端的HTML5游戏.放在不同的移动端平台上进行测试后有了诡异的发现, ...
- 简单易学的机器学习算法—基于密度的聚类算法DBSCAN
简单易学的机器学习算法-基于密度的聚类算法DBSCAN 一.基于密度的聚类算法的概述 我想了解下基于密度的聚类算法,熟悉下基于密度的聚类算法与基于距离的聚类算法,如K-Means算法之间的区别. ...
- 简单易学的机器学习算法——基于密度的聚类算法DBSCAN
一.基于密度的聚类算法的概述 最近在Science上的一篇基于密度的聚类算法<Clustering by fast search and find of density peaks> ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 数学软件 之 基于MATLAB的DFP算法
DFP算法是本科数学系中最优化方法的知识,也是无约束最优化方法中非常重要的两个拟Newton算法之一,上一周写了一周的数学软件课程论文,姑且将DFP算法的实现细节贴出来分享给学弟学妹参考吧,由于博客不 ...
- 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind
最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...
- 基于MapReduce的SimRank++算法研究与实现
一.算法应用背景 计算广告学(Computational Advertising)是一门广告营销科学,以追求广告投放的收益最大化为目标,重点解决用户与广告匹配的相关性和广告的竞价模型问题,涉及到自然语 ...
随机推荐
- 35-面试:如何找出字符串的字典序全排列的第N种
http://www.cnblogs.com/byrhuangqiang/p/3994499.html
- spring配置数据库连接池druid
连接池原理 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象.使用完毕后,用户也并非将连 ...
- Linux CentOS6.6 NFS服务的配置与安装
一.简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客 ...
- C盘满了如何清理
一.C:\inetpub\logs\LogFiles\ 中的日志文件可以全部删除二.C盘上右键>属性>磁盘清理 和 系统磁盘清理三.百度下载:魔方清理大师>逐项清理四.卸载较大的不常 ...
- 使用threejs点云秀出酷炫的图片效果(一)
来源:http://blog.csdn.net/srk19960903/article/details/70214556 使用了点云拼凑出了照片轮播十分有趣,于是用threejs实现这个效果. 首先这 ...
- 数据库日志文件——数据库“xxx”的事务日志已满,原因为“LOG_BACKUP”
治标的方案: 参考网址:http://blog.csdn.net/tianlianchao1982/article/details/7388616 http://bbs.51cto.com/threa ...
- Oracle 基础表查询
--查询所有用户表的数据 SELECT * FROM ALL_TABLES WHERE OWNER='USER_NAME' --如果是用该用户登录使用以下语句: SELECT * FROM USER_ ...
- DNA拷贝数变异CNV检测——基础概念篇
DNA拷贝数变异CNV检测——基础概念篇 一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...
- URL编码转换函数:escape()、encodeURI()、encodeURIComponent()
函数出现时间: escape() javascript 1.0 ...
- Fibonacci number
https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...