Вы находитесь на странице: 1из 19

Tema 5

Tablas hash
Gabriel Navarro
Estructuras de Datos
Grado en Ingeniera Informatica
Gabriel Navarro Tema 5 Tablas hash

Indice
Dise no de funciones hash
Encadenamiento separado
Direccionamiento cerrado
Gabriel Navarro Tema 5 Tablas hash
Tablas Hash
Una tabla Hash es un contenedor asociativo (ejemplo: diccionario).
Almacena valores clave en una tabla (vector o matriz
habitualmente).
Cada valor clave tiene asociado una componente de la matriz
unvocamente.
Una tabla Hash ideal permite acceder a los valores clave en tiempo
O(1).
Gabriel Navarro Tema 5 Tablas hash
Tablas Hash
Gabriel Navarro Tema 5 Tablas hash
Tablas Hash: Funciones hash
Llamamos funcion hash a la funcion que asocia un valor clave con
su posicion en la tabla hash.
Esta funcion debe ser inyectiva. Sin embargo, encontrar tal
funcion es complicado.
Si conseguimos encontrar una funcion hash biyectiva, decimos
que es perfecta. Para ello, el conjunto de datos debe ser jo y
conocido a priori.
Usualmente, las funciones hash son sobreyectivas (para dos
claves se asocia la misma posicion de la tabla).
Si la funcion hash obtenida es sobreyectiva, debemos resolver
colisiones entre claves utilizando mecanismos para ello.
Gabriel Navarro Tema 5 Tablas hash
Tablas Hash: Funciones hash
Algunas caractersticas deseables de las funciones hash:
Deben proporcionar como salida la mayor parte de posiciones
en la tabla.
Deben distribuir las claves lo mas aleatoriamente posible por
la tabla.
Debe intentar minimizar el n umero de colisiones.
Si suponemos que la tabla hash se implementa en un vector de M
componentes,existen varios metodos para dise nar una funcion hash.
Gabriel Navarro Tema 5 Tablas hash
Tablas Hash: Diseno de funciones hash
Metodos para dise nar una funcion hash:
Metodo de multiplicacion. Consiste en multiplicar la clave por
alg un valor y luego quedarnos con algunos bits del resultado.
Tiene el inconveniente de que M debe ser potencia de 2.
Metodo de division. Consiste en calcular el valor de la clave
modulo M, con M primo.
Metodo de multiplicacion y division. La funcion hash h(x) se
calcula como la combinacion de los metodos anteriores:
h(x) = (a x + b) %M, donde x es el valor de la clave, de
tipo entero, M es un n umero primo no superior al tama no de
la tabla hash, y a y b dos valores enteros, con a %M! = 0.
Gabriel Navarro Tema 5 Tablas hash
Tablas Hash: Diseno de funciones hash
Dependiendo del tipo de dato de la clave, se puede calcular su
valor de varias formas:
Si es de tipo entero, utilizando ese mismo valor (por ejemplo:
h(x) = x%M.
Si es de tipo cadena, utilizando la suma de los codigos ASCII
de sus caracteres (por ejemplo:
h(x) = (x[0] + x[1] + ... + x[strlen(x) 1]) %M.
etc.
Gabriel Navarro Tema 5 Tablas hash
Tablas Hash: Resolucion de colisiones
Dado que la mayor parte de las funciones hash son sobreyectivas,
se debe establecer un mecanismo para resolver las colisiones entre
valores hash de claves diferentes:
Metodo de encadenamiento separado. Cada celda de la tabla
hash es una lista que contiene las claves con el mismo valor
hash.
Metodo de direccionamiento cerrado. Si se produce una
colision, se le asigna un nuevo valor hash a la clave hasta que
se encuentre una posicion de la tabla vaca.
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Encadenamiento separado
la tabla se representa como un vector de listas de claves.
Denominamos factor de carga al n umero medio de claves por lista.
Una buena funcion hash debera tender a que el factor de carga
este proximo a 1.
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Encadenamiento separado
Ejemplo: Insertar claves 23, 45, 16, 26, 40, 14, 5, 12, 9, 25 con h(x)=
x %13
Posicion valor
0 <26>
1 <40, 14>
2 < >
3 <16>
4 < >
5 <5>
6 <45>
7 < >
8 < >
9 <9>
10 <23>
11 < >
12 <12, 25>
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado
La complejidad de la tabla hash aumenta, ya que cada posicion
debe contener, ademas, un ag que indique:
Posicion libre: Valor L.
Posicion ocupada: Valor O.
Posicion borrada: Valor B.
La insercion unicamente podra realizarse sobre posiciones libres
(marcadas con L) o eliminadas (marcadas con B).
Si la funcion hash sobre una clave da como resultado una posicion
que ya esta ocupada, el direccionamiento cerrado resuelve las
colisiones haciendo que la funcion hash dependa del n umero de
intento realizado para la insercion.
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado
La funcion hash secundaria se puede dise nar atendiendo a varias
posibilidades:
Prueba lineal: h
i
(x) = (h(x) + i) %M, donde i es el n umero
de intento de insercion de la clave.
Prueba cuadratica: h
i
(x) = (h(x) + i
2
) %M.
hashing doble: h
i
(x) = (h(x) + i h

(x)) %M, donde h(x) es


otra funcion hash, llamada funcion hash secundaria, cuyo
requisito es que nunca pueda tomar el valor 0. Un ejemplo
puede ser h

(x) = q (x%q), con q un n umero primo menor


que M.
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado
Las b usquedas de una clave en la tabla hash se realizan en el
mismo orden que se siguio para la insercion.
Los borrados marcan las posiciones de la tabla con un valor
distinto de libre u ocupado, para facilitar las nuevas
inserciones y la b usqueda de elementos.
Si la tabla se llena, se debe ampliar y seleccionar otro valor M, que
sera el primo mas grande inferior al tama no de la tabla. A este
proceso se llama rehashing.
Normalmente, por motivos de eciencia no se suele esperar a que
la tabla este llena para redimencionarla (por ejemplo: Un objeto
Hashtable de Java se redimensiona cuando la tabla se llena en un
75 %).
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado.
Ejemplo.
Insercion de claves 23, 45, 16, 26, 40, 14, 5, 12, 9, 25 con
h
i
(x) = (x + i
2
) %13.
Posici on valor Estado
0 26 O
1 40 O
2 14 O
3 16 O
4 L
5 5 O
6 45 O
7 L
8 25 O
9 9 O
10 23 O
11 L
12 12 O
h
0
(14) = 1; ocupado.
h
1
(14) = 2.
h
0
(25) = 12; ocupado.
h
1
(25) = 0; ocupado.
h
2
(25) = 3; ocupado.
h
3
(25) = 8.
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado.
Ejemplo.
Borrado de 26.
Posici on valor Estado
0 26 B
1 40 O
2 14 O
3 16 O
4 L
5 5 O
6 45 O
7 L
8 25 O
9 9 O
10 23 O
11 L
12 12 O
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado.
Ejemplo.
Busqueda de 25.
Posici on valor Estado
0 26 B
1 40 O
2 14 O
3 16 O
4 L
5 5 O
6 45 O
7 L
8 25 O
9 9 O
10 23 O
11 L
12 12 O
h
0
(25) = 12; no esta.
h
1
(25) = 0; no esta.
h
2
(25) = 3;no esta.
h
3
(25) = 8. Encontrado.
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado.
Ejemplo.
Busqueda de 39.
Posici on valor Estado
0 26 B
1 40 O
2 14 O
3 16 O
4 L
5 5 O
6 45 O
7 L
8 25 O
9 9 O
10 23 O
11 L
12 12 O
h
0
(39) = 0. No esta.
h
1
(39) = 1. No esta.
h
2
(39) = 4. Esta libre, por
lo que paramos de buscar y
39 no esta en la tabla.
Gabriel Navarro Tema 5 Tablas hash
Resolucion de colisiones: Direccionamiento cerrado.
Ejemplo.
Insercion de 39.
Posici on valor Estado
0 39 O
1 40 O
2 14 O
3 16 O
4 L
5 5 O
6 45 O
7 L
8 25 O
9 9 O
10 23 O
11 L
12 12 O
h
0
(39) = 0. No
esta ocupada, se inserta en
0.
Gabriel Navarro Tema 5 Tablas hash

Вам также может понравиться