距离编辑算法

原创 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

Levenshtein distance最小编辑距离算法实现

Levenshein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致。该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑距...
  • xanxus46
  • xanxus46
  • 2014年08月19日 21:11
  • 12978

bk树:编辑距离算法

算法出处:Matrix67大神,http://www.matrix67.com/blog/?s=bk%E6%A0%91背景 除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还...
  • nisxiya
  • nisxiya
  • 2015年07月29日 00:51
  • 1035

动态规划---最短编辑距离

描述: 设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括: (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变...
  • sdjzping
  • sdjzping
  • 2013年10月17日 21:04
  • 3624

网络层—距离矢量算法

本文主要介绍距离矢量路由(distance vector routing)算法,也可以叫做Bellman-Ford路由算法(这是根据设计者的名字来命名的),该算法应用于很多网络协议中,例如著名的RIP...
  • nineteen_
  • nineteen_
  • 2015年12月28日 15:35
  • 1664

最短编辑距离算法(字符串比较)

一、编辑距离 1、从字符串a变为字符串b所需要的元操作有3种: 增加一个字符删除一个字符变化一个字符 2、编辑距离:从字符串a变为b所需要的最少操作步骤。 二、最短编辑距离(动态规划) 首先定义...
  • wuxian90
  • wuxian90
  • 2015年06月09日 13:22
  • 1301

计算机网络1-距离矢量路由算法模拟

距离矢量路由算法实验 一、实验要求   网络拓扑图   实验过程描述 1、将上面的网络拓扑图保存待用 例如,可用二维数组保存,数组下标或索引可隐含表示网络节点。数组元素保存网络拓扑图边上的权值 2、...
  • bobo1356
  • bobo1356
  • 2016年06月16日 23:42
  • 1798

算法之常用的距离和相似度度量

在数据分析和数据挖掘的过程中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如K最近邻(KNN)和K均值(K-Means)。...
  • zxh19800626
  • zxh19800626
  • 2015年12月05日 23:46
  • 637

距离矢量路由算法

现代计算机网络通常使用动态路由算法,因为这类算法能够适应网络的拓扑和流量变化,其中最流行的两种动态路由算法是“距离矢量路由算法”和“链路状态路由算法”。     距离矢量路由算法(Distance ...
  • u013007900
  • u013007900
  • 2015年05月07日 19:23
  • 3825

一种快速求点到线段距离的算法

    点到直线的距离可以直接做垂线求取,但线段是有首尾点的,若要求距离则要考虑首尾点。    点和线段的关系大致可以有下面几种:      有特殊情况,是P点和A或B重合,否则,根据∠PAB或∠PB...
  • yjukh
  • yjukh
  • 2010年01月19日 16:04
  • 8586

编辑距离算法(java)

package editDistance; /** * 编辑距离(删除,添加,替换 得到相等字符串所需次数)算法 * s = "eeba", t="abac" * 使用一个二维数组记录所需编辑次...
  • Yan456jie
  • Yan456jie
  • 2016年09月02日 20:20
  • 2826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:距离编辑算法
举报原因:
原因补充:

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