距离编辑算法

原创 2016年06月01日 19:41:47

java实现距离编辑算法,测试两个英文单词经最少次改变成为另一单词


import java.util.Scanner;



/**
 * 
 * @author my
 *距离编辑算法
 */


/**
 * 
 * 伪代码:
 * i from  0 to length of str1 +1
 *   matrix[0][i]=i
 * j from 0 to length of str2 +1
 *   matrix[j][0]=j
 * 
 * i from 1 to length of str1 +1
 *   j from 1 to length of str2 +1
 *     if str1[i]=str2[j]
 *        d =0
 *     else
 *        d =1
 *     matrix[i][j]=min(min(matrix[i][j-1]+1,matrix[i-1][j]+1),matrix[i-1][j-1]+d)
 * print matrix
 * return matrix[str1.length][str2.length]
 */


public class Levenshtein {
//找出两个数中最小数
public static int min(int firstNum,int secondNum){
return firstNum = firstNum<=
secondNum? firstNum:secondNum;
}

// i/o输入函数
public static void input(String firstStr,String secondStr){
System.out.println("输入两个字符串:");
Scanner in = new Scanner(System.in);
firstStr = in.next();
secondStr = in.next();
in.close();
}

//edit function to calculate distance
public static int edit(String firstStr,String secondStr,int[][]matrix){
//初始化
int len1 = firstStr.length()+1;
int len2 = secondStr.length()+1;
int i =0,j=0;

for(j=0;j<len1;j++){
matrix[j][0]=j;
}

for(i=0;i<len2;i++){
matrix[0][i]=i;
}
//填充matrix
for(i=1;i<len1;i++){
for(j=1;j<len2;j++){
int d = 0;
if(firstStr.charAt(i-1)!=secondStr.charAt(j-1))
d =1;
matrix[i][j]=min(min(matrix[i-1][j]+1,
matrix[i][j-1]+1),matrix[i-1][j-1]+d);
}
}

return matrix[len1-1][len2-1];

}

//打印函数
public static void print(int[][] matrix,int len1,int len2){
for(int i=0;i<len1;i++){
System.out.println();
for(int j=0;j<len2;j++){
System.out.print(" "+matrix[i][j]);
}
}
}

public static void main(String[] args){
String firstStr="";
String secondStr="";

System.out.println("输入两个字符串:");
Scanner in = new Scanner(System.in);
firstStr = in.next();
secondStr = in.next();
in.close();

int len1 = firstStr.length()+1;
int len2 = secondStr.length()+1;
int[][] matrix = new int[len1][len2];
   int dis = edit(firstStr,secondStr,matrix);
   
   print(matrix,len1,len2);
   System.out.println();
System.out.println("distance: "+dis);
}


}


结果:

输入两个字符串:
setting gettin


 0 1 2 3 4 5 6
 1 1 2 3 4 5 6
 2 2 1 2 3 4 5
 3 3 2 1 2 3 4
 4 4 3 2 1 2 3
 5 5 4 3 2 1 2
 6 6 5 4 3 2 1
 7 6 6 5 4 3 2


distance: 2

相关文章推荐

基于编辑距离的拼写矫正算法

  • 2014年06月16日 00:16
  • 917KB
  • 下载

编辑距离问题算法分析

  • 2013年04月24日 18:33
  • 17KB
  • 下载

编辑距离(Edit Distance)的动态规划算法

编辑距离是衡量两个字符串S和T相似程度的一种度量方法。 编辑距离定义:将字符串S通过插入、删除、替换三种编辑操作,转变为字符串T,所需最少的编辑次数。 计算编辑距离的问题,符合动态规划的几个特...

《算法导论》15-3:编辑距离

(1)初始化: cost[i][0] = deleteCost * i cost[0][j] = insertCost * i(2)递推公式: (3)kill操作 public class...

高效比对,返回最短编辑距离算法匹配度最高的数据

#region 高效比对返回匹配度最高的数据 /// /// 高效比对返回匹配度最高的数据 /// /// 源数据 ...

算法_动态规划_编辑距离问题

问题描述 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符;(2)插入一个字符;(3)将一个字符改为另一个字符。 将字符串A变换为字符...

【算法】旋转数组最小值、零子数组、LCS、LIS、字符串编辑距离

旋转数组最小值、零子数组、LCS、LIS、字符串编辑距离 一、旋转数组最小值 假定一个排序数组以某个未知元素为支点做了旋转,如:原数组0 1 2 4 5 6 7旋转后得到4 5 6 7...
  • scecit
  • scecit
  • 2015年04月18日 23:02
  • 618

多校第三场:hdu(4323:编辑距离算法)

题意:n个串中有多少个能在规定的步数之内变成B字符串。 解法:编辑距离+枚举 编辑距离:http://blog.sina.com.cn/s/blog_6473891f0100grx6.html ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:距离编辑算法
举报原因:
原因补充:

(最多只允许输入30个字)