Ouverture de hachage (chaînage séparé):
Dans le hachage ouvert, les clés sont stockées dans des listes liées attachées aux cellules d'une table de hachage.
Hashing fermé (adressage ouvert):
Dans un hachage fermé, toutes les clés sont stockées dans la table de hachage elle-même sans utiliser de listes liées.
Je suis incapable de comprendre pourquoi on les appelle ouvert, fermé et séparé. Quelqu'un peut-il l'expliquer?
L'utilisation de «fermé» par rapport à «ouverte» indique si nous sommes ou non tenus d'utiliser une position ou une structure de données donnée (c'est une description extrêmement vague, mais j'espère que le reste aide).
Par exemple, "ouvrir" dans "adressage ouvert" nous indique que l'index (adresse.) Auquel un objet sera stocké dans la table de hachage n'est pas complètement déterminé par son code de hachage. Au lieu de cela, l'index peut varier en fonction de ce qui se trouve déjà dans la table de hachage.
Le terme "fermé" dans "hachage fermé" fait référence au fait que nous ne quittons jamais la table de hachage; chaque objet est stocké directement à un index dans le tableau interne de la table de hachage. Notez que cela n’est possible qu’en utilisant une sorte de stratégie d’adressage ouvert. Ceci explique pourquoi "hachage fermé" et "adressage ouvert" sont synonymes.
Comparez cela avec le hachage ouvert - dans cette stratégie, aucun des objets n'est réellement stocké dans le tableau de la table de hachage; une fois qu'un objet est haché, il est stocké dans une liste séparée du tableau interne de la table de hachage. "ouvert" fait référence à la liberté que nous obtenons en quittant la table de hachage et en utilisant une liste séparée. En passant, "liste séparée" indique pourquoi le hachage ouvert est également appelé "chaînage séparé".
En bref, "fermé" fait toujours référence à une sorte de garantie stricte, comme lorsque nous garantissons que les objets sont toujours stockés directement dans la table de hachage (hachage fermé). Ensuite, l'opposé de "fermé" est "ouvert", donc si vous n'avez pas de telles garanties, la stratégie est considérée comme "ouverte".
Le nom adresse ouverte fait référence au fait que l'emplacement ("adresse") de l'élément n'est pas déterminé par sa valeur de hachage. (Cette méthode est également appelée hachage fermé).
Dans separing chain, chaque compartiment est indépendant et comporte une sorte d’ADT (liste, arbres de recherche binaires, etc.) d’entrées ayant le même index . les entrées, car nous avons besoin d'opérations d'ordre O(1) pour insérer, rechercher, etc.
Ceci est un exemple de chaîne séparée utilisant C++ avec une simple fonction de hachage utilisant l'opérateur mod (clairement, une mauvaise fonction de hachage)
Vous avez un tableau qui est la "table de hachage".
Dans Open Hashing, chaque cellule du tableau pointe vers une liste contenant les collisions. Le hachage a généré le même index pour tous les éléments de la liste liée.
Dans Closed Hashing, vous utilisez un seul tableau pour tout. Vous stockez les collisions dans le même tableau. L'astuce consiste à utiliser un moyen intelligent pour passer d'une collision à l'autre sans que vous trouviez ce que vous voulez. Et le faire de manière reproductible/déterministe.