2011-10-28 5 views
0

J'ai un problème en utilisant btree pour stocker des données de 100.000 mots dans un dictionnaire (un mot comprend une tête et définition), je ne sais pas comment hachage 100.000 mots à 100.000 clé différente avec une fonction de hachage, mon professeur indice que juste hachage 3 premier caractère de mot, mais je ne peux pas l'image ce que ferait avec un mot avoir plus de 3 caractères. aidez-moi s'il vous plaît T_TUtiliser Btree pour stocker des données du dictionnaire?

+0

Voici une autre astuce: En utilisant les valeurs Ascii des lettres de l'alphabet, trouver une formule de hachage qui maintient le alphabetization des mots dans le dictionnaire, tout en utilisant les 3 premières lettres de chaque mot. –

Répondre

0

L'idée ici est probablement que les collisions de hachage sont bien: vous calculez un hachage (par exemple en ajoutant les valeurs ASCCI des trois premiers caractères, mais cela ne se qualifie pas comme "hachage" dans le monde réel) et comparez les hachages. Si elles sont égales, vous faites une comparaison de chaînes (plus chère). Comme:

int compare(Node *left, Node *right) { 
    if (left->hash == right->hash) { 
     return stringCompare(left, right); 
    } 

    if (left->hash < right->hash) { 
     return -1; 
    } else { 
     return 1; 
    } 
} 
+0

Merci Gilbert Le Blanc et DarkDust pour votre aide. Mais ça ne peut toujours pas m'aider à sortir du cercle. J'ai beaucoup de questions. Lors de l'ajout de beaucoup de mots (plus de 100.000) Btree besoin de ré-équilibrer beaucoup de temps, et il faudra beaucoup de temps, comment puis-je le réparer? Que puis-je faire avec 2 mots ont les mêmes 3 premières lettres? – kasparov

Questions connexes