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)是一门广告营销科学,以追求广告投放的收益最大化为目标,重点解决用户与广告匹配的相关性和广告的竞价模型问题,涉及到自然语 ...
随机推荐
- How to add libraries to “External Libraries” in WebStorm/PhpStorm/Intellij
Stack Overflow Questions Developer Jobs Tags Users Log In Sign Up Join Stack Overflow to learn, sh ...
- Easyui form 处理 Laravel 返回的 Json 数据
默认地,Easyui Form 请求的格式是 Html/Text,如果服务端 Laravel 返回的数据是 Json 格式,则应当在客户端进行解析.以下是 Easyui 官方文档的说明: Handle ...
- 类方法 isAssignableFrom、instanceof 和 asSubclass
类方法 isAssignableFrom.instanceof 和 asSubclass Spring 框架 CollectionFactory 的 asEnumType 方法使用 "类.a ...
- 如何使用tapd?
tapd 可以编写测试用例 测试计划等 敏捷开发常用的工具.稍后会更新..
- 一次HBase问题的解决过程(Status: INCONSISTENT)
==版本信息== HBase:2.7.1 Storm:1.0.1 RocketMQ:3.4.6(阿里版) ==问题描述== 2018年9月3号晚上23点左右,例行巡检系统运行状况时, 发现Storm消 ...
- 《完全版线段树》——notonlysuccess
转载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文 ...
- 为了记忆和方便翻阅 vue构建后的结构目录说明
一. ├── build // 项目构建(webpack)相关代码 记忆:(够贱) 9个 │ ├── build.js // 生产环 ...
- 2018.08.04 spoj TTM to the moon(主席树)
spoj传送门 vjudge传送门 主席树板子题. 支持历史版本的区间和,区间和,区间修改和时光倒流. 其中新奇一点的也只有区间修改了,这个东西直接标记永久化就行了. 如果想下传标记的话也行,需要在p ...
- composer 安装扩展失败的决绝方法
https://getyii.com/topic/32
- UVa 12230 && HDU 3232 Crossing Rivers (数学期望水题)
题意:你要从A到B去上班,然而这中间有n条河,距离为d.给定这n条河离A的距离p,长度L,和船的移动速度v,求从A到B的时间的数学期望. 并且假设出门前每条船的位置是随机的,如果不是在端点,方向也是不 ...