Je suis exécute actuellement un BK-Tree pour faire un correcteur orthographique. Le dictionnaire avec lequel je travaille est très volumineux (des millions de mots), ce qui explique pourquoi je ne peux me permettre aucune inefficacité. Cependant, je sais que la fonction de recherche que j'ai écrite (sans doute la partie la plus importante de tout le programme) peut être améliorée. J'espérais trouver de l'aide concernant la même chose. Voici la recherche que j'ai écrit:Cet algorithme a-t-il été implémenté correctement?
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;
}
Je sais que je courais la boucle un nombre inutilement grand nombre de fois et que nous pouvons réduire l'espace de recherche pour accélérer la recherche. Je ne suis pas sûr de savoir comment faire mieux.
@Mitch - Cela peut être vrai ... mais les gens ne répondant sous prétexte d'être accepté commence à être un peu vieux. Les gens ne devraient-ils pas répondre pour être utile? –
@efficiencyIsBliss - Je réponds aux questions parce que j'ai besoin que mes réponses soient acceptées. Bonne chance avec celui-ci. – IVlad
@Justin, je comprends d'où tu viens. Mais je pense qu'un argument sain peut être avancé qu'il est bon, du point de vue du bassin de connaissances communales, d'encourager les citoyens à s'engager dans les meilleures pratiques. Une question avec une réponse-cochée est plus utile pour le googleur aléatoire qui arrive sur SO que l'un sans une telle réponse. –