Levenshtein距离算法是否有减少运行时间的方法?

时间:2019-05-16 13:16:26

标签: java string-matching phonetics

我目前正在开发一个程序,通过将一组字符串之间的Levenshtein距离相互比较并在进行过程中将其删除来对它们进行评分。 它肯定有效,但是主要问题是编译和运行需要很长时间。

Levenshtein距离算法:

    int[][] edpoint = new int[a.length() + 1][b.length() + 1];

    for(int i = 0; i < a.length() + 1; i++) {

        for(int j = 0; j < b.length() + 1; j++) {


            if(i == 0) {

                edpoint[i][j] = j;

            }
            else if (j == 0) {

                edpoint[i][j] = i;
            }
            else {

                int substitution = edpoint[i - 1][j - 1] + cost(a.charAt(i - 1), b.charAt(j - 1));
                int insertion = edpoint[i - 1][j] + 1;
                int deletion = edpoint[i][j - 1] + 1;
                int[] nums = new int[3];
                nums[0] = substitution;
                nums[1] = insertion;
                nums[2] = deletion;
                edpoint[i][j] = Arrays.stream(nums).min().orElse(Integer.MAX_VALUE);
            }
        }
    }
    return edpoint[a.length()][b.length()];
}

Levenshtein距离算法的最佳运行时间是O(n ^ 2),由于我要遍历一大串字符串,而只是最小地减小了它的大小,所以我可以看到它的大小变得那么长。如果我有办法减少它的运行时间,那就太棒了!

0 个答案:

没有答案