编辑距离算法的实现
来源:互联网 发布:淘宝淘宝客服岗位职责 编辑:程序博客网 时间:2024/05/01 07:34
编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。
例如将kitten一字转成sitting:
sitten (k→s)
sittin (e→i)
sitting (→g)
比如要计算cafe和coffee的编辑距离。cafe→caffe→coffe→coffee
先创建一个6×8的表(cafe长度为4,coffee长度为6,各加2)
(1):
coffee c a f e 表1接着,在如下位置填入数字(表2):
coffee 0123456c1 a2 f3 e4 表2从3,3格开始,开始计算。取以下三个值的最小值:
- 如果最上方的字符等于最左方的字符,则为左上方的数字。否则为左上方的数字+1。(对于3,3来说为0)
- 左方数字+1(对于3,3格来说为2)
- 上方数字+1(对于3,3格来说为2)
因此为格3,3为0(表3)
coffee 0123456c10 a2 f3 e4 表3
循环操作,推出下表
coffee 0123456c1012345a2112345f3221234e4332223取右下角,得编辑距离为3
代码实现如下:
import java.util.Scanner;import java.util.regex.Pattern;public class Test{public static void main(String[] args) {Scanner input=new Scanner(System.in);String s1=input.nextLine();String s2=input.nextLine();compare(s1,s2);input.close();}public static void compare(String s1,String s2){int m=s1.length();int n=s2.length();int c[][]=new int[m+1][n+1];for(int i=0;i<m+1;i++){c[0][i]=i;}for(int j=0;j<n+1;j++){c[j][0]=j;}for(int i=1;i<m+1;i++){for(int j=1;j<n+1;j++){if(s1.charAt(i-1)==s2.charAt(j-1)){c[i][j]=min(c[i-1][j]+1,c[i][j-1]+1,c[i-1][j-1]);}else{c[i][j]=min(c[i-1][j]+1,c[i][j-1]+1,c[i-1][j-1]+1);}}}System.out.println("****");for(int i=0;i<m+1;i++){for(int j=0;j<n+1;j++){System.out.print(c[i][j]+" ");}System.out.println("");}System.out.println("****");}public static int min(int a,int b,int c){return a<b?(a<c?a:c):(b>c?c:b);}}
0 0
- 编辑距离算法的实现
- 编辑距离算法实现
- 编辑距离算法的java实现
- 编辑距离(LD)算法的python实现
- 相似度的算法(编辑距离法)(Java实现代码)
- 计算编辑距离的算法
- LD 算法实现(编辑距离算法)
- LD 算法实现(编辑距离算法)
- 编辑距离的Ruby实现
- 编辑距离的php实现
- 字符串的编辑距离和编辑距离算法
- Levenshtein distance最小编辑距离算法实现
- 最小编辑距离算法JAVA实现
- Levenshtein distance最小编辑距离算法实现
- Levenshtein distance最小编辑距离算法实现
- 经典算法求字符串的编辑距离
- 编辑距离与编辑算法
- 编辑距离及编辑距离算法
- (java)RSA/ECB/PKCS1Padding算法加密和解密
- 剑指Offer:顺时针打印矩阵
- Retrofit源码简要分析
- window系统安装java
- c# 执行CMD命令
- 编辑距离算法的实现
- Java重写和重载
- Datatables的初始化配置
- 【USACO OPEN12铜组】解开积木块
- iOS开发动态计算cell高度或UILabel多行文本计算高度、宽度的技巧
- 字符串中的反斜杠(\)替换成(\\)
- three.js绕边缘旋转
- HDU 5613 Baby Ming and Binary image(枚举)
- Poj 1182 食物链【带权并查集】