概述
算法讲解见链接:编辑距离算法(Edit Distance)_编程小栈-CSDN博客_编辑距离
这里假设str1是"abc",str2是"1a3",从str2变为str1。
事实上,str1和str2可以是任意长度字符串;
直接上代码(java实现):
public class editDist {
public static void main(String[] args) {
editDistDef distDef = new editDistDef();
String[] str1 = {"a","b","c"};
String[] str2 = {"1","a","3"};
distDef.distance(str1, str2);
}
}
class editDistDef{
public void distance(String[] str1, String[] str2){
int column = str1.length+1;
int row = str2.length+1;
int[][] dist = new int[row][column];
System.out.println("dist数组行数:"+dist.length);
System.out.println("dist数组列数:"+dist[0].length);
//初始化二维数组
for (int i=0;i<row;i++){
for (int j=0;j<column;j++){
dist[i][j]=-1;
}
}
//打印初始化数组
System.out.println("初始化dist数组:");
printArray(row, column, dist);
//初始化第一列
for (int i=0;i<row;i++){
dist[i][0]=i;
}
//初始化第一行
for(int i=0;i<column;i++){
dist[0][i]=i;
}
System.out.println("打印初始化首行首列的dist数组:");
printArray(row, column, dist);
int temp;
for (int i=1;i<column;i++){
for (int j=1;j<row;j++){
if (str2[j-1].equals(str1[i-1]))
temp=0;
else
temp=1;
int leastDist = compare(dist[j][i-1]+1, dist[j-1][i]+1 , dist[j-1][i-1]+temp);
dist[j][i]=leastDist;
System.out.println("打印赋值dist["+j+"]["+i+"]"+"后的数组:");
printArray(row, column, dist);
}
}
System.out.println("打印最终dist数组:");
printArray(row, column, dist);
System.out.println("最小编辑距离是:" + dist[row-1][column-1]);
}
public int compare(int x, int y, int z){
int least = x;
if(least>y)
least=y;
if (least>z)
least=z;
return least;
}
private void printArray(int row, int column, int[][] dist) {
int n = 1;
for (int i=0;i<row;i++){
for (int j=0;j<column;j++){
System.out.print(dist[i][j]+"、");
if (n%column==0) //按行打印
System.out.println("");
n++;
}
}
System.out.println("");
}
}
结果:
dist数组行数:4
dist数组列数:4
初始化dist数组:
-1、-1、-1、-1、
-1、-1、-1、-1、
-1、-1、-1、-1、
-1、-1、-1、-1、
打印初始化首行首列的dist数组:
0、1、2、3、
1、-1、-1、-1、
2、-1、-1、-1、
3、-1、-1、-1、
打印赋值dist[1][1]后的数组:
0、1、2、3、
1、1、-1、-1、
2、-1、-1、-1、
3、-1、-1、-1、
打印赋值dist[2][1]后的数组:
0、1、2、3、
1、1、-1、-1、
2、1、-1、-1、
3、-1、-1、-1、
打印赋值dist[3][1]后的数组:
0、1、2、3、
1、1、-1、-1、
2、1、-1、-1、
3、2、-1、-1、
打印赋值dist[1][2]后的数组:
0、1、2、3、
1、1、2、-1、
2、1、-1、-1、
3、2、-1、-1、
打印赋值dist[2][2]后的数组:
0、1、2、3、
1、1、2、-1、
2、1、2、-1、
3、2、-1、-1、
打印赋值dist[3][2]后的数组:
0、1、2、3、
1、1、2、-1、
2、1、2、-1、
3、2、2、-1、
打印赋值dist[1][3]后的数组:
0、1、2、3、
1、1、2、3、
2、1、2、-1、
3、2、2、-1、
打印赋值dist[2][3]后的数组:
0、1、2、3、
1、1、2、3、
2、1、2、3、
3、2、2、-1、
打印赋值dist[3][3]后的数组:
0、1、2、3、
1、1、2、3、
2、1、2、3、
3、2、2、3、
打印最终dist数组:
0、1、2、3、
1、1、2、3、
2、1、2、3、
3、2、2、3、
最小编辑距离是:3
最后
以上就是飘逸小丸子为你收集整理的编辑距离算法-java实现的全部内容,希望文章能够帮你解决编辑距离算法-java实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复