J'ai souvent entendu des gens parler de hachage et de cartes de hachage et de tables de hachage. Je voulais savoir ce qu'ils sont et où vous pouvez les utiliser au mieux.
D'abord, vous devriez peut-être lire ceci article .
Lorsque vous utilisez des listes et que vous recherchez un élément spécial, vous devez normalement parcourir la liste complète. C'est très cher lorsque vous avez de grandes listes.
Une table de hachage peut être beaucoup plus rapide, dans les meilleures circonstances, vous obtiendrez l'article que vous recherchez avec un seul accès.
Comment ça marche? Comme un dictionnaire ... lorsque vous recherchez le mot "table de hachage" dans un dictionnaire, vous ne commencez pas par le premier mot sous "a". Mais vous allez plutôt directement à la lettre "h". Puis "ha", "a" et ainsi de suite, jusqu'à ce que vous trouviez votre Parole. Vous utilisez un index dans votre dictionnaire pour accélérer votre recherche.
Une table de hachage fait essentiellement la même chose. Chaque élément obtient un index unique (le soi-disant hash
). Vous utilisez ce hachage pour les recherches. Le hachage peut être un index dans une liste chaînée normale. Par exemple, votre hachage pourrait être un nombre comme 2130, ce qui signifie que vous devriez regarder la position 2130 dans votre liste. Une recherche sur un index connu dans une liste normale est très simple et rapide.
Le problème de toute l'approche est le soi-disant hash function
Qui attribue cet indice à chaque élément. Lorsque vous recherchez un article, vous devriez pouvoir calculer l'indice à l'avance. Tout comme dans un vrai dictionnaire, où vous voyez que le mot "table de hachage" commence par la lettre "h" et que vous connaissez donc la position approximative.
Une bonne fonction de hachage fournit des codes de hachage uniformément diffusés sur l'espace de tous les codes de hachage possibles. Et bien sûr, il essaie d'éviter collisions
. Une collision se produit lorsque deux éléments différents obtiennent le même code de hachage.
En C # par exemple, chaque objet a une méthode GetHashcode()
qui lui fournit un hachage (pas nécessairement unique). Cela peut être utilisé pour les recherches et le tri dans votre dictionnaire.
Lorsque vous commencez à utiliser des tables de hachage, vous devez toujours garder à l'esprit que vous gérez correctement les collisions. Il peut arriver assez facilement dans les grandes tables de hachage que deux objets aient le même hachage (peut-être que votre surcharge de GetHashcode () est défectueuse, peut-être que quelque chose d'autre s'est produit).
Fondamentalement, un HashMap vous permet de stocker des éléments avec des identifiants. Ils sont stockés dans un format de table avec l'identifiant haché à l'aide d'un algorithme de hachage.
En règle générale, ils sont plus efficaces pour récupérer des éléments que les arbres de recherche, etc.
Vous pouvez trouver cela utile: http://www.relisoft.com/book/lang/pointer/8hash.html
J'espère que ça aide,
Chris
Le hachage (au sens non cryptographique) est un terme générique pour prendre une entrée puis produire une sortie pour l'identifier. Un exemple trivial de hachage ajoute la somme des lettres d'une chaîne, c'est-à-dire:
f(abc) = 6
Notez que ce schéma de hachage trivial créerait une collision entre les chaînes abc, bca, ae, etc. Un schéma de hachage efficace produirait naturellement des valeurs différentes pour chaque chaîne.
Les Hashmaps et les tables de hachage sont des infrastructures de données (comme les tableaux et les listes), qui utilisent le hachage pour stocker des données. Dans une table de hachage, un hachage est produit (soit à partir d'une clé fournie, soit à partir de l'objet lui-même) qui détermine où dans la table l'objet est stocké. Cela signifie que tant que l'utilisateur de la table de hachage connaît la clé, la récupération de l'objet est extrêmement rapide.
Dans une liste, en comparaison, vous devrez en quelque sorte parcourir la liste afin de trouver votre objet recherché. Cela représente également l'arrière des tables de hachage, c'est-à-dire qu'il est très compliqué d'y trouver un objet sans connaître la clé, car l'endroit où l'objet est stocké dans le tableau n'a aucune pertinence pour sa valeur ni quand il a été entré.
Les Hashmaps sont similaires aux tables de hachage, mais un seul exemple de chaque objet y est stocké (donc aucune clé n'a besoin d'être fournie, l'objet lui-même est la clé).
Ceci est bien sûr une explication très simple, donc je vous suggère de lire en profondeur à partir de ce point. J'espère que je n'ai commis aucune erreur idiote. =)
Hashmap est utilisé pour stocker des données dans des paires de valeurs clés. Nous pouvons utiliser une table de hachage pour stocker des objets dans une application et l'utiliser plus loin dans la même application pour stocker, mettre à jour, supprimer des valeurs. La clé et les valeurs Hashmap sont stockées dans un compartiment vers une entrée spécifique, cet emplacement d'entrée est déterminé à l'aide de la fonction Hashcode. Cette fonction de code de hachage détermine le hachage où la valeur est stockée. L'explication détaillée du fonctionnement de hashmap est décrite dans cette vidéo: https://youtu.be/iqYC1odZSNo