Pourquoi est-il appelé «table de hachage» ou «fonction de hachage»? Le hachage n'a aucun sens pour moi ici [fermé]


26

Cela fait maintenant environ 4 ans de développement que j'utilise, entend, parle et implémente des tables de hachage et des fonctions de hachage. Mais je ne comprends vraiment jamais pourquoi on appelle ça du hash?

Je me souviens des premiers jours où j'ai commencé la programmation, ce terme était une sorte de terminologie lourde pour moi. Je n'ai jamais compris ce que c'est, basé sur son nom . J'ai juste expérimentalement compris ce qu'il fait et pourquoi et quand devrions-nous l'utiliser .

Cependant, j'essaie encore parfois de comprendre pourquoi cela s'appelle du hachage . Je n'ai aucun problème avec la table ou la fonction et pour être honnête, ce sont des termes assez déductifs et rationnels. Cependant, je pense que de meilleurs mots pourraient être utilisés à la place du hachage, comme clé ou unicité . Ne touchez pas à la table des clés ou à l' unicité .

Selon mon dictionnaire, le hachage signifie:

  1. Plat de pommes de terre et viandes frites (très peu pertinent)
  2. # symbole (signe de numéro AKA, signe dièse, etc.) (toujours hors de propos, peut-être juste une mauvaise nomenclature)
  3. Appliquer l'algorithme à la chaîne de caractères (n'a toujours rien à voir avec l' unicité , qui est la caractéristique la plus importante d'une table de hachage)
  4. Couper la nourriture
  5. Un autre terme pour le haschich

Est-ce que quelqu'un sait pourquoi on appelle ça du hachage?


32
Vous semblez mal comprendre ce que sont les hachages. L'unicité n'est explicitement pas une caractéristique des fonctions de hachage (c'est-à-dire qu'elles ne sont jamais injectives).
Peter Taylor

1
@Peter Taylor: les tables de hachage définissent les mappages injectifs.
reinierpost

2
@Peter Taylor: pour être un peu nerveux, ils n'ont pas besoin d'être injectifs , mais parfois ils sont même bijectifs. Pensez à l'implémentation typique d'une fonction de hachage pour un entier :)
keppla

4
Un hachage peut être unique, tant que l'espace clé n'est pas plus grand que l'espace de valeur de hachage (pour les hachages de table), ou que l'espace de valeur de hachage est si grand que les collisions sont mathématiquement irréalisables (pour les hachages cryptographiques).
Sécurisé le

1
En outre, une "table de clés" ressemble plus à n'importe quelle infrastructure de données "clé / valeur" (également appelée "dictionnaire"). Toutes les infrastructures de données clé / valeur ne sont pas des tables de hachage.
barjak

Réponses:


46

Selon wikipedia, il fait référence à la fonction de hachage . Si vous voulez aller plus loin, la page wiki pour la fonction de hachage indique que l'utilisation du mot "hachage" dans la fonction de hachage est originaire de la manière suivante:

Le terme «hachage» vient par analogie avec sa signification non technique, «couper et mélanger». En effet, les fonctions de hachage typiques, comme l'opération de mod, "découpent" le domaine d'entrée en de nombreux sous-domaines qui sont "mélangés" dans la plage de sortie pour améliorer l'uniformité de la distribution des clés.


2
Je ne sais pas ce que les «sous-domaines» font là-dedans. C'est juste que la fonction de hachage «mélange» à fond les valeurs de son domaine.
reinierpost

15

En français, une table de hachage est appelée "table de hachage", le verbe apparenté "hacher" signifie hacher / hacher (nourriture principalement). Le verbe to hasha la même signification en anglais.

Donc, comme d'autres l'ont souligné, cela s'appelle du hachage, car vous hachez votre entrée que vous mettez en morceaux à différents endroits (vos entrées de tableau).


2
Il est en fait écrit "hachage" et "hacher" sans accent.
Ptival

10

Le numéro 3 a tout à voir avec cela. De Wikipédia :

Au cœur de l'algorithme de table de hachage se trouve un simple tableau d'éléments; on l'appelle souvent simplement la table de hachage . Les algorithmes de table de hachage calculent un index à partir de la clé de l'élément de données et utilisent cet index pour placer les données dans le tableau. La mise en œuvre de ce calcul est la fonction de hachage , f:

index = f(key, arrayLength)

La fonction de hachage calcule un indexdans le tableau à partir des données key. arrayLengthest la taille du tableau. Pour le langage d'assemblage ou d'autres programmes de bas niveau, une fonction de hachage triviale peut souvent créer un index avec seulement une ou deux instructions machine en ligne .

Une table de hachage ne stocke donc pas vraiment les valeurs basées sur une clé; il stocke des valeurs basées sur une version hachée de cette clé.


1
cela dépend de ce que vous entendez par table de hachage. La structure de données proposée dans des langages tels que Perl, Java et C # vous donne un mappage clé-valeur, en utilisant le type de table de hachage auquel vous vous référez en interne.
reinierpost

10

les tables de hachage sont appelées de cette façon en raison de l'utilisation du code de hachage et elles sont liées à la "coupe des aliments".

Pensez-y comme ceci - vous prenez votre joli joli objet, comme un fruit, puis le hachez pour qu'il commence à ressembler à n'importe quoi d'autre - juste un nombre - il n'y a plus de structure en lui. Ce morceau de "nourriture coupée" est utilisé dans la table de hachage pour découvrir votre joli joli objet.

  • Il a l'air plus laid que ton joli objet? peut-être - mais cela aide à le trouver rapidement - c'est le point. oh et ce n'est pas unique c'est sûr.
     
    Le code de hachage trouve un seau dans la table où votre joli objet se trouve dans une petite entreprise d'autres avec le même code de hachage. Au sein de cette petite entreprise, l'objet est recherché à l'aide de la vérification d'égalité - qui devrait être beaucoup plus lente que la recherche de hachage, mais ce n'est pas un problème car il n'y en a que quelques-uns (la plupart des autres objets sont déjà ignorés grâce au hachage rapide) .

3

Le hachage (comme pour couper en petits morceaux, déchiqueter, etc.) prend un intrant (nourriture ou parfois super-vilains) et le transforme en une sortie relativement homogène. C'est-à-dire, peu importe ce que vous aviez au début, à la fin vous avez juste du hachage. Et une cuillerée de hachage est à peu près aussi utile que tout le hachage pour déterminer quelle était l'entrée (en supposant que votre machine de hachage hache bien).
Ainsi, le hachage peut réduire tout objet comestible ou mauvais en une cuillerée de hachage, où deux objets différents produisent des hachages différents, tandis que deux objets égaux donnent des hachages égaux. Ce qui signifie que si deux super-vilains sont tombés dans votre machine de hachage, il suffit de comparer leurs hachages pour déterminer si l'un était un clone de l'autre.

D'une certaine manière, les fonctions de hachage en informatique se ressemblent un peu. Ils prennent toute une entrée de taille et de sémantique différentes, et - très simplement - ils le coupent simplement en morceaux et mélangent ceux-ci et coupent la séquence résultante en morceaux et mélangent cela autour et ainsi de suite. Au final, vous disposez d'une cuillerée (n octets) de l'entrée hachée.


Cependant, avec la mise en garde, le super méchant peut également retourner le même hachage qu'un super-héros avec un ensemble de paramètres donné, car le hachage ne semble pas dicter l'unicité. Il y a des collisions de hachage après tout ... c'est ce que vous faites après la collision ...
Rig
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.