我刚刚实现了一个最佳匹配文件搜索算法,用于在字典中找到与字符串最相似的匹配项。在分析我的代码后,我发现绝大部分时间都是用于计算查询和可能结果之间的距离。目前我正在实现使用二维数组计算Levenshtein距离的算法,这使得实现成为O(n^2)操作。我希望有人能够建议更快的执行同样功能的方法。
以下是我的实现代码:
以下是我的实现代码:
public int calculate(String root, String query)
{
int arr[][] = new int[root.length() + 2][query.length() + 2];
for (int i = 2; i < root.length() + 2; i++)
{
arr[i][0] = (int) root.charAt(i - 2);
arr[i][1] = (i - 1);
}
for (int i = 2; i < query.length() + 2; i++)
{
arr[0][i] = (int) query.charAt(i - 2);
arr[1][i] = (i - 1);
}
for (int i = 2; i < root.length() + 2; i++)
{
for (int j = 2; j < query.length() + 2; j++)
{
int diff = 0;
if (arr[0][j] != arr[i][0])
{
diff = 1;
}
arr[i][j] = min((arr[i - 1][j] + 1), (arr[i][j - 1] + 1), (arr[i - 1][j - 1] + diff));
}
}
return arr[root.length() + 1][query.length() + 1];
}
public int min(int n1, int n2, int n3)
{
return (int) Math.min(n1, Math.min(n2, n3));
}