Bonjour, voilà j'ai un fichier texte d'un poids d'environ 1Go et je dois construire une table de hachage à partir de ce fichier, et le but est de retourner le nombre d'occurence d'un mot saisi.
Je suis partie, sur le chaînage linéaire, mais en le modifiant à ma sauce.
En fait le principe que j'ai :
Une classe Entry qui contient la clé, la valeur et le nombre d'occurence.
Et voilà ma fonction de hachage :
Donc la fonction retourne l'indice du bucket dans lequel insérer le mot.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public int fonctionHachage(String pChaine) { int cumulCodeASCII = 0; /* On fait le cumul du code ascii de chaque lettre du mot */ for(int i = 0; i < pChaine.length(); i++) cumulCodeASCII = cumulCodeASCII + (int)pChaine.charAt(i) * (int) Math.pow(42, i); /* Compression */ return Math.abs(cumulCodeASCII) % this.tableauBucket.length; }
De plus, dans mon programme, je tiens compte du facteur de charge, en fait dès que mon facteur de charge dépasse 0,7 j'augmente la taille de mon tableau (tableauBucket).
Le problème c'est que, si jamais je dois réinsérer un mot déjà inséré, je ne vais pas tomber sur le même indice du bucket dans lequel le mot est déjà présent, vu que la taille du tableau augmente.
Comment faire pour retourner le même indice pour un même mot quelque soit la taille du tableau ?
Merci d'avance
Partager