Documentos de Académico
Documentos de Profesional
Documentos de Cultura
07 Hashing
07 Hashing
Hashing
2
Un Ejemplo
• Los 100 empleados de una compañía tienen roles
de 0 a 99
3
Relación Clave - Índice
• Roles de 00.000 a 99.999
• No se usará un arreglo de 100.000 para los 100
empleados
• Se puede usar los últimos 2 dígitos del rol como
índice en el arreglo
• Por ejemplo: rol 53.374 índice 74 en el arreglo y
rol 81.235 índice 35 en el arreglo
• Obs.: Los roles no están ordenados según su valor
4
Función Hash
• En un arreglo T hay disponible m celdas: int T[m]
• Existe una clave x universo U = {0, ..., N-1}
• La clave x se mapea a un índice del arreglo T[m]
• Existe una función hash h(x):
– h:U {0, 1, ..., m-1}
– x índice = h(x)
• Se podría almacenar algo en T[h(x)], si la celda está
desocupada: posible colisión por m N
5
Función Hash del Ejemplo
• índice = h(rol % 100)
• Por ejemplo: 53.304 % 100 es [04]
• La función hash calcula el índice para almacenar y
para recuperar los datos de un empleado
53.304 00
01
02
03
rol % 100 04
05
.... ….
99
[04]
6
Colisiones
• La función h(rol % 100) no garantiza que se calcule
para 2 roles diferentes 2 índice diferentes:
– 01.234 y 91.234 [34]
• Esta situación se llama colisión
• Evitar colisiones es el mayor desafío en el diseño de
una buena función hash
• Una buena función hash minimiza las colisiones
distribuyendo los datos en forma uniforme en el
arreglo
7
Resolver Colisiones – Linear Probing
• Un método simple para resolver colisiones es
Linear Probing
– Se almacena el dato en el siguiente espacio disponible
77.003 [00] disponible
[01] 14.001
[02] disponible
[03] 50.003
03 [04] 00.104
[05] disponible para 77.003
[06] 79.606
[07] disponible
[...] ....
[99] 33.099
8
Eliminación de Datos (1/3)
• La eliminación de datos puede producir un
problema en una siguiente búsqueda
• Se ingresa: 14.001 [00] disponible
00.104 [01] 14.001
50.003 [02] disponible
77.003 [03] 50.003
42.504 [04] 00.104
33.099 [05] 77.003
.... [06] 42.504
[07] disponible
[08] disponible
[...] ...
[99] 33.099
9
Eliminación de Datos (2/3)
11
Clustering
• Clustering se llama la tendencia que los datos no
quedan distribuidos uniformemente en el arreglo
• Clustering significa que varios datos se ubican cerca
de una ubicación
[00] disponible
[01] 14.001
[02] disponible
[03] 50.003
[04] 00.104
[05] 77.003
[06] 42.504
[07] disponible 03, 04, 05, 06 y 07
[08] disponible 08
[...] ...
[99] 33.099
12
Rehashing
• Linear Probing es un ejemplo para resolver
colisiones a través de rehashing
• Se usó h(rol % 100) + 1
• Linear Probing en general:
h(x % tamaño arreglo) + constante
• Lo ideal es tomar para la constante y el tamaño del
arreglo valores que no tienen un divisor común
• Por ejemplo es malo: h(x % 100) + 2
13
Quadratic Probing
• h(x % tamaño arreglo ± i2)
• El valor de i indica cuantas veces se aplicó la función
rehash
– 1. se suma 1
– 2. se suma 4
– 3. se suma 9
– etc.
• Si el tamaño del arreglo es una potencia de 2, se examinan
pocas celdas
• Si el tamaño del arreglo es (4 * constante + 3) quadratic
probing examina todas las celdas
14
Random Probing
• El incremento del valor hash es un número
aleatorio
15
Bucket y Chaining
• Un bucket es una colección de datos que se
almacena con el mismo índice
16