计算两个字符串相似度的LD算法
来源:互联网 发布:单片机交通灯设计报告 编辑:程序博客网 时间:2024/05/16 07:30
原理:LD算法计算两个字符串相似度,依据的是一个字符串变为另一个字符串时,最少需要编辑操作的次数,许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符,次数越少越相似。
计算LD(str1, str2)的过程:
①. 计算str1的长度len1, str2的长度len2, 若其中有一个长度为0, 则返回非0长度的值
②. 初始化一个二维数组d[ len1+1 ][ len2+1 ]用来计算两个字符串之间的距离,并初始化第一行,第一列的数据从0开始按照行列数自然增长
③. 循环比较str1中每个字符与str2中每个字符的关系,若str1[i]等于str2[j], 记eq=1, 否侧记eq=0, 计算d[i][j] = min(d[i][j-1]+1, d[i-1][j]+1, d[i-1][j-1]+eq)
④. 返回最后的结果d[len1][len2],其值最大为max(len1, len2), 时间复杂度为O(len1*len2)java代码实现
public static CalSimilarity{ //测试 public static void main(String args[]){ String str1="hello"; String str2="hello world"; System.out.println(str1 + " is " + calSimilar(str1, str2) + " similar to " + str2); } //计算编辑距离 public static int calDistance(String str1, String str2){ int len1 = str1.length(); int len2 = str2.length(); if(len1==0){ return len2; } if(len2==0){ return len1; } int d[][] = new int[len1+1][len2+1]; for(int i=0; i<=len1; i++){//初始化第一列 d[i][0] = i; } for(int j=0; j<=len2; j++){//初始化第一行 d[0][j] = j; } int eq = 0; char char1, char2; for(int i=1; i<=len1; i++){ char1 = str1.charAt(i-1); for(int j=1; j<=len2; j++){ char2 = str2.charAt(j-1); if(char1==char2||char1+32==char2||char1-32==char2){ eq = 0; }else{ eq = 1; } d[i][j] = Math.min(d[i-1][j-1]+eq, Math.min(d[i][j-1]+1, d[i-1][j]+1)); } } return d[len1][len2]; } //计算相似度 public static double calSimilar(String str1, String str2){ if(str1==null||str2==null||(str1.length()==0&&str2.length()==0){ return 0; } return 1 - calDistance(str1, str2)/Math.max(str1.length(), str2.length()); }}
0 0
- 计算两个字符串相似度的LD算法
- 计算两个字符串相似度的算法
- 编辑距离(LD)计算两个字符串相似度
- Levenshtein Distance(LD)-计算两字符串相似度算法
- LEVENSHTEIN DISTANCE(LD)-计算两字符串相似度算法
- Levenshtein Distance(LD)-计算两字符串相似度算法
- Levenshtein Distance(LD)-计算两字符串相似度算法
- Levenshtein Distance(LD)-计算两字符串相似度算法
- Levenshtein Distance + LCS 算法计算两个字符串的相似度
- 计算两个字符串的距离(相似度)
- C#计算两个字符串的相似度
- SQL的两个字符串的相似度的计算函数
- 编程之美3.3 计算两个字符串的相似度
- 计算两个字符串的相似度(递归和DP)
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 计算字符串的相似度
- 如何在面试中发现优秀程序员(转)
- 设计模式--浅谈适配器模式
- 【Hadoop】4、Hadoop安装之cloudera manager(2)
- tomcat均衡负载
- 黑马程序员——java基础之语法
- 计算两个字符串相似度的LD算法
- 什么是微信商城?如何开通?
- 低版本的ArcEngine项目升级到高版本的ArcEngine程序
- Google 镜像站搜集 (2015.10.3 更新)
- 抽象类理解
- 黑马程序员--【阳哥笔记】极速秒杀Java基础之笔记系列...阳哥笔记才是史上最强最全最详细的笔记
- 百度分享 ajax 加载 冲突
- 堆栈式摄像和背照式摄像头是什么?
- SpringMVC+Mybatis整合的增删改查