我目前正在实施BK-Tree来制作拼写检查器。我正在使用的字典非常大(数百万字),这就是为什么我根本无法承受任何低效率。但是,我知道我编写的查找函数(可以说是整个程序中最重要的部分)可以做得更好。我希望能找到一些同样的帮助。这是我写的查找:
public int get(String query, int maxDistance)
{
calculateLevenshteinDistance cld = new calculateLevenshteinDistance();
int d = cld.calculate(root, query);
int tempDistance=0;
if(d==0)
return 0;
if(maxDistance==Integer.MAX_VALUE)
maxDistance=d;
int i = Math.max(d-maxDistance, 1);
BKTree temp=null;
for(;i<=maxDistance+d;i++)
{
temp=children.get(i);
if(temp!=null)
{
tempDistance=temp.get(query, maxDistance);
}
if(maxDistance<tempDistance)
maxDistance=tempDistance;
}
return maxDistance;
}
我知道我不必要地多次运行循环,并且我们可以修剪搜索空间以加快查找速度。我只是不确定如何最好地做到这一点。