Académique Documents
Professionnel Documents
Culture Documents
Table de hachage
Une table de hachage est en informatique, une structure de donnes qui permet une association cl-lment, c'est--dire une implmentation du type abstrait table de symboles. On accde chaque lment de la table via sa cl. Il s'agit d'un tableau ne comportant pas d'ordre (un tableau est index par des entiers). L'accs un lment se fait en transformant la cl en une valeur de hachage (ou simplement hachage) par l'intermdiaire d'une fonction de hachage. Le hachage est un nombre qui permet la localisation des lments dans le tableau, typiquement le hachage est l'index de l'lment dans le tableau. Une case dans le tableau est appele alvole. Tout comme les tableaux, les tables de hachage permettent un accs en O(1) en moyenne, quel que soit le nombre d'lments dans la table. Toutefois le temps d'accs dans le pire des cas peut tre de O(n). Compares aux autres tableaux associatifs, les tables de hachage sont surtout utiles lorsque le nombre d'entres est trs important. La position des lments dans une table de hachage est pseudo-alatoire. Un annuaire reprsent comme une table de hachage. Cette structure n'est donc pas adapte pour accder des donnes tries. Des types de structures de donnes comme les arbres quilibrs sont gnralement plus lents (en O(log n)) et sont plus complexes implmenter, mais maintiennent une structure ordonne. Le fait de crer un hash partir d'une cl peut engendrer un problme de collision, cest--dire qu' partir de deux cls diffrentes, la fonction de hachage pourrait renvoyer la mme valeur de hash, et par consquent donner accs la mme position dans le tableau. Pour minimiser les risques de collisions, il faut donc choisir soigneusement sa fonction de hachage.
Table de hachage des collisions par adressage ouvert. Les fonctions de hachage ralisant une distribution uniforme des hachages sont donc les meilleures, mais sont en pratique difficiles trouver. Dans les environnements o un adversaire essaye d'attaquer les performances de la recherche en soumettant des entres gnrant un grand nombre de collisions afin de ralentir la recherche, une solution est le hashing universel, qui slectionne alatoirement une fonction de hachage au dbut de l'algorithme. L'adversaire n'a alors pas de moyen de connaitre le type de donnes qui produira des collisions.
Chanage
Cette mthode est la plus simple. Chaque case de la table est en fait une liste chane des cls qui ont le mme hachage. Une fois la case trouve, la recherche est alors linaire en la taille de la liste chane. Dans le pire des cas o la fonction de hachage renvoie toujours la mme valeur de hachage quelle que soit la cl, la table de hachage devient alors une liste chane, et le temps de recherche est en Rsolution des collisions par chanage. O(n). L'avantage du chanage est que la suppression d'une cl est facile, et que l'agrandissement de la table peut tre retard plus longtemps que dans l'adressage ouvert, les performances se dgradant moins vite. D'autres structures de donnes que les listes chanes peuvent tre utilises. En utilisant un arbre quilibr le cot thorique de recherche dans le pire des cas est en O(log n). Cependant, la liste tant suppose tre courte, cette approche est en gnral peu efficace moins d'utiliser la table sa pleine capacit, ou d'avoir un fort taux de collisions. Un tableau dynamique peut aussi tre utilis pour rduire la perte d'espace mmoire et amliorer les performances du cache lorsque le nombre d'lments est petit.
Table de hachage
Adressage ouvert
L'adressage ouvert consiste dans le cas d'une collision stocker les valeurs de hachage dans des cases contiges. La position de ces cases est dtermine par une mthode de sondage. Lors d'une recherche, si la case obtenue par hachage direct ne permet pas d'obtenir la bonne cl, une recherche sur les cases obtenues par une mthode de sondage est effectue jusqu' trouver la cl, ou non, ce qui indique qu'aucune cl de ce type n'appartient la table. Les mthodes de sondage courantes sont :
Rsolution des collisions par adressage ouvert et sondage linaire.
le sondage linaire : l'intervalle entre les cases est fixe, souvent 1 ; le sondage quadratique : l'intervalle entre les cases augmente linairement (les indices des cases augmentent donc quadratiquement), ce qui peut s'exprimer par la formule : le double hachage : l'adresse de la case est donne par une deuxime fonction de hachage, ou hachage secondaire. Le sondage linaire possde la meilleure performance en termes de cache, mais est sensible l'effet de clustering dcrit plus haut. Le double hachage ne permet pas d'utiliser le cache efficacement, mais permet de rduire presque compltement les problmes de clustering, en contrepartie d'une complexit plus leve. Le sondage quadratique se situe entre le linaire et le double hashing au niveau des performances. Une indication critique des performances d'une table de hachage est le facteur de compression fc, qui est la proportion de cases utilises dans la table. Plus le facteur de compression est proche de 100 %, plus le nombre de sondages effectuer devient important. Lorsque la table est pleine, les algorithmes de sondage peuvent mme chouer. Le facteur de compression est en gnral limit 80 %, mme en disposant d'une bonne fonction de hachage. Des facteurs de charge faibles ne sont pas pour autant significatifs de bonne performances, en particulier si la fonction de hachage est mauvaise et gnre du clustering.
Hachage probabiliste
Cette section est vide, insuffisamment dtaille ou incomplte. Votre aide [1] est la bienvenue !
Table de hachage
Fonction de hachage
Article dtaill : fonction de hachage. Une fonction de hachage permet de transformer une cl en une valeur de hachage (un index), donnant ainsi la position d'un lment dans le tableau. Si la cl n'est pas un entier naturel, il faut trouver un moyen de la considrer comme tel. Par exemple, si la cl est de type chaine de caractres, on peut calculer la somme des positions dans l'alphabet de chaque lettre pour obtenir un entier naturel. Il suffit ensuite de transformer cet entier en index par diffrentes faons. Par exemple, en prenant le reste de la division de l'entier par le nombre d'lments dans le tableau.
Rfrences
(en) Donald Knuth, The Art of Computer Programming, vol.3: Sorting and Searching, Addison-Wesley, 1997, 3ed. (ISBN0-201-89685-0), partie6, chap.4 (Hashing), p.513558 (en) Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction to Algorithms, MIT Press and McGraw-Hill, 2001, 2ed. (ISBN0-262-03293-7), chap.11 (Hash Tables), p.221252 (en) Michael T. Goodrich et Roberto Tamassia, Data Structures and Algorithms in Java, John Wiley & Sons, Inc., 4ed. (ISBN0-471-73884-0), chap.9 (Maps and Dictionaries), p.369418 Christine Froidevaux, Marie-Claude Gaudel et Michle Soria, Types de donnes et algorithmes, McGraw-Hill, coll.Informatique, 1990, 575p. (ISBN2-8407-4023-0) Portail de linformatique
Rfrences
[1] http:/ / fr. wikipedia. org/ w/ index. php?title=Table_de_hachage& action=edit
Licence
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/