Quelle est la différence entre Hash
et Dictionary
?
Issu d'un contexte de script, je pense qu'ils sont similaires, mais je voulais découvrir les différences exactes. La recherche sur Google ne m'a pas beaucoup aidé.
Hash
est une structure de données extrêmement mal nommée où le programmeur a confondu l'interface avec l'implémentation (et était trop paresseux pour écrire le nom complet, c'est-à-dire HashTable
au lieu de recourir à une abréviation, Hash
).
Dictionary
est le nom "correct" de l'interface (= le ADT ), c'est-à-dire un conteneur associatif qui mappe des clés (généralement uniques) à des valeurs (pas nécessairement uniques).
Une table de hachage est ne implémentation possible d'un tel dictionnaire qui fournit de très bonnes caractéristiques d'accès (en termes d'exécution) et est donc souvent l'implémentation par défaut.
Une telle implémentation a deux propriétés importantes:
(Pour qu'une clé soit hachable, cela signifie que nous pouvons calculer une valeur numérique à partir d'une clé qui est ensuite utilisée comme index dans un tableau.)
Il existe des implémentations alternatives de la structure de données du dictionnaire qui imposent un ordre sur les clés - cela est souvent appelé un dictionnaire trié (et est généralement implémenté en termes d'arbre de recherche, bien qu'il existe d'autres implémentations efficaces).
Pour résumer: a dictionnaire est un ADT qui mappe les clés aux valeurs. Il existe plusieurs implémentations possibles de cet ADT, dont la table de hachage en est une. Hash
est un terme impropre, mais dans son contexte, il équivaut à un dictionnaire implémenté en termes de table de hachage.
"Dictionnaire" est le nom du concept. Une table de hachage est une implémentation possible.
Un dictionnaire est le terme collectif donné pour toute implémentation de structure de données utilisée pour des recherches/insertions rapides. Ceci peut être réalisé/implémenté en utilisant une variété de structures de données comme la table de hachage, les listes de sauts, l'arbre rb, etc. Une table de hachage est une structure de données spécifique utile à de nombreuses fins, y compris la mise en œuvre d'un dictionnaire.
Un dictionnaire utilise une clé pour référencer la valeur directement à l'intérieur d'un tableau associatif.
c'est à dire (KEY => VALUE)
Un hachage est plus souvent décrit comme table de hachage qui utilise une fonction de hachage pour calculer la position en mémoire (ou plus facilement un tableau) où la valeur sera. Le hachage prendra la clé en entrée et donnera une valeur en sortie. Ensuite, branchez cette valeur dans la mémoire ou l'index du tableau.
c'est à dire KEY => HASH FUNCTION => VALUE
Je suppose que l'un est direct tandis que l'autre ne l'est pas. Les fonctions de hachage peuvent ne pas être parfaites non plus et peuvent parfois fournir un index référençant la mauvaise valeur. Mais cela peut être corrigé.
Meilleur endroit où regarder: Wikipedia ( tableau associatif et table de hachage )