Les réponses ont permis de définir les tables de hachage et d'expliquer une partie de la théorie, mais je pense qu'un exemple peut vous aider à obtenir une meilleure sensation pour eux.
Quelle est la différence entre une table de hachage et juste un tableau normal?
Une table de hachage et un tableau sont deux structures qui vous permettent de stocker et récupérer des données. Les deux vous permettent de spécifier un index et de récupérer une valeur est associée. La différence, comme Daniel Spiewak de noter, c'est que les indices d'un tableau sont séquentielle, alors que ceux de la table de hachage sont basés sur la valeur des données qui leur sont associés.
Pourquoi voudrais-je utiliser une table de hachage?
Une table de hachage peut fournir un moyen très efficace pour rechercher des éléments dans de grandes quantités de données, notamment les données qui ne sont pas facilement accessibles. ("Grand" signifie ici ginormous, dans le sens qu'il faudrait beaucoup de temps pour effectuer une recherche séquentielle).
Si je code un hachage comment pourrais-je commencer?
Pas de problème. La façon la plus simple est d'inventer un arbitraire opération mathématique que vous pouvez effectuer sur les données, qui renvoie à un certain nombre N
(généralement un entier). Utilisez ensuite ce nombre comme index dans un tableau de "compartiments" et de stocker vos données dans un seau #N
. Le truc, c'est le choix d'une opération qui tend à placer les valeurs dans les différents compartiments dans une manière qui le rend facile pour vous de les trouver plus tard.
Exemple: Un grand centre commercial qui maintient une base de données de ses clients des voitures et des aires de stationnement, afin de permettre aux consommateurs de se rappeler où ils sont stationnés. La base de données stocke make
, color
, license plate
, et parking location
. En quittant le magasin, un client trouve sa voiture en entrant de la, sa composition et de la couleur. La base de données renvoie une (relativement courte) liste des plaques d'immatriculation et des places de parking. Une analyse rapide localise l'acheteur de la voiture.
Vous pourriez mettre en œuvre des ce avec une requête SQL:
SELECT license, location FROM cars WHERE make="$(make)" AND color="$(color)"
Si les données ont été stockées dans un tableau, qui est essentiellement juste une liste, vous pouvez imaginer la mise en œuvre de la requête par l'analyse d'un tableau pour toutes les entrées correspondantes.
D'autre part, imaginer une règle de hachage:
Ajouter le caractère ASCII codes de toutes les lettres de la marque et la couleur, le diviser par 100, et utiliser le reste comme la valeur de hachage.
Cette règle vous permet de convertir chaque élément à un nombre entre 0 et 99, essentiellement trier les données dans 100 seaux. Chaque fois qu'un client a besoin de localiser une voiture, vous pouvez hacher le faire et de couleur pour trouver l' un seau de 100 qui contient l'information. Vous avez immédiatement réduit la recherche d'un facteur 100!
Maintenant l'exemple d'énormes quantités de données, dire une base de données avec des millions d'entrées qui est recherché basé sur des dizaines de critères. Une "bonne" fonction de hachage va distribuer les données dans des seaux de façon à minimiser toute recherche supplémentaire, permettant de gagner un temps considérable.