You are on page 1of 65

Introducci

on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Estructura de Datos
Clase 19: Tablas de Hash
Carlos Contreras Bolton
Universidad Andr
es Bello
Facultad de Ingeniera

6 de Junio de 2014

Carlos Contreras Bolton Estructura de Datos

1/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Contenido

1 Introducci
on
2 Definiciones y Conceptos B
asicos
3 Funciones de Dispersi
on
4 Resoluci
on de Colisiones
5 Desbordamiento de la tabla

Carlos Contreras Bolton Estructura de Datos

2/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Introduccion

Una tabla de hash o un mapa de hash es una estructura


de datos que usa una funcion de hash para asociar
identificadores llamados claves o llaves o keys.
Por ejemplo, el nombre de una persona a un elemento
asociado (su numero telefonico).
La ventaja principal de la tabla de Hashing se encuentra
en su efectividad para consultar los elementos a traves de
su clave de forma directa.

Carlos Contreras Bolton Estructura de Datos

3/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Introduccion
La clave de un elemento es un identificador que tiene
significado en el contexto del problema en el que
este siendo utilizada la tabla.
Al interior de la tabla las claves son unicas.
En una tabla de hashing no existe nocion de orden tanto
para los elementos como para sus respectivas claves.
Los elementos no tienen predecesores ni sucesores.
No es posible realizar recorrido alguno sobre las claves ni
elementos.
La unica forma de acceder a los elementos de la tabla es
mediante sus claves asociadas.

Carlos Contreras Bolton Estructura de Datos

4/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Introduccion
Problematica

Conjunto
Curso
Biblioteca
Banco

Elementos
Atributos de los elementos
Clave
Estudiantes Rut, Matrcula, apellido, nombre, ano que cursa
Rut
Libros
Codigo, titulo, autor, tema
Codigo
Clientes
Numero de cuenta corriente, apellido, nombre, saldo Numero de cuenta corriente

Problema
Dado una clave k y un conjunto A de elementos del mismo
tipo, verificar si existe algun elemento en A cuya clave sea k.

Carlos Contreras Bolton Estructura de Datos

5/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Introduccion
Soluci
on

Debe ser eficiente en tiempo.


Pero tampoco podemos permitir ser ineficiente en espacio.
Ni algoritmos demasiados lentos para las otras
operaciones (vinculadas con la administracion de la
informacion que son el (insertar, eliminar, etc)).
Entonces cabe preguntarse como guardar la informacion
para obtener algoritmos de maximo rendimiento.
La forma mas eficiente en cuanto al tiempo es que la
clave k sea un numero entero mayor o igual a cero.
La informacion se almacena en un arreglo A de manera
que el elemento de clave k se guarda en A[k].

Carlos Contreras Bolton Estructura de Datos

6/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Introduccion
Soluci
on

Para recuperar el elemento de clave, tendremos simplemente


que retornar A[k].
Igualmente sencillos son los algoritmos de insercion y
eliminacion, ambos de O(1).
Carlos Contreras Bolton Estructura de Datos

7/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Introduccion
Soluci
on - Inconvenientes

Mal uso del espacio: desperdiciar espacio.


Curso de 30 alumnos, donde su Rut es de 16.xxx.xxx a
21.xxx.xxx.
Si el alumno de 16.xxx.xxx lo almacenamos en la
posicion 0 del arreglo.
El u
ltimo alumno lo debieramos posicionar en la posicion
5.xxx.xxx.

Para solucionar este inconveniente.


Se usan tablas hashing cuando el conjunto de claves
posibles es mucho mayor que el de claves reales a
almacenar.

Carlos Contreras Bolton Estructura de Datos

8/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Definiciones
Conceptos Basicos

Supongamos que el conjunto de claves posibles, sea el


conjunto de numeros enteros no negativos (n).
Supongamos tambien que tenemos una funcion
h : N 0, 1, . . . , m 1 para algun m 1.
Sea T un arreglo de m posiciones donde en cada posicion
se encuentra la informacion relativa a un elemento o
esta vaca. Podemos representar un conjunto A de
elementos poniendo:
T [j] = x, x A, con k = clave(x) y j = h(k)

Carlos Contreras Bolton Estructura de Datos

9/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Definiciones
Conceptos Basicos

T [j] = x, x A, con k = clave(x) y j = h(k)

Carlos Contreras Bolton Estructura de Datos

10/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Conceptos Basicos
Ejemplo

Sean m = 13, el conjunto de elementos A y el espacio de


claves C:
A = {(22, Felipe, 1), (39, Mario, 1), (46, Mara, 1),
(54, Juan, 2 ), (79, Silvia, 4 ), (198, Carlos, 3)}
C = {22, 39, 46, 54, 79, 198}.
Donde sea una funci
on h(k) = k % 13.
Si aplicamos la funci
on h(k) a cada clave, resulta:
h(22) = 22 %13 = 9
h(39) = 39 %13 = 0
h(46) = 46 %13 = 7
h(54) = 54 %13 = 2
h(79) = 79 %13 = 1
h(198) = 198 %13 = 3

Carlos Contreras Bolton Estructura de Datos

11/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Conceptos Basicos
Ejemplo

Resultando el
siguiente arreglo T:
0
1
2
3
4
5
6
7
8
9
10
11
12

39, Mario, 1
79, Silvia, 4
54, Juan, 2
198, Carlos, 3

46, Mara, 1
22, Felipe, 1

Carlos Contreras Bolton Estructura de Datos

La funci
on h se denomina funcion de
dispersi
on (funci
on hash).
El arreglo T es la tabla de hash o area
primaria y h(k) es la direccion o
posici
on en T de la clave k.
Una funci
on de dispersion transforma
el espacio de claves en un conjunto de
enteros de 0 a m 1, siendo m el
tama
no o capacidad de la tabla.
Si las claves son n
umeros enteros la
funci
on de dispersi
on mas simple es
h(k) = k %m.

12/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Claves equivalentes y colisiones


Si ahora agregamos al conjunto A del ejemplo anterior el
elemento: (14, Pedro, 3). El espacio de claves es: {14} C
y h(14) = 14 %13 = 1.
Vemos que tanto el elemento de clave 14 como el de clave 79
ocuparan la misma posici
on de la tabla.
Cuando dos o mas claves ocupan la misma posicion se dicen
que son claves equivalentes y se ha producido una colision.
Cuando se produce una colisi
on hay diversos caminos a tomar:
Evitar las colisiones:
Usando funciones de dispersi
on perfectas.
Aumentando la capacidad de la tabla de dispersion.

Que existan colisiones y proveer mecanismos para su


tratamiento.
Carlos Contreras Bolton Estructura de Datos

13/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones perfectas

Funcion Perfecta: Es una funci


on de dispersi
on que transforma
cada clave del espacio de claves en un valor entero
positivo distinto. Es digno calcular cuantas funciones
perfectas hay dado un conjunto de n claves y m
posiciones (1 n m).

Consideremos, por ejemplo, n = m = 2. Las posibles funciones


son:
h1 (C 1) = 0 y h1 (C 2) = 0

h3 (C 1) = 1 y h3 (C 2) = 0

h2 (C 1) = 0 y h2 (C 2) = 1

h4 (C 1) = 1 y h4 (C 2) = 1

Carlos Contreras Bolton Estructura de Datos

14/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones perfectas
Hay cuatro funciones, de las cuales solo h2 y h3 son
perfectas.
Solo el 50 % de funciones perfectas.
Pero si consideramos n = m = 3, solo el 26 %.
En general puede demostrarse que la cantidad de
funciones es mn siendo a lo sumo m!/(m n)! la
cantidad de perfectas.
As n = 4 hay 9 % de funciones perfectas y para n = 5
solo un 3 %.
Para los valores de n que ocurren en la realidad (que
esta en los ordenes de cientos de miles o incluso millones)
la busqueda de funciones perfectas es imposible.
Carlos Contreras Bolton Estructura de Datos

15/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones perfectas
Tablas con mas Capacidad

Otra opcion es usar tablas de hash con mayor capacidad.


Supongamos, igual que antes que la capacidad de la tabla
es m = 13, pero el espacio de claves es:
C = {753, 546, 695, 125, 320, 276, 402, 855, 963, 689, 603, 662, 128} y h(k) = k %13

k
753 546
h(k) 12
0

695 125 320 276 402 855 963


6
8
8
3
12 10
1

689 603 662 128


0
5
12 11

A dos claves distintas le corresponden la posicion 0,


produciendose una colision.
Otras dos van a la posicion 8, produciendose otra colision.
Tres van a 12 produciendose all dos colisiones.
Y las posiciones 2, 4, 7, y 9 estan desocupadas,
originando un 30 % de lugar desperdiciado.
Carlos Contreras Bolton Estructura de Datos

16/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones perfectas
Tablas con mas Capacidad
Si duplicamos el tama
no a m = 26 y por ende h(k) = k %26.
Obtenemos 2 colisiones pero un 57 % de lugar desperdiciado.
Para distintos valores de m:

m Colisiones
13
4
16
5
17
3
26
2

Lugares libres
13 %
50 %
41 %
57 %

Vemos que no tiene sentido agrandar demasiado la tabla.


Lo aconsejable es que su capacidad sea aproximadamente un 20 %
mayor que la cantidad de claves y que ademas sea un n
umero primo.
Al cociente entre la cantidad de claves y la capacidad de la tabla se
denomina factor de carga ( ) y es una medida de lo saturada que
esta se encuentra, esto es: = n/m.
Carlos Contreras Bolton Estructura de Datos

17/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones de Dispersion

Si m es el tamano de la tabla, la funcion de dispersion debe:


Garantizar que el valor h(k) k perteneciente al espacio
de claves este entre 0 y m 1.
Dispersar lo mas uniformemente posible (evitar que haya
un numero excesivo de colisiones y demasiados lugares
libres).
Debe ser calculable de modo eficiente, o sea, estar
compuesta de un numero reducido de operaciones
aritmeticas basicas.

Carlos Contreras Bolton Estructura de Datos

18/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones de Dispersion

No hay reglas que permitan determinar cual sera la


funcion mas apropiada para un conjunto de claves.
La implementacion de la funcion de dispersion depende
del tipo de clave.
No va a ser la misma si la clave es un int, un float o
un string.

Carlos Contreras Bolton Estructura de Datos

19/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones de Dispersion
Ejemplos

Funcion Modulo: Tambien llamada resto o residuo, toma el


resto de la division entre la clave y la capacidad
m. Es ideal que m sea un numero primo, o al
menos que sea divisible por pocos numeros.
h(k) = (k %m)
Desventajas:
Puede producir distribuciones muy poco homogeneas.
Alguna de las terminaciones de las claves tiende a
repetirse mas que otras.

Carlos Contreras Bolton Estructura de Datos

20/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Funciones de Dispersion
Ejemplos

Funcion Cuadrado: Elevamos al cuadrado la clave y tomamos


los dgitos centrales como direccion.
h(k) = bk 2 /100c %m
o
h(k) = bk 2 /cc %m
Escoger c, tal que, mc 2 k 02 , para k 0 {0, . . . , k}. Ej.:
k 0 = 1000; m = 8; c = 354; h(456) = 3.

Carlos Contreras Bolton Estructura de Datos

21/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Otras tecnicas para construir fcs. de dispersion


Ejemplos

Funciones de division: Si las claves son enteros muy grandes


para que quepan en una variable long int, se
guardan en cadenas y luego las partimos en dos
del mismo numero de dgitos y se suman,
repitiendo el proceso hasta obtener una direccion
valida.
Ejemplo:
38.998.787 3.899 + 8.787 = 12.686
12.686 126 + 86 = 212

Carlos Contreras Bolton Estructura de Datos

22/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Otras tecnicas para construir fcs. de dispersion


Ejemplos

Funciones de truncamiento: Eliminar alternativamente el


primero y ultimo dgitos, hasta obtener una
direccion valida.
Ejemplo:
38.998.787.665 899.878.766 9.987.876 98.787
878
Truncar suficientes dgito en el medio de la cadena
numerica, hasta obtener una direccion valida.
38.998.787.665 3865

Carlos Contreras Bolton Estructura de Datos

23/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Otras tecnicas para construir fcs. de dispersion


Ejemplo: Con claves de cadena de caracteres

Metodo 1: Suma de los codigos ASCII de los caracteres.


!
largo1
X
h(k) =
ascii(ki ) %m
i=0

Ejemplo: k = hola, m = 100.


h(hola00 ) = (ascii(h0 ) + ascii(o 0 ) + ascii(l 0 ) + ascii(a0 )) %100
= (104 + 111 + 108 + 97) %100 = 20

Carlos Contreras Bolton Estructura de Datos

24/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Otras tecnicas para construir fcs. de dispersion


Ejemplo: Con claves de cadena de caracteres

Metodo 2: Suma de los c


odigos ASCII de los caracteres
multiplicado por un peso que depende de la
posicion que ocupa en la clave.
h(k) =

largo1
X

!
ascii(ki ) peso i

%m

i=0

Ventaja: el codigo depende de los caracteres que forman la


clave y tambien del orden que ocupan dichos caracteres.
Desventaja: mas costosa de calcular.
Ejemplo: k = hola, m = 100, peso = 37.
h(hola00 )

= (ascii(h0 ) peso 3 + ascii(o 0 ) peso 2 +


ascii(l 0 ) peso 1 + ascii(a0 ) peso 0 ) %100
= (104 50653 + 111 1369 + 108 37 + 97) %100 = 64

Carlos Contreras Bolton Estructura de Datos

25/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

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:
Dispersi
on abierta: permite manejar los conjuntos en
un espacio potencialmente ilimitado.
Dispersi
on cerrada: utiliza un espacio fijo para
almacenamiento, as limita el tama
no de los conjuntos.

Carlos Contreras Bolton Estructura de Datos

26/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Resolucion de Colisiones

La idea general de hashing es colocar, en la forma menos


relacionada posible, la informaci
on entregada por los elementos.
De manera tal que su acceso sea eficiente y exista una adecuada
repartici
on de los mismos a lo largo de todo el espacio de
almacenamiento.
Carlos Contreras Bolton Estructura de Datos

27/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Resolucion de Colisiones
Dispersi
on abierta

Esta estrategia consiste en construir la tabla de hash


como un arreglo de listas, donde cada lista esta formada
por los elementos que tienen claves equivalentes.
Sea m = 10:

Carlos Contreras Bolton Estructura de Datos

28/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Resolucion de Colisiones
Dispersi
on abierta

Para buscar la clave se debe recorrer la lista que le


corresponda hasta encontrar nuestro elemento.
Si la funcion de dispersion distribuye uniformemente
entonces el tamano promedio de cada lista es .
Las listas pueden ser desordenadas o ordenadas.
Frecuentemente se usan listas desordenadas por su
eficiencia para la implementacion de la operacion insertar
y como generalmente son listas pequenas la busqueda no
se degrada.
Si se usa la Tabla principalmente para busquedas, es
mejor usar listas ordenadas, se aceleran las busquedas por
un factor de 2 a cambio de una insercion mas lenta.
Carlos Contreras Bolton Estructura de Datos

29/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Resolucion de Colisiones
Dispersi
on abierta

C
omo elegir el tama
no m de la tabla?
La mayor virtud de la dispersi
on abierta es que esta decision
no es crtica: si hay mas claves de las esperadas, simplemente
las b
usquedas son un poco menos eficientes.
Deben ser un m suficientemente peque
no, para desperdiciar
gran cantidad de memoria contigua con punteros a vaco.
Pero lo suficientemente grande de modo que las b
usquedas
secuenciales sean eficientes.
Idealmente se debe elegir un m que sea aproximadamente
entre 1/5 y 1/10 mayor que la cantidad de claves que se
ingresen en la tabla.
Mientras que si se ingresan menos claves de las esperadas,
tendremos b
usqueda muy eficientes con tal vez cierto
desperdicio de espacio.
Carlos Contreras Bolton Estructura de Datos

30/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Resolucion de Colisiones
Dispersi
on cerrada

En la dispersion cerrada todos los elementos se


almacenan en la propia tabla.
En este caso las colisiones se resuelven calculando una
secuencia de espacios en la tabla.
Esta secuencia explora la tabla hasta que se encuentra un
espacio en el caso de insertar o se encuentra la clave en el
caso de recuperar o eliminar.

Carlos Contreras Bolton Estructura de Datos

31/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Resolucion de Colisiones
Dispersi
on cerrada

Consiste en aplicar la funcion de dispersion, si el lugar


esta libre colocamos el elemento sino exploramos la tabla
hasta encontrar un lugar libre.
La exploracion se realiza calculando las posibles
posiciones para una clave k con la siguiente funcion:
di (k) = (h(k) + f (i)) %m para i = 1, 2, 3, . . .

Carlos Contreras Bolton Estructura de Datos

32/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Exploraci
on lineal

Se elige a f (i) = i, as la funcion de exploracion queda:


di (k) = (h(k) + i) %m para ai = 1, 2, 3, . . .
Sea m = 10:

Carlos Contreras Bolton Estructura de Datos

33/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Exploraci
on lineal

h(21) = 21 %10 = 1 y esta ocupado. Calculamos.


d1 (21) = (h(21) + 1) %10 = 2, tambien esta ocupado.
d2 (21) = (h(21) + 2) %10 = 3, esta libre. Lo insertamos:

Carlos Contreras Bolton Estructura de Datos

34/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Exploraci
on lineal

La ventaja de este enfoque es que evita el uso de punteros.


La memoria que se ahorra en los punteros se puede utilizar en
una tabla mas grande, que probablemente conduzca a menos
colisiones.
Se va a necesitar una tabla mas grande, tal que el tama
no m
sea mayor que la cantidad n de elementos.
El factor de carga es crtico, como se ve en la siguiente
grafica:

Carlos Contreras Bolton Estructura de Datos

35/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Exploraci
on lineal

En la exploracion lineal se produce ademas un problema


conocido como agrupamiento primario.
Los elementos, como vemos en el ejemplo, tienden a juntarse
y en consecuencia la b
usqueda se hace mas lenta.
Por ejemplo para buscar el elemento de clave 39, debemos
calcular:
h(39) = 39 %10 = 9 y esta ocupado. Calculamos.
d1 (39) = (h(39) + 1) %10 = 0, tambien esta ocupado.
d2 (39) = (h(39) + 2) %10 = 1, tambien esta ocupado.
d3 (39) = (h(39) + 3) %10 = 2, tambien esta ocupado.
Y as hasta que lo encontremos.

Carlos Contreras Bolton Estructura de Datos

36/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Exploraci
on lineal

La razon por la cual se producen estos agrupamientos es la


siguiente:
Supongamos que todas las posiciones de la tabla sean
equiprobables y las i posiciones anteriores a una posicion
p esten ocupadas.
Todas las claves que deberan ir a p, p 1, p 2, . . .,
p i van a ir a p, por lo tanto la probabilidad que una
clave vaya a p es (i + 1)/m. En cambio si la celda
anterior esta desocupada la probabilidad que una clave
vaya a p es 1/m.

Carlos Contreras Bolton Estructura de Datos

37/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Exploraci
on cuadratica

Este metodo mejora el problema del agrupamiento


primario (Clustering) de la exploracion lineal.
Similar al anterior, pero mientras que la funcion de
inspeccion es una funcion cuadratica f (i) = i 2 .
En una insercion cuando encontremos un lugar ocupado
avanzaremos primero 1, luego 22, luego 32 ,etc. hasta
encontrar un lugar vaco.
Si bien exploracion cuadratica mejora sustancialmente el
problema del agrupamiento primario, tiene la desventaja
de que pueden quedar celdas sin visitar (Clustering
Secundario), en particular, si la tabla esta llena en mas de
un 50 % ( > 0,5), no hay garantas de encontrar una
celda vaca si el tamano de la tabla no es PRIMO.
Carlos Contreras Bolton Estructura de Datos

38/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
C
omo borrar una clave de una tabla con exploraci
on
lineal o cuadr
atica?

No podemos simplemente borrarla.


Porque los elementos insertados
despues no van a ser encontrados, ya
que la b
usqueda va a ser interrumpida
por el agujero que dejo el borrado.
Supongamos tener la siguiente tabla
donde el valor -1 indica que esa
posici
on esta libre.

Carlos Contreras Bolton Estructura de Datos

39/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
C
omo borrar una clave de una tabla con exploraci
on
lineal o cuadr
atica?
Buscamos con exploraci
on lineal la
clave 32.
h(32) = 2 comparamos 32 con la
clave que esta en la posici
on 2, como
esta es 2, calculamos:
d1 (32) = 3, como este lugar
esta ocupado por la clave 21,
calculamos:
d2 (32) = 4, como este lugar esta libre
concluimos que la clave 32 no esta en
la tabla, lo que es correcto.
Supongamos, ahora que
eliminamos el 2.
Carlos Contreras Bolton Estructura de Datos

40/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
C
omo borrar una clave de una tabla con exploraci
on
lineal o cuadr
atica?

Buscamos ahora la clave 30.


La secuencia va a ser 0, 1, 2.
Como la posici
on 2 esta libre
concluiremos que el 30 no esta en la
tabla lo cual es err
oneo.
Eso se debe que la posici
on 2 antes
estuvo ocupada y ahora esta libre.

Carlos Contreras Bolton Estructura de Datos

41/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
C
omo borrar una clave de una tabla con exploraci
on
lineal o cuadr
atica?
Hay que diferenciar una posicion que esta vaca porque
nunca fue ocupada.
Y otra que esta vaca pero alguna vez estuvo ocupada.
Se puede agregar a cada elemento una marca o centinela
cuyos posibles valores pueden ser:
Valor de marca
0
1
2

Carlos Contreras Bolton Estructura de Datos

Significado
libre (nunca ocupado)
ocupado
libre (eliminado)

42/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Dispersi
on doble

Es la solucion para eliminar casi completamente el


agrupamiento tanto primario como secundario de los
metodos anteriormente, Donde:
di (k) = (h1 (k) + ih2 (k)) %m para i = 1, 2, . . .
Tanto h1 como h2 son dos funciones de dispersion.

Carlos Contreras Bolton Estructura de Datos

43/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion cerrada
Dispersi
on coalescente

Es similar a la dispersion abierta excepto que todos los


elementos se almacenan en la propia tabla.
Esto se consigue permitiendo que en cada celda se
almacene un elemento y un puntero.
Estos punteros almacenan el valor 1 o bien la direccion
de alguna celda.
Durante la insercion una colision se resuelve insertando el
elemento con el numero mas alto que esta libre y
haciendo el encadenamiento.

Carlos Contreras Bolton Estructura de Datos

44/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente
Ejemplo

Sea m = 7 y h(k) = k %7 y las claves {4,


8, 9, 2, 13, 6}.

Carlos Contreras Bolton Estructura de Datos

45/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente
Ejemplo

Insertar el 4, el 8 y el 9.

Carlos Contreras Bolton Estructura de Datos

46/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente
Ejemplo

h(2) = 2, pero este lugar esta ocupado


por la clave de valor 9.
Se guarda en la posici
on mas alta que
esta vaca.
El puntero de la clave 9 toma el valor 6.

Carlos Contreras Bolton Estructura de Datos

47/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente
Ejemplo

Pero como esta ocupada la guardamos en


la posicion 5.

Carlos Contreras Bolton Estructura de Datos

48/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente
Ejemplo

Finalmente al insertar la clave de valor 6.

Carlos Contreras Bolton Estructura de Datos

49/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente
Ejemplo

Buscar
clave

h(k) = k %7

h(6) = 6

15

h(15) = 1

20

h(20) = 6

6 es igual a 2? NO
6 es igual a 13? NO
6 es igual a 6? SI
15 es igual a 8? NO
20 es igual a 2? NO
20 es igual a 13? NO
20 es igual a 6? NO

Carlos Contreras Bolton Estructura de Datos

prox. direccion: 5
prox. direccion: 3

BUSQUEDA
EXITOSA
prox. direccion: -1

BUSQUEDA
NO EXITOSA
prox. direccion: 5
prox. direccion: 3

BUSQUEDA
NO EXITOSA

50/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente
Ejemplo

En la eliminacion debemos actualizar los


punteros.
Por ejemplo, si eliminamos el 13.

Carlos Contreras Bolton Estructura de Datos

51/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Dispersion coalescente

Una variante que mejora el manejo de los espacios libres


es dividir la tabla en dos partes:
Zona principal.
Zona de desbordamiento o excedentes.

La funcion hash da resultados que caen solo en la zona


principal.
Estudios empricos recomiendan alrededor de 15 % a la
zona de excedentes.
Mejora el tiempo a costa de espacio.

Carlos Contreras Bolton Estructura de Datos

52/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Siempre hemos considerado que el tamano m de la tabla
de hash es suficientemente grande.
Que pasa si realizamos una insercion en una tabla llena?
Esto se denomina desbordamiento de la tabla.
Si es dispersion abierta, sabemos que nos es problema,
dado que el tamano total de las cadenas solo
esta limitado por la memoria disponible.
En la dispersion cerrada es un problema muy importante.
Consideraremos dos tecnicas que resuelven el problema del
desbordamiento de la tabla asignando memoria adicional.
Rehashing.
hashing Extensible.
Carlos Contreras Bolton Estructura de Datos

53/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Rehashing

Cuando las tablas se llenan demasiado, el tiempo de


ejecucion de algunas operaciones va a empezar a ser muy
largo.
Sobre todo cuando combinamos muchas inserciones con
borrados.
Una solucion es crear otra tabla que sea el doble de
grande (con una nueva funcion de dispersion asociada).
Y procesar la tabla de dispersion original entera,
computando el nuevo valor de dispersion para cada
elemento e insertandolo en la nueva tabla.
Esta operacion se denomina Rehashing o redispersion.

Carlos Contreras Bolton Estructura de Datos

54/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Rehashing

Es una operacion muy costosa (O(n)), pero dado que no


va a pasar muy frecuentemente.
No esta nada mal y su efecto va a pasar practicamente
desapercibido.
Solo el desafortunado usuario cuya insercion provoque
una redispersion va a sentir el efecto.
En que momento aplicar la redispersion queda a criterio
del programador, algunas posibilidades son:
Aplicar redispersi
on cada vez que la tabla este llena en
mas de un 50 %.
Aplicar redispersi
on s
olo cuando una insercion falla.
Aplicar redispersi
on cuando el factor de carga supera
un valor estipulado (por ejemplo 0.8).
Carlos Contreras Bolton Estructura de Datos

55/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Dispersi
on Extensible

Es una variante mas efectiva de la redispersion.


En lugar de tener una unica tabla de dispersion se tienen
varias.
Supongamos que un valor adecuado para m = 43,
entonces en lugar de tener una tabla de 43 posiciones
tendramos, por ejemplo, 4 de 11.
Cuando la tabla grande este ocupada en
aproximadamente 34 posiciones ( 0,80) es el
momento de aplicar la redispersion.
Mientras que en las tablas de 11 elementos la redispersion
habra que aplicarla cuando esten ocupados unos 9
lugares.
Carlos Contreras Bolton Estructura de Datos

56/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Dispersi
on Extensible

En la dispersion extensible el proceso de dispersion se


realiza en dos partes.
1

Se calculan los primeros bits de la clave para ver que


tabla le corresponde.
Luego se aplica la funci
on residuo para calcular la
posicion dentro de la tabla.

Mas formalmente, si D es el numero de bits usados para


definir la tabla, la cual a veces se llama directorio, el
numero de entradas en el directorio es 2D.
Supongamos que nuestros datos consisten en enteros de
seis bits y D = 2 (el directorio tendra como entradas 00,
01, 10 y 11).
Carlos Contreras Bolton Estructura de Datos

57/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Dispersi
on Extensible

Claves = {40, 11, 32, 4, 44, 57, 56, 8, 46, 20, 24, 10}
Como 40 en binario es 101000 le corresponde la entrada 10, y
como h(40) = 40 %11 = 7, ocupara la posici
on 7.
Realizando las mismas operaciones para los demas.

Carlos Contreras Bolton Estructura de Datos

58/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Dispersi
on Extensible

Si ahora insertamos las claves 36, 43, 39, 38, 45.


Como la tabla de entrada 10 tiene un factor de carga de
aproximadamente 0.8.
Ampliamos el tamano del directorio, no el de la tabla.
As D pasa a valer 3.

Carlos Contreras Bolton Estructura de Datos

59/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Dispersi
on Extensible

Carlos Contreras Bolton Estructura de Datos

60/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Desbordamiento de la tabla
Dispersi
on Extensible

Se Observa que las tablas que no fueron partidas estan


apuntadas por dos entradas de directorio adyacentes.
Si por ejemplo se llena la tabla que esta apuntada por 000
y 001, no duplicamos el directorio sino que creamos una
nueva tabla que sera apuntada por 001 y redispersamos
solo los elementos de esa tabla.
La ventaja de esta estrategia es que se redispersan tablas
mas pequenas con el consecuente ahorro de tiempo.

Carlos Contreras Bolton Estructura de Datos

61/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Conclusion
Las tablas de hash se pueden usar para implantar las
operaciones insertar y buscar en tiempo medio constante.
Es de especial importancia cuidar detalles como el factor
de carga cuando se emplean tablas de dispersion, ya que
de otra forma las cotas de tiempo no son validas.
Tambien es importante escoger una buena la funcion de
dispersion.
Dispersion abierta:
El factor de carga debe ser cercano a 1, aunque el
rendimiento no se degrada significativamente a menos
que el factor de carga crezca mucho.

Carlos Contreras Bolton Estructura de Datos

62/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Conclusion
Dispersion cerrada
El factor de carga no debe exceder 0.5. Si se usa
exploracion lineal, el rendimiento se degenera con
rapidez conforme el factor de carga se acerca a 1.

En comparacion con los arboles binarios de busqueda


(ABB), sabemos que en estos las operaciones de insertar
y buscar son O(log n) y permiten rutinas que permiten
orden y por ello son mas potentes.
Con una tabla de dispersion, no es posible encontrar el
elemento mnimo ni maximo.
Tampoco es posible buscar parte de la clave.

Carlos Contreras Bolton Estructura de Datos

63/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Conclusion
Un ABB podra encontrar rapidamente todos los elementos
en un intervalo dado, no as las tablas de hash.
Ademas, la cota O(log n) no es mucho mas que O(1), pero si
la entrada de datos es mas o menos ordenada puede provocar
un rendimiento deficiente en los arboles.
Sabemos que los arboles balanceados son complejos de
implementar, as que si no se requiere informacion de
ordenamiento y hay alguna sospecha de que la entrada podra
estar ordenada. Por ende ocupar Tablas de hash.
Las aplicaciones de la dispersi
on son abundantes, como:
Los compiladores para seguir el rastro de las variables
declaradas en el c
odigo fuente,
Problemas de teora de grafos.
Programas de juegos.
Revisores de ortografa en lnea.
Carlos Contreras Bolton Estructura de Datos

64/65

Introducci
on Definiciones y Conceptos B
asicos Funciones de Dispersi
on Resoluci
on de Colisiones Desbordamiento de la tabla

Tarea
1

Sea T una tabla hash de tamano 10 y h la siguiente


funcion de dispersion
h(k) = (4 + 3k)

mod 10

Se requieren insertar en T los siguiente elementos con


claves 1, 11, 5, 15, 55, 6, 26, 90, 50, 20 en ese mismo orden
y usando h.
Determine el resultado de T resolviendo las colisiones por
dispersion cerrada.
Genere una tabla hash que funcione como una agenda
telefonica, donde se almacene el nombre de la persona y
su numero telefonico. Utilice como clave el nombre de la
persona.

Carlos Contreras Bolton Estructura de Datos

65/65

You might also like