gpt4 book ai didi

java - 在两个字符串上查找 Levenshtein 距离

转载 作者:行者123 更新时间:2023-11-29 08:39:16 25 4
gpt4 key购买 nike

我正在尝试在 Eclipse Java 中实现 Levenshtein distance在以下两个字符串上:

我的想法来自维基百科,但我不知道为什么我的输出是错误的,我需要帮助来找出我的错误。

  1. “克鲁斯卡尔”
  2. “因果关系”

     package il.ac.oranim.alg2016;
    public class OPT {
    public static void main(String[] args)
    {

    char[] t={'k','r','u','s','k','a','l'};
    char[] s={'c','a','u','s','a','l'};
    for (int i=0;i<=s.length;i++)
    {
    for (int j=0;j<=t.length;j++)
    System.out.print(LevenshteinDistance(s,t)[i][j]+" ");
    System.out.println();
    }
    }
    private static int[][] LevenshteinDistance(char s[], char t[])
    {
    // d is a table with m+1 rows and n+1 columns
    int[][] d=new int[s.length+1][t.length+1];
    for (int i=0;i<=s.length;i++)
    d[i][0] = i; // deletion
    for (int j=0;j<=t.length;j++)
    d[0][j] = j; // insertion

    for (int j=1;j<t.length;j++)
    {
    for (int i=1;i<s.length;i++)
    {
    if (s[i] ==t[j])
    d[i][j]=d[i-1][j-1];
    else
    d[i][j] = Math.min(Math.min((d[i-1][ j] + 1),
    (d[i][j-1] + 1)),
    (d[i-1][j-1] + 1)) ;
    }
    }

    return d;
    }

我的输出:

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

输出应该是:

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

最佳答案

如果你重新阅读规范,你会发现有两个错误:

  • 在维基百科上,他们使用从 1 到(包括 n)的索引,字符串从索引 i=1 开始,根据到维基百科,在 Java 中它是 i=0;和
  • 权重更新不正确:

    if (s[i] ==t[j]) 
    d[i][j]=d[i-1][j-1];

在规范中,这应该是d[i-1][j]+1, d[i][j-1]+1中的最小值和 d[i-1][j-1]。不能保证 d[i-1][j-1] 是最低值,所以你应该有效地计算它。

如果考虑到这些错误,可以修改表更新算法(更改注释//):

for (int j=1;j<=t.length;j++) { //use <= instead of <
for (int i=1;i<=s.length;i++) { //use <= instead of <
if (s[i-1] ==t[j-1]) //use i-1 and j-1
d[i][j] = Math.min(Math.min(d[i-1][j]+1,d[i][j-1]+1),d[i-1][j-1]); //use the correct update
else
d[i][j] = Math.min(Math.min(d[i-1][j]+1,d[i][j-1]+1),d[i-1][j-1]+1);
}
}

关于java - 在两个字符串上查找 Levenshtein 距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41515082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com