Après avoir appris de quoi il s'agissait, j'ai pensé écrire une explication plus simple, espérons-le, par analogie:
Résumé: Qu'est-ce qu'un hashcode?
- C'est une empreinte digitale. Nous pouvons utiliser cette empreinte digitale pour identifier les personnes d'intérêt.
Lisez ci-dessous pour plus de détails:
Pensez à un Hashcode comme nous essayons d'identifier quelqu'un de manière unique
Je suis un détective, à la recherche d'un criminel. Appelons-le M. Cruel. (Il était un meurtrier notoire quand j'étais enfant - il est entré par effraction dans une maison kidnappée et assassiné une pauvre fille, a jeté son corps et il est toujours en liberté - mais c'est une autre affaire). M. Cruel a certaines caractéristiques particulières que je peux utiliser pour l'identifier de manière unique parmi une mer de gens. Nous avons 25 millions de personnes en Australie. L'un d'eux est M. Cruel. Comment le retrouver?
Mauvaises façons d'identifier M. Cruel
Apparemment, M. Cruel a les yeux bleus. Cela n'aide pas beaucoup, car près de la moitié de la population australienne a également les yeux bleus.
Bonnes façons d'identifier M. Cruel
Que puis-je utiliser d'autre? Je sais: j'utiliserai une empreinte digitale!
Avantages :
- Il est vraiment très difficile pour deux personnes d'avoir la même empreinte digitale (pas impossible, mais extrêmement improbable).
- L'empreinte digitale de M. Cruel ne changera jamais.
- Chaque partie de l'être entier de M. Cruel: son apparence, sa couleur de cheveux, sa personnalité, ses habitudes alimentaires, etc. doivent (idéalement) se refléter dans son empreinte digitale, de sorte que s'il a un frère (qui est très similaire mais pas le même) - alors les deux devrait avoir des empreintes digitales différentes . Je dis "devrait" parce que nous ne pouvons pas garantir à 100% que deux personnes dans ce monde auront des empreintes digitales différentes.
- Mais nous pouvons toujours garantir que M. Cruel aura toujours la même empreinte digitale - et que son empreinte digitale ne changera JAMAIS.
Les caractéristiques ci-dessus font généralement de bonnes fonctions de hachage.
Alors, quel est le problème avec les «collisions»?
Alors imaginez si je reçois une piste et que je trouve quelqu'un correspondant aux empreintes digitales de M. Cruel. Cela signifie-t-il que j'ai trouvé M. Cruel?
........ peut-être! Je dois regarder de plus près. Si j'utilise SHA256 (une fonction de hachage) et que je cherche dans une petite ville avec seulement 5 personnes - alors il y a de très bonnes chances que je le trouve! Mais si j'utilise MD5 (une autre fonction de hachage célèbre) et que je vérifie les empreintes digitales dans une ville de + 2 ^ 1000 personnes, alors c'est une assez bonne possibilité que deux personnes entièrement différentes aient la même empreinte digitale.
Alors quel est l'avantage de tout cela de toute façon?
Le seul véritable avantage des codes de hachage est que vous souhaitez mettre quelque chose dans une table de hachage - et avec les tables de hachage, vous voulez trouver des objets rapidement - et c'est là que le code de hachage entre en jeu. Ils vous permettent de trouver des éléments dans des tables de hachage vraiment rapidement. C'est un hack qui améliore considérablement les performances, mais à un petit prix de précision.
Alors imaginons que nous ayons une table de hachage remplie de personnes - 25 millions de suspects en Australie. M. Cruel est quelque part là-dedans ..... Comment pouvons-nous le trouver très rapidement ? Nous devons tous les trier: pour trouver une correspondance potentielle, ou pour acquitter autrement des suspects potentiels. Vous ne voulez pas tenir compte des caractéristiques uniques de chaque personne, car cela prendrait trop de temps. Que utiliseriez-vous à la place? Vous utiliseriez un hashcode! Un hashcode peut vous dire si deux personnes sont différentes. Si Joe Bloggs n'est PAS M. Cruel. Si les impressions ne correspondent pas, vous savez que ce n'est certainement PAS M. Cruel. Mais, si les empreintes digitales correspondentpuis selon la fonction de hachage que vous avez utilisée, il y a de fortes chances que vous ayez trouvé votre homme. Mais ce n'est pas à 100%. La seule façon dont vous pouvez être certain est d'enquêter plus avant: (i) a-t-il / elle eu une opportunité / un motif, (ii) des témoins, etc.
Lorsque vous utilisez des ordinateurs si deux objets ont la même valeur de code de hachage, vous devez à nouveau vérifier s'ils sont vraiment égaux. Par exemple, vous devriez vérifier si les objets ont par exemple la même hauteur, le même poids, etc., si les entiers sont les mêmes, ou si le customer_id est une correspondance, puis en venir à la conclusion s'ils sont identiques. cela se fait généralement peut-être en implémentant une interface IComparer ou IEquality.
Résumé clé
Donc, fondamentalement, un hashcode est une empreinte digitale.
- Deux personnes / objets différents peuvent théoriquement toujours avoir la même empreinte digitale. Ou en d'autres termes. Si vous avez deux empreintes digitales identiques ... alors il n'est pas nécessaire qu'elles proviennent toutes les deux de la même personne / objet.
- Buuuuuut, la même personne / objet renverra toujours la
même empreinte digitale .
- Ce qui signifie que si deux objets renvoient des codes de hachage différents, vous savez avec certitude à 100% que ces objets sont différents.
Cela prend 3 bonnes minutes pour comprendre ce qui précède. Peut-être lisez-le plusieurs fois jusqu'à ce qu'il ait du sens. J'espère que cela aide quelqu'un car il m'a fallu beaucoup de chagrin pour tout apprendre!