Un hash es un valor numérico que identifica datos de forma única. Las funciones hash toman datos de cualquier tamaño y generan un valor hash más corto usado para verificar la integridad de los datos. Las funciones hash más comunes son MD5, SHA-1 y RIPEMD160. Las colisiones ocurren cuando datos diferentes generan el mismo valor hash y deben resolverse para evitar problemas de rendimiento.
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
hashing y colisiones
1.
2. Hashing
Un hash es un valor numérico de longitud fija que identifica datos de forma
unívoca. Los valores hash se utilizan para comprobar la integridad de los datos que
se envían a través de canales no seguros.
Puede compararse el valor hash
de los datos recibidos con el valor
hash de los que se enviaron para
determinar si se alteraron los
mismos.
3. Funciones Hashing
Una función Hash toma como entrada un
mensaje de cualquier tamaño y, aplicando
una serie de operaciones aritméticas y lógicas
consigue otro mensaje, siempre de igual
tamaño y por lo general muy reducido, 128 o
160 bits.
Por ejemplo. Para que la función hash sea
buena, un mínimo cambio en el mensaje de
entrada, debe producir un notable cambio en
el de salida y por supuesto, debe ser
imposible conocer el mensaje original a partir
del mensaje resumen.
4. Funciones Hashing
Una función de Hash es una caja negra
que tiene como entrada una llave y como
salida una dirección.
El hashing es similar al indexamiento en
el sentido de asociación entre llaves y
direcciones relativas de registros; pero
difiere de los índices en 2 cosas:
1. La dirección generada por Hash suele ser aleatoria (random).
• No hay una relación aparente entre la llave y la localización del registro
correspondiente
2. El Hash permite que 2 llaves puedan producir la misma salida --> direcciones iguales, a
esto se le conoce como "colisión".
5. Funciones de Hashing más difundidas
FUNCIÓN BITS DESCRIPCIÓN
MD5 128 La codificación del MD5 de 128 bits es representada
típicamente como un número de 32 dígitos
hexadecimal
SHA-1 160 La codificación SHA-1 de 160 bits es representada
típicamente como un número de 40 dígitos
hexadecimal
RIPEMD160 160 Los hashes de 160 bits RIPEMD (también llamados
resúmenes RIPE del mensaje) se representan
típicamente como números en hexadecimal 40 dígitos
7. Colisiones
• Una importante desventaja de hashing es que el conjunto de posibles claves es
siempre mayor al número de espacios disponibles. Es decir, dos o más claves
pueden asignarse a la misma dirección en la tabla de hash.
• Cuando dos claves se direccionan a la misma dirección o bucket se dice que hay
una colisión, y a las claves se les denomina sinónimos.
8. Cuando hay colisiones se requiere de un proceso
adicional para encontrar una posición disponible
para la clave. Esto obviamente degrada la eficiencia
del método, por lo que se trata de evitar al máximo
esta situación.
Una función de hashing que logra evitar al 100% las
colisiones es conocida como hashing perfecto.
Colisiones
10. Ahora bien, cuando se tienen dos números que generan la misma dirección se
tiene una colisión. Por lo tanto se necesita solucionar la colisión. Tenemos dos
tipos de direccionamiento:
• 1) Direccionamiento Abierto.
Este tipo de solución de colisiones consiste en colocar en la siguiente posición
vacía el número que generó la colisión.
Posición 1 2 3 4 5 6
31 41 13
Números a insertar: 31, 41, 13:
Colisiones
11. 2. Direccionamiento Cerrado:
Este tipo de solución de colisiones no se tiene ningún problema con que se
repita la misma dirección, utilizando el uso de listas.
Colisiones
12. Truncamiento:
• Ignora parte de la clave y se utiliza la parte restante directamente como índice
(considerando campos no numéricos y sus códigos numéricos).
• Si las claves, por ejemplo; son enteros de ocho dígitos y la tabla de transformación
tiene mil posiciones, entonces el primero, segundo y quinto dígitos desde la
derecha pueden formar la función de conversión. Ejemplo: 72588495 se convierte
en 895. El truncamiento es un método muy rápido, pero falla para distribuir las
claves de modo uniforme.
Colisiones
13. Plegamiento:
La técnica de plegamiento consiste en la partición de la clave en diferentes partes y la
combinación de las partes en un modo conveniente ( a menudo utilizando suma o
multiplicación) para obtener el índice.
• Ejemplo:
13000000 --> 130=130+000+00
12345678 --> 657=123+456+78
71140205 --> 118 --> 1118=711+402+05
13602499 --> 259=136+024+99
25000009 --> 259=250+000+09
Colisiones
14. Tabla Hash
Una tabla hashes una estructura de datos que
asocia llaves o claves con valores. La
operación principal que soporta de manera
eficiente es la búsqueda: permite el acceso a
los elementos almacenados a partir de una
clave generada. Funciona transformando la
clave con una función hash en un hash, un
número que identifica la posición (casilla o
cubeta) donde la tabla hash localiza el valor
deseado.
15. Funcionamiento Tabla Hash
Las operaciones básicas implementadas en
las tablas hash son:
• Inserción
• Búsqueda
Para usar una tabla hash se necesita:
• Una estructura de acceso directo
(normalmente un arreglo).
• Una estructura de datos con una clave
• Una función hash cuyo dominio sea el
espacio de claves y su rango los números
naturales.
16. Búsqueda Tabla Hash
Para recuperar los datos, es necesario únicamente
conocer la clave del elemento, a la cual se le aplica la
función hash.
El valor obtenido se mapea al espacio de direcciones
de la tabla.
Si el elemento existente en la posición indicada en el
paso anterior tiene la misma clave que la empleada
en la búsqueda, entonces es el deseado. Si la clave es
distinta, se ha de buscar el elemento según la técnica
empleada para resolver el problema de las colisiones
al almacenar el elemento.
17. Ventajas Tabla Hash
La principal ventaja de una tabla hash sobre otras
estructuras de datos es su velocidad. Esta ventaja es
mas aparente cuando el numero de entradas es
grande. Las tablas hash son particularmente
eficientes cuando el numero máximo de entradas
puede ser predicho antes, para que el arreglo pueda
ser asignado una vez y nunca mas ser ajustado.
Comparada con otras estructuras de arreglos
asociadas, las tablas hash son más útiles cuando se
almacenan grandes cantidades de información.
18. × Aunque las operaciones en una tabla hash toman
un tiempo constante en promedio, el costo de una
buena función hash puede ser significantemente
mayor al de la búsqueda de una lista o árbol
secuencial. Así, las tablas hash no son efectivas
cuando el numero de entradas es pequeño.
× Las tablas hash almacenan la información en
posiciones pseudo-aleatorias, así que el acceso
ordenado a su contenido es bastante lento.
Desventajas Tabla Hash