我目前正在執行一個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;
}
我知道,我正在運行的循環不必要大量的時間,我們可以修剪的搜索空間,使查找更快。我只是不確定如何做到最好。
@Mitch - 這可能是事實......但只是以被接受爲藉口回答的人開始變得有點老了。人們不應該回答有幫助嗎? – 2010-10-05 16:38:29
@efficiencyIsBliss - 我回答問題,因爲我需要接受我的答案。祝你好運。 – IVlad 2010-10-05 16:51:39
@Justin,我明白你來自哪裏。但是我認爲,從社區知識庫的角度來看,可以認爲這是好的,鼓勵公民參與最佳實踐。對於發生在SO上的隨機Google員工,與沒有這種答案的人相比,帶有檢查回答的問題更有用。 – 2010-10-05 16:53:39