Quelle est la différence entre Hash et Dictionary?

Venant dun fond de script, je pense quils sont similaires, mais je voulais découvrir les différences exactes. Googler ne ma pas beaucoup aidé.

Réponse

Hash est une structure de données extrêmement mal nommée où le programmeur a confondu linterface avec limplémentation ( et était trop paresseux pour écrire le nom complet, cest-à-dire HashTable en recourant plutôt à une abréviation, Hash).

Dictionary est le nom « correct » de linterface (= ADT ), cest-à-dire un conteneur associatif qui mappe des clés (généralement uniques) à des valeurs (pas nécessairement uniques).

Une table de hachage est une implémentation possible dun tel dictionnaire qui fournit dassez bonnes caractéristiques daccès (en termes dexécution) et est donc souvent limplémentation par défaut.

Une telle implémentation a deux propriétés importantes:

  1. les clés doivent être ha shable et égalité comparable .
  2. les entrées apparaissent sans ordre particulier dans le dictionnaire.

(pour une clé à be hashable signifie que nous pouvons calculer une valeur numérique à partir dune 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 classement sur les clés – cela est souvent appelé un dictionnaire trié (et est généralement implémenté en termes darbre de recherche, bien quil existe dautres implémentations efficaces).


Pour résumer: un dictionnaire est un ADT qui mappe des clés à des valeurs. Il existe plusieurs implémentations possibles de cet ADT, dont la table de hachage fait partie. Hash est un abus de langage, mais dans son contexte, il équivaut à un dictionnaire implémenté en termes de table de hachage.

Commentaires

  • Pour donner un exemple en C ++, les modèles de conteneurs associatifs standards ne pourraient ' être implémentés que des hachages, bien que le prochain standard contienne ce qui est effectivement des tables de hachage. Ils ' sont appelés unordered_map pour montrer ce quils font plutôt que ce quils sont.
  • « correct » selon quelle autorité? Dans certains langages, tels que Ruby et Perl, le nom officiel – lu «correct» – pour ces structures est «hash».
  • @nohat: Notez mon utilisation des guillemets. De plus, jai expliqué pourquoi le nom est mal choisi, nest-ce pas? Donc, si vous avez besoin dune autorité, je dirai que cest sous lautorité de la police de linformatique théorique.
  • Fait intéressant, dans Ruby 1.9, il est en fait impossible dimplémenter le Hash classe avec une table de hachage, puisque Ruby 1.9 Hash es conserve lordre dinsertion alors quune table de hachage ne le fait pas. Ainsi, dans Ruby 1.9, le nom Hash ne ' ne reflète même plus limplémentation.
  • @hippietrail Vous vous trompez – dabord, ces sont descriptions objectives. Après tout, je qualifie pourquoi la dénomination est mauvaise et abusive (voir ci-dessous). «Too paresseux» est une licence artistique de ma part, mais le fait demeure que la raison de raccourcir le nom est intrinsèque, cest-à-dire quil ny a aucune raison dutiliser un nom court ici autre que de raccourcir le nom. Et vous vous trompez sur le «dictionnaire»: cest simplement le nom officiel de la structure de données. Votre définition de «dictionnaire» est erronée dans le contexte de linformatique, et le nom est antérieur à Python de plusieurs décennies.

Réponse

« Dictionary » est le nom du concept. Une table de hachage est une implémentation possible.

Commentaires

  • Hash est également un ADT. HashTable est une implémentation dun Hash
  • @Sairam Je pense que cest beaucoup plus courant que ' hash ' signifie une fonction de hachage plutôt quune table de hachage.
  • @jk En fait, le " hash " est le résultat de lapplication une " fonction / algorithme de hachage " à une entrée. Une table de hachage " " ou " " omehoe relie un objet hachable à un objet (objet sous une forme générique, non limité à la POO)
  • Il existe des langages qui utilisent ' Hash ' pour faire référence à une structure de type dictionnaire plutôt quà lopération de la fonction de hachage. Ruby, par exemple .

Réponse

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 une table de hachage, des listes de sauts, un arbre rb, etc. Une table de hachage est une structure de données spécifique utile à de nombreuses fins, y compris limplémentation dun dictionnaire.

Commentaires

  • Hash est également un ADT. Y a-t-il une différence spécifique entre Hash et Dictionary ADT?
  • @Sairam: Non, un hash est la sortie dun certain type dalgorithme (fonction de hachage).

Réponse

Un dictionnaire utilise une clé pour référencer la valeur directement à lintérieur dun tableau associatif .

ie (KEY => VALUE)

Un hash est plus souvent décrit comme un table de hachage qui utilise une fonction de hachage pour calculer la position en mémoire (ou plus facilement dans un tableau) où sera la valeur. Le hachage prendra la CLE en entrée et donnera une valeur en sortie. Puis branchez cette valeur dans la mémoire ou lindex du tableau.

ie KEY => HASH FUNCTION => VALUE

Je suppose que lun est direct tandis que lautre isn « t. 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 pour regarder: Wikipedia ( tableau associatif et table de hachage )

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *