Numérique et Sciences Informatiques > Algorithmique : Structures de Données Avancées > Tables de Hachage > Gestion des collisions
Gestion des collisions dans les Tables de Hachage
Comprendre et résoudre les collisions dans les tables de hachage : méthodes de chaînage séparé et d'adressage ouvert. Exemples concrets et exercices pour lycéens.
Introduction aux Collisions
Dans une table de hachage, une collision se produit lorsque deux clés différentes, après application de la fonction de hachage, produisent la même adresse (indice) dans le tableau sous-jacent. Imaginez un cas simple : vous avez une table de hachage de taille 10. La fonction de hachage, pour simplifier, retourne la dernière décimale de la clé. Ainsi, les clés 12, 22, 32 vont toutes à la même position (2) dans la table. C'est une collision. La performance d'une table de hachage est grandement affectée par le nombre de collisions. Un grand nombre de collisions peut transformer une recherche en O(1) (temps constant) en une recherche en O(n) (temps linéaire), où n est le nombre d'éléments dans la table. Il est donc crucial de bien gérer les collisions pour maintenir l'efficacité de la table.
Méthode 1 : Chaînage Séparé (Separate Chaining)
Le chaînage séparé est une méthode de gestion des collisions où chaque case du tableau de la table de hachage pointe vers une liste chaînée (ou une autre structure de données, comme un arbre binaire de recherche équilibré). Lorsque deux clés entrent en collision, le nouvel élément est simplement ajouté à la liste chaînée de la case correspondante. Fonctionnement : Avantages : Inconvénients : Exemple :
Supposons une table de hachage de taille 5 et une fonction de hachage simple : Voici comment la table évoluerait avec le chaînage séparé : Les autres indices (0, 1, 3, 4) seraient vides ou contiendraient d'autres listes chainées selon les autres insertions.
h(clé) = clé % 5
. Nous voulons insérer les clés 12, 22, 32, 17, 5, 15.
Méthode 2 : Adressage Ouvert (Open Addressing)
L'adressage ouvert est une autre méthode de gestion des collisions où tous les éléments sont stockés directement dans le tableau de la table de hachage. En cas de collision, on cherche une autre case vide dans le tableau en utilisant une technique de sondage. Techniques de sondage courantes : Fonctionnement : Avantages : Inconvénients : Exemple : Sondage Linéaire Table de hachage de taille 5, fonction de hachage La table résultante :
SUPPRIMÉ
) pour marquer une case comme supprimée. Lors de la recherche, on continue le sondage même si on rencontre une case marquée SUPPRIMÉ
.
h(clé) = clé % 5
. Insérer les clés 12, 22, 32, 17.
Choisir la Bonne Méthode
Le choix entre le chaînage séparé et l'adressage ouvert dépend de plusieurs facteurs : En pratique, le chaînage séparé est souvent préféré pour sa simplicité et sa robustesse, tandis que l'adressage ouvert peut être utilisé lorsque la mémoire est une contrainte importante et que l'on peut estimer raisonnablement le nombre d'éléments.
Ce qu'il faut retenir
FAQ
-
Pourquoi est-il important de gérer les collisions dans les tables de hachage ?
Une mauvaise gestion des collisions peut transformer une recherche en temps constant (O(1)) en une recherche en temps linéaire (O(n)), dégradant considérablement les performances de la table de hachage. -
Quelle est la différence principale entre le chaînage séparé et l'adressage ouvert ?
Le chaînage séparé utilise des listes chaînées pour stocker les éléments en collision, tandis que l'adressage ouvert stocke tous les éléments directement dans le tableau, utilisant des techniques de sondage pour trouver des cases vides. -
Qu'est-ce que le clustering et pourquoi est-ce un problème dans l'adressage ouvert ?
Le clustering se produit lorsque les collisions se regroupent, créant de longues séquences de cases occupées. Cela ralentit les recherches et les insertions car il faut parcourir de nombreuses cases avant de trouver une case vide ou l'élément recherché.