Después de aprender de qué se trata, pensé en escribir una explicación con suerte más simple por analogía:
Resumen: ¿Qué es un código hash?
- Es una huella digital. Podemos usar esta huella digital para identificar personas de interés.
Lea abajo para más detalles:
Piense en un Hashcode como nosotros tratando de identificar a alguien de manera única
Soy un detective, en busca de un criminal. Vamos a llamarlo señor cruel. (Era un asesino notorio cuando yo era un niño; irrumpió en una casa secuestrado y asesinó a una niña pobre, arrojó su cuerpo y todavía está suelto, pero eso es un asunto aparte). El Sr. Cruel tiene ciertas características peculiares que puedo usar para identificarlo de manera única entre un mar de personas. Tenemos 25 millones de personas en Australia. Uno de ellos es el señor Cruel. ¿Cómo podemos encontrarlo?
Malas formas de identificar al señor cruel
Al parecer, el señor Cruel tiene los ojos azules. Eso no es de mucha ayuda porque casi la mitad de la población en Australia también tiene ojos azules.
Buenas formas de identificar a Mr Cruel
¿Que más puedo usar? Lo sé: ¡usaré una huella digital!
Ventajas :
- Es realmente muy difícil para dos personas tener la misma huella digital (no imposible, pero extremadamente improbable).
- La huella digital del señor Cruel nunca cambiará.
- Cada parte de todo el ser del señor Cruel: su aspecto, color de cabello, personalidad, hábitos alimenticios, etc. deben (idealmente) reflejarse en su huella digital, de modo que si tiene un hermano (que es muy similar pero no el mismo), entonces ambos debería tener diferentes huellas digitales. Digo "debería" porque no podemos garantizar al 100% que dos personas en este mundo tengan huellas digitales diferentes.
- Pero siempre podemos garantizar que el Sr. Cruel siempre tendrá la misma huella digital, y que su huella digital NUNCA cambiará.
Las características anteriores generalmente hacen buenas funciones hash.
Entonces, ¿cuál es el problema con 'Collisions'?
Así que imagínense si consigo una pista y encuentro a alguien que coincida con las huellas digitales del señor Cruel. ¿Significa esto que he encontrado al señor Cruel?
........¡quizás! Debo echar un vistazo más de cerca. Si estoy usando SHA256 (una función de hashing) y estoy buscando en una ciudad pequeña con solo 5 personas, ¡entonces hay muchas posibilidades de que lo encuentre! Pero si estoy usando MD5 (otra función de hashing famosa) y estoy buscando huellas digitales en una ciudad con + 2 ^ 1000 personas, entonces es una posibilidad bastante buena de que dos personas completamente diferentes tengan la misma huella digital.
Entonces, ¿cuál es el beneficio de todo esto de todos modos?
El único beneficio real de los códigos hash es si quieres poner algo en una tabla hash, y con las tablas hash te gustaría encontrar objetos rápidamente, y ahí es donde entra el código hash. Te permiten encontrar cosas realmente en las tablas hash con rapidez. Es un truco que mejora enormemente el rendimiento, pero a un pequeño costo de precisión.
Así que imaginemos que tenemos una tabla hash llena de personas: 25 millones de sospechosos en Australia. El Sr. Cruel está en algún lugar allí ... ¿Cómo podemos encontrarlo realmente rápido ? Necesitamos clasificarlos a todos: para encontrar una posible coincidencia, o para absolver a posibles sospechosos. No debes considerar las características únicas de cada persona porque eso tomaría demasiado tiempo. ¿Qué usarías en su lugar? ¡Usarías un hashcode! Un código hash puede decirle si dos personas son diferentes. Si Joe Bloggs NO es el señor cruel. Si las impresiones no coinciden, entonces sabes que definitivamente NO es el Sr. Cruel. Pero, si las huellas digitales coincidenentonces, dependiendo de la función hash que usaste, es muy probable que hayas encontrado a tu hombre. Pero no es 100%. La única forma en que puede estar seguro es investigar más a fondo: (i) si tuvo una oportunidad / motivo, (ii) testigos, etc., etc.
Cuando usa computadoras si dos objetos tienen el mismo valor de código hash, entonces nuevamente necesita investigar más si son realmente iguales. por ejemplo, tendría que verificar si los objetos tienen, por ejemplo, la misma altura, el mismo peso, etc., si los enteros son iguales o si customer_id es una coincidencia, y luego llegar a la conclusión de si son iguales. esto normalmente se hace implementando un IComparer o interfaces de calidad IE.
Resumen clave
Entonces, básicamente, un código hash es una huella digital.
- En teoría, dos personas / objetos diferentes pueden tener la misma huella digital. O en otras palabras. Si tiene dos huellas digitales que son iguales ... entonces no es necesario que ambas provengan de la misma persona / objeto.
- Buuuuuut, la misma persona / objeto siempre devolverá la
misma huella digital .
- Lo que significa que si dos objetos devuelven códigos hash diferentes , entonces usted sabe con 100% de certeza que esos objetos son diferentes.
Tarda unos buenos 3 minutos en entender lo anterior. Quizás lo leas algunas veces hasta que tenga sentido. ¡Espero que esto ayude a alguien porque me costó mucho aprenderlo todo!