我目前正在开发一个程序,通过将一组字符串之间的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),由于我要遍历一大串字符串,而只是最小地减小了它的大小,所以我可以看到它的大小变得那么长。如果我有办法减少它的运行时间,那就太棒了!