Anda di halaman 1dari 46

Karim Guevara Puente de la Vega

UCSM, 2014
Hashing - Dispersin
Agenda
Introduccin
Tablas hash/dispersin
Funciones hash
Factor de carga
Colisiones
Resolucin de colisiones
Longitud de bsqueda
Prediccin de distribucin
Hashing extensible o dinmico


2
Introduccin
3
Si se tiene 100 empleados con clave 99999?
Se necesitara un estructura de 10000 elementos?

La dispersin es un mtodo para referenciar elementos
directamente en una tabla realizando transformaciones
aritmticas sobre las claves.
Evita comparaciones.
No permite algoritmos eficientes para acceder a todos
los elementos de la tabla
Las claves van a mapearse a direcciones diferentes.
Dos o mas claves diferentes son transformadas a la
misma direccin (sinnimos): Colisin
Tabla Hash
4
Es un conjunto formado por un nmero arbitrario de
elementos distintos (del mismo tipo).
Estructuras utilizadas en aplicaciones que manejan
secuencia de elementos
Cada elemento tiene asociado una clave nica
Objetivo: realizar las bsquedas o eliminaciones de
un registro en tiempo constante.
Las tablas de hash constituyen una herramienta
importante para la manipulacin y almacenamiento
de datos en memoria secundaria.

Funcin Hash
5
Es la que se va a encargar de transformar las
claves en direcciones de la tabla.
Se llama funcin ideal, a aquella que distribuya
a todos los elementos lo ms uniformemente posible
sobre la gama de valores ndice.
Si tabla almacena M items,
entonces:
Requiere de una funcin que
transforme claves a enteros
entre [0, M-1] o [1,M].
Funcin Hash
6
Definicin:
Dado un conjunto X de claves posibles y un conjunto
D de direcciones de memoria, una funcin dispersin
o hash para una clave K se define como:
hash(k): llave localidad de la tabla

Dadas ki < k < kj, no necesariamente
hash(ki) < hash(k) < hash (kj).
Una buena funcin hash satisface:
Es fcil de clcular.
Debe minimizar colisiones.

Aritmtica modular
7
Toma el resto de la divisin entre la clave y el
numero de M de items (tamao de la tabla).
Proporciona un valor entre 0 y M1.
h(x) = x mod M

Para una mayor uniformidad en la distribucin, el
valor de M debe ser primo o que sea divisible por
pocos nmeros (m)
h(x) = x mod m
Funciones hash
Aritmtica modular
8
P.e.: si la tabla tiene un tamao de 995 posiciones
(direcciones), y m es 997
h(42325431) = 42325431 mod 997 = 787
h(35623456) = 35623456 mod 997 = 646
h(23452463) = 23452463 mod 997 = 32

Sumatoria de valores ASCII: tomar el resto entre la
sumatoria de los valores ASCII de la cadena de
caracteres y el nmero M (tamao de la tabla).
for (i=0; letra != \n; i++)
suma += Letra[i];
h(k) = (suma mod M)
Funciones hash
Aritmtica modular
9
P.e.: sea la clave LOWELL, hallar el valor hash:
LOWELL = 76 79 87 69 76 76
L O W E L L

Entonces:
7679 mod 997 = 700
700 + 8769 = 9469 mod 997 = 496
496 + 7676 = 8172 mod 997 = 196
Funciones hash
Plegado
10
Dividir la clave en partes iguales y sumarlas o
multiplicarlas.
Esta suma o producto se puede hacer directamente
o uniendo los extremos consecutivos con un efecto
acorden:
Plegado por desplazamiento
Plegado por las fronteras.
Se desprecian dgitos mas significativos que se
obtengan del acarreo.

Funciones hash
Plegado
11
Si el resultado excede el rango de direcciones
Aplicar mdulo
Descarta el dgito ms significativo
Funciones hash
Plegado
12
P.e.: si el rango de direcciones es [0 - 995]
Claves son cadenas de caracteres
Funciones hash
Mitad del cuadrado
13
Clcular el cuadrado de la clave K y extraer los
dgitos centrales como direccin.
El nmero de dgitos a tomar es determinado por el
rango del ndice.

h(k) = digitos_centrales(k
2
)

Utilizar siempre las mismas posiciones de K al
cuadrado para todas las claves.
Funciones hash
Mitad del cuadrado
14
P.e.: sean las siguientes claves: 245643, 245981,
257135. Y el contenedor tiene una capacidad de
1000 elementos. Los valores hash para estas claves
seran:
Funciones hash
Transformacin de la base
15
Implica convertir la llave a alguna otra base
numrica que no sea con la que se est trabajando.
Tomar el resultado del mdulo con la mxima
direccin como la direccin de dispersin.
P.e.: sean los siguientes datos:
Direcciones; [0 - 99]
Clave: 453 (base decimal)
Equivalente en base 11: 382
Entonces:
382 mod 99 = 85

Funciones hash
Factor de carga (densidad de empaquetamiento)
16
Proporcin entre el nmero de registros por almacenar
(r) y el nmero de espacios disponibles (N):
= r / N
Medida de la cantidad de espacio que se utiliza en
realidad
Cuantos ms registros estn empaquetados en un
determinado espacio de la tabla (archivo), ms
probable es que ocurra una colisin al agregar un
registro nuevo.
P.e.. si r=75, N=100 entonces:
= 75 / 100 = 0.75 = 75%


Colisin
17
Sean dos claves x, y distintas, se dice que son
sinnimas para la transformacin h si:
h(x) = h(y) COLISIN
P.e.::
h(123445678) = 123445678 mod 101 = 44
h(123445880) = 123445880 mod 101 = 44

Se produce un desbordamiento al tratar de
insertar un nuevo registro con una clave cuya
direccin ya est ocupada.

Rehasing: hashing cerrado - direc. abierto
18
Requiere de una tabla mas grande: M sea mayor
que la cantidad N de items.
Los espacios vacos en la tabla permiten resolver las
colisiones.
Factor de carga no debe exceder del 50% para
una buena performance.
<= 0.5

Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
19
Bsqueda lineal- lineal probing (Saturacin
progresiva)
Dado el registro R de clave K, donde h(K) = P, y P
est ocupada por otro registro:
Buscar Q (primera posicin disponible que siga a P)
y asignar R a Q.
Bsqueda secuencial.
A veces es necesario que el contenedor tenga el
comportamiento de un arreglo circular

Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
20
Bsqueda lineal lineal probing (Saturacin
progresiva)
P.e.:
Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
21
Bsqueda lineal lineal probing (Saturacin progresiva)
Para un chico:
La mayora de las bsquedas encuentran una posicin
vaca en unos pocas inspecciones en la tabla.
Si cercano a 1:
Una bsqueda puede llevar un gran nmero de
inspecciones e incluso puede caer en un ciclo infinito.
Desventaja:
Se generan clusters (primario) bsqueda secuencial.
Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
22
Bsqueda cuadrtica
Mejora el problema del agrupamiento primario
(Clustering) de la Bsqueda Lineal.
La diferencia radica en que, la funcin de
inspeccin de Bsqueda Lineal es f(i) = i ; ahora
vamos a usar una funcin cuadrtica f(i) = i
2
:
1
2
, luego 2
2
,luego 3
2
,etc.
Es decir, si P es la direccin base, se inspecciona:
P, P+1
2
, P+2
2
, P+3
2
, . . ., P+i
2
,
P, P+1, P+4, P+9, . . ., P+i
2
.
Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
23
Bsqueda cuadrtica quadratic rehash
Desventaja:
Pueden quedar celdas sin visitar (Clustering
Secundario).
Si la tabla esta llena en ms de un 50% (>0.5) , no
hay garanta de encontrar una celda vaca si el
tamao de la tabla no es PRIMO.
Si el tamao de la tabla es un nmero primo est
garantizado que podremos insertar un nuevo
elemento.

Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
24
Doble hashing
Eliminar cualquier clase de agrupamiento
Involucra el uso de dos funciones de hashing: h1, h2.
h1 es la funcin primaria de hashing (primary hash
function), usada primero para determinar la
posicin en la cual el registro debe ser guardado.
Si esa posicin esta ocupada, la funcin de rehashing:
h2 es utilizada sucesivamente.
Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
25
Eliminacin de elementos
Espacio liberado por eliminacin puede obstaculizar
las bsqueda posteriores.
Reutilizar el espacio liberado.
Estrategas:
Aplicar rehashing para los items insertados
posteriormente.
Utilizar marcas de reutilizacin. que ocupe el
espacio de la clave borrada.
Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
26
Eliminacin de elementos
Marcas de reutilizacin:
No rompen secuencia de bsqueda.
Reutilizan espacio liberado
Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
27
Eliminacin de elementos
Marcas de reutilizacin:
Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
28
Por compartimentos - cubetas
Algunas veces, es conveniente que los registros se
agrupen en bloques en lugar de almacenarse
individualmente.
Si en cada celda se tiene espacio para una
cantidad fija de registros se habla de bloque.
La direccin de compartimento base se determina
por dispersin

Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
29
Por compartimentos cubetas

Resolucin de colisiones
Hashing cerrado (direccionamiento abierto)
30
Por compartimentos cubetas
P.e.: sean 200 alumnos donde la clave est dada
por los tres ltimos dgitos del DNI. La tabla hash
tiene una capacidad de 1000 compartimentos
cada uno de tres registros:

Resolucin de colisiones
Encadenamiento: Hashing abierto-encad. directo
31
La tabla de dispersin contiene un registro y
referencias a listas encadenadas (u otras
estructuras) donde estn los elementos que
pertenecen a esa posicin.
El costo promedio de una bsqueda usando
encadenamiento directo es 1 + L/2 es decir O(L).
Por tanto, el factor de carga debe ser cercano a
1:
= N/M , (largo promedio de cada lista ).
h(k) es el numero de lista enlazada que contiene el
registro de clave k.



Resolucin de colisiones
Encadenamiento: Hashing abierto-encad. directo
32
Resolucin de colisiones
Longitud de bsqueda
33
Se refiere al nmero de accesos requeridos para extraer un
registro de la memoria secundaria.
En la dispersin, la longitud de bsqueda se incrementa
cada vez que ocurre una colisin.
Si un registro est a gran distancia de su direccin base, la
longitud de bsqueda puede ser inaceptable.
Longitud media de bsqueda:

longitud total de bsqueda
nmero total de registros
Longitud media de bsqueda
34

Prediccin de la distribucin
Funcin Poisson





Donde:
N = el nmero de direcciones disponibles
r = el nmero de registros que se van a almacenar,
x= el nmero de registros asignados a una direccin
dada.




r ! x
e N / r
x P
N / r
x

35
Prediccin de la distribucin
P.e.: si N=1000 y r=1000, entonces r/N = 1

la probabilidad de que una direccin determinada no tenga
llaves dispersadas a ella (x=0) es:








368 0
1
1
1
1
1
.
!
e
P




368 0
0
1
0
1
0
.
!
e
P

36



184 0
2
1
2
1
2
.
!
e
P




061 0
3
1
3
1
3
.
!
e
P

Hashing Extensible
37
Es una combinacin perfecta del hashing y de la
bsqueda por la raz
Diseado para localizar cualquier registro de datos
como mximo en 2 accesos al medio externo de
almacenamiento
Directorio o ndice
Pgina Hoja
En memoria se mantiene un directorio o ndice de las
pginas clasificadas segn un nmero especifico de
bits de la clave

Hashing Extensible
38
Se caracteriza por que el ndice del hashing es dinmico:
Puede expandirse y contraerse.
En nmero de entradas es potencia de 2
Cada entrada contiene punteros a pginas
Una pgina
Tiene tamao fijo (M)
Contiene claves y sus registros o punteros a otros registros.
La funcin hashing usada puede ser cualquiera que sea
apropiada.


Hashing Extensible
39
Tener en cuenta dos factores:
Un nmero d, que indica la porcin de la direccin hash que
vamos a utilizar como ndice del directorio. Se le denomina
profundidad del directorio.

Un nmero d, tal que d <= d , indica el nmero de dgitos
de la direccin hash comunes a todos los registros de una
pgina. Llamado profundidad de una pgina.

Tamao del directorio es de 2
d
.


Hashing Extensible
40

d
Pginas
d
Directorio
Divisin y Expansin
41
La divisin de una pgina se da cuando se ha excedido
el factor de carga mximo establecido (M) para las
pginas.
La divisin es de uno a dos.
Si en el directorio se tiene dos o ms entradas
direccionando a la pgina que ser dividida, no hay
expansin.
Se incremente d de la pgina que se dividi y este valor
asume la nueva pgina.
La expansin del directorio ocurre, cuando slo se tenga
una entrada en el directorio
Se debe de tomar ms dgitos de la direccin (aumentar d),
por lo tanto, el tamao del directorio se duplica.

Divisin y Expansin
42
P.e.: en la estructura insertamos la clave 10010
Unin y Contraccin
43
Operaciones inversas a la divisin y expansin.
La unin consiste en la fusin de dos pginas, juntando
las claves de las dos en una de ellas.
Para poder fusionarlas se deben cumplir 3 condiciones:
El factor de carga de ambas sea menor o igual al 50%.
Las pginas deben tener el mismo valor de d.
Las direcciones de los registros deben tener el valor
comn en los d' - 1 primeros dgitos.
Una vez fusionadas, una pgina se elimina, y el valor
de d de la otra disminuye en 1.

Unin y Contraccin
44
Al ir uniendo las pginas, hay muchas entradas del
directorio que apuntan a una misma pgina.
La contraccin del directorio ocurre cuando todos
las pginas tienen un valor en d menor al valor d
del directorio.
El directorio se contrae a la mitad de su tamao
Se combinan las entradas con d-1 bits iguales.
El valor d disminuye en 1.

Unin y Contraccin
45
P.e.: eliminar la clave 10011 de la estructura
Unin y Contraccin
46
P.e.: eliminar la clave 10011 de la estructura