Voici une explication en termes simples.
Supposons que vous souhaitiez remplir une bibliothèque de livres et non pas simplement les remplir, mais que vous souhaitiez pouvoir les retrouver facilement lorsque vous en avez besoin.
Donc, vous décidez que si la personne qui veut lire un livre connaît le titre du livre et le titre exact à démarrer, c'est tout ce qu'il faut. Avec le titre, la personne, avec l'aide du bibliothécaire, devrait pouvoir trouver le livre facilement et rapidement.
Alors, comment pouvez-vous faire cela? Eh bien, évidemment, vous pouvez garder une sorte de liste où vous placez chaque livre, mais vous avez le même problème que la recherche dans la bibliothèque, vous devez rechercher la liste. Certes, la liste serait plus petite et plus facile à rechercher, mais vous ne voulez toujours pas effectuer une recherche séquentielle d'une extrémité de la bibliothèque (ou liste) à l'autre.
Vous voulez quelque chose qui, avec le titre du livre, peut vous donner le bon endroit à la fois, alors tout ce que vous avez à faire est de simplement vous diriger vers la bonne étagère et de prendre le livre.
Mais comment y arriver? Eh bien, avec un peu de réflexion lorsque vous remplissez la bibliothèque et beaucoup de travail lorsque vous remplissez la bibliothèque.
Au lieu de simplement commencer à remplir la bibliothèque d'un bout à l'autre, vous concevez une petite méthode intelligente. Vous prenez le titre du livre, l'exécutez à travers un petit programme informatique, qui crache un numéro d'étagère et un numéro d'emplacement sur cette étagère. C'est là que vous placez le livre.
La beauté de ce programme est que plus tard, lorsqu'une personne revient pour lire le livre, vous réintroduisez le titre dans le programme et récupérez le même numéro d'étagère et de slot que celui qui vous avait été initialement attribué, et c'est où se trouve le livre.
Le programme, comme d'autres l'ont déjà mentionné, est appelé algorithme de hachage ou calcul de hachage et fonctionne généralement en prenant les données qui y sont introduites (le titre du livre dans ce cas) et en calcule un nombre.
Pour simplifier, disons qu'il convertit simplement chaque lettre et symbole en un nombre et les résume tous. En réalité, c'est beaucoup plus compliqué que cela, mais laissons cela pour l'instant.
La beauté d'un tel algorithme est que si vous y introduisez la même entrée encore et encore, il continuera à cracher le même nombre à chaque fois.
Ok, c'est donc essentiellement comment fonctionne une table de hachage.
Les trucs techniques suivent.
Tout d'abord, il y a la taille du nombre. Habituellement, la sortie d'un tel algorithme de hachage se situe dans une plage d'un grand nombre, généralement beaucoup plus grande que l'espace que vous avez dans votre table. Par exemple, disons que nous avons de la place pour exactement un million de livres dans la bibliothèque. La sortie du calcul du hachage pourrait être de l'ordre de 0 à un milliard, ce qui est beaucoup plus élevé.
Alors que faisons-nous? Nous utilisons quelque chose appelé calcul de module, qui dit essentiellement que si vous comptiez jusqu'au nombre que vous vouliez (c'est-à-dire le nombre d'un milliard) mais que vous vouliez rester dans une plage beaucoup plus petite, chaque fois que vous atteigniez la limite de cette plage plus petite, vous recommençiez à 0, mais vous devez savoir jusqu'où vous êtes arrivé dans la grande séquence.
Supposons que la sortie de l'algorithme de hachage se situe dans la plage de 0 à 20 et que vous obtenez la valeur 17 à partir d'un titre particulier. Si la taille de la bibliothèque n'est que de 7 livres, vous comptez 1, 2, 3, 4, 5, 6 et lorsque vous atteignez 7, vous recommencez à 0. Comme nous devons compter 17 fois, nous en avons 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3 et le nombre final est 3.
Bien sûr, le calcul du module ne se fait pas comme ça, il se fait avec la division et un reste. Le reste de la division de 17 par 7 est de 3 (7 va 2 fois en 17 à 14 et la différence entre 17 et 14 est de 3).
Ainsi, vous placez le livre dans l'emplacement numéro 3.
Cela conduit au problème suivant. Collisions. Puisque l'algorithme n'a aucun moyen d'espacer les livres afin qu'ils remplissent exactement la bibliothèque (ou la table de hachage si vous voulez), il finira invariablement par calculer un nombre qui a été utilisé auparavant. Dans le sens de la bibliothèque, lorsque vous arrivez à l'étagère et au numéro d'emplacement dans lequel vous souhaitez mettre un livre, il y a déjà un livre là-bas.
Il existe différentes méthodes de gestion des collisions, notamment l'exécution des données dans un autre calcul pour obtenir un autre emplacement dans le tableau ( double hachage ), ou simplement pour trouver un espace proche de celui qui vous a été donné (c'est-à-dire juste à côté du livre précédent en supposant l'emplacement était également connu sous le nom de palpage linéaire ). Cela signifierait que vous avez des recherches à faire lorsque vous essayez de trouver le livre plus tard, mais c'est toujours mieux que de simplement commencer à une extrémité de la bibliothèque.
Enfin, à un moment donné, vous voudrez peut-être mettre plus de livres dans la bibliothèque que la bibliothèque ne le permet. En d'autres termes, vous devez créer une plus grande bibliothèque. Étant donné que l'emplacement exact dans la bibliothèque a été calculé en utilisant la taille exacte et actuelle de la bibliothèque, il s'ensuit que si vous redimensionnez la bibliothèque, vous pourriez avoir à trouver de nouveaux emplacements pour tous les livres depuis le calcul effectué pour trouver leurs emplacements. a changé.
J'espère que cette explication était un peu plus terre à terre que les seaux et les fonctions :)