私は現在、スペルチェッカーを作成するために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;
}
ループを不必要に何度も実行していること、および検索スペースをトリミングしてルックアップを高速化できることを知っています。どうすればいいのかよくわかりません。