Você está na página 1de 67

Mtodos de Dispersin

Prof. Robert Espinoza


Los algoritmos cuya complejidad son del orden de
O(log
2
(n)) suelen ser ms que aceptables en la
bsqueda interna, pero es posible que no lo sean en
otras situaciones como la bsqueda externa.
Una estrategia alternativa es usar un mtodo que nos
diga directamente en que posicin est el elemento
cuya clave proporcionamos, es decir localizar el dato
en forma directa, sin recorrer algunos datos antes de
localizar al buscado.
ste mtodo se usa para implementar inserciones,
eliminaciones y bsquedas en un tiempo medio
constante, independiente del nmero de elementos.

Mtodos de Dispersin
Permite aumentar la velocidad de bsqueda sin
necesidad de tener los elementos ordenados.
Todos los elementos identificados por una clave que
debe de ser nica.
Para usar esta estrategia necesitamos:
Una estructura llamada tabla de dispersin que
almacene las claves con un valor asociado para acceder
directamente a cualquier posicin.
Una funcin llamada de dispersin que dada una clave,
nos devuelva directamente la posicin donde debe
guardarse el elemento de esa clave.


Mtodos de Dispersin
La estructura de datos ideal para la tabla de
dispersin es un arreglo de tamao fijo N que
contiene las claves (elementos de la tabla).
Una funcin de dispersin establecer la
correspondencia de cada clave con algn nmero en el
intervalo [0, N-1]
Las tablas de dispersin se usan por ejemplo:
Para representar diccionarios en los que se busca una
palabra (clave) y se devuelve su definicin.
Para consultar una gua telefnica por nombre (clave)
Tablas de Dispersin (Hashing Tables)
Tablas de Dispersin (Hashing Tables)
0
1
2 Ana
3
4 Juan
5 Eva
6
7 Felipe
8
Funcin de Dispersin (Hash)
Es una funcin que transforma una clave a un valor dentro
de un determinado rango que se utiliza como posicin para
insertar un objeto dentro de una tabla de dispersin.
Posicin = H(clave)
La funcin Hash (H) aplicada a la clave genera un ndice
entre 0 y N-1 del arreglo de tamao N, que permite acceder
directamente al elemento.
Funcin de Dispersin (Hash)
Una funcin de dispersin perfecta debe ser:
Fcil y rpida de calcular.
Inyectiva, es decir a claves distintas les debera asignar
posiciones distintas dentro del arreglo.
Sobreyectiva, es decir distribuir homogneamente las
claves en todas las posiciones del arreglo.
Si disponemos de dicha funcin, los algoritmos de
insercin, bsqueda y eliminacin son triviales.
Basta con acceder a la posicin que devuelve la funcin
de dispersin.

Funcin de Dispersin (Hash)
Sin embargo, no es fcil encontrar una funcin de
dispersin perfecta.
En la mayora de los casos tenemos un conjunto de claves
posibles muy grande, del que slo almacenaremos en la
tabla un subconjunto pequeo que no conocemos a priori.
En esta situacin, la funcin tiene que asociar a varias
claves la misma posicin, con lo que deja de ser inyectiva.
Si la funcin de dispersin relaciona varias claves con la
misma posicin es lo que se conoce como colisin.
H(K
1
) = d, H(K
2
) = d y K
1
K
2
En esta situacin se complican los algoritmos porque
es necesario resolver la colisin.


Por ejemplo, supongamos que almacenamos la
informacin de 100 alumnos cuyos cdigos son
nmeros del 1 al 100
En este caso definiremos un arreglo de 100 elementos.
Los datos de cada alumno ocuparn la posicin del
arreglo que corresponda con el cdigo.
Por lo regular las claves son cadenas de caracteres o
son valores muy grandes o no se corresponden con
los ndices del arreglo.
Se debe usar una funcin hash que convierta la clave.
La longitud y las propiedades de las claves influirn en la
eleccin de una buena funcin de dispersin.




Funcin de Dispersin (Hash)
Consiste en tomar el resto de la divisin de la clave
entre el nmero de componentes del arreglo.
Si N es el tamao del arreglo y K es la clave a buscar.
H(K) = K mod N
N debe ser primo o divisible entre muy pocos nmeros.
Si N no es un nmero primo, se debe considerar el valor
ms cercano.
Si tuviramos una tabla con N=10 y todas las claves
terminaran en cero, la dispersin con esta funcin no
nos valdra.
Funcin hash por mdulo: divisin
Supongamos que son 100 las direcciones que
debemos asignar a los elementos (0 al 99).
Consideremos adems las claves K
1
=6359 y K
2
=8459
Si N = 100, tenemos
H(K
1
) = 6359 mod 100 = 59
H(K
2
) = 8459 mod 100 = 59
Se produce una colisin.
Si N = 101, primo cercano a 100 el resultado cambia
H(K
1
) = 6359 mod 101 = 97
H(K
2
) = 8459 mod 101 = 76
Se ha eliminado la colisin.


Funcin hash por mdulo - Ejemplos
Funcin hash cuadrado
Consiste en elevar al cuadrado la clave y tomar los
dgitos centrales como direccin.
El nmero de dgitos queda determinado por el rango
del ndice del arreglo.
Si K es la clave a buscar, la funcin estara definida
como:

) ( _ ) (
2
K centrales dgitos K H
Funcin hash cuadrado - Ejemplo
Sea N = 100 el tamao del arreglo y sus direcciones
los nmero entre 0 y 99. Adems las claves son
K
1
= 7 259 y K
2
= 9 359
Aplicamos la funcin hash cuadrado

(K
1
)
2
= 52 693 081
(K
2
)
2
= 87 590 881

H(K
1
) = dgitos_centrales (52 693 081) = 93
H(K
2
) = dgitos_centrales (87 590 881) = 90


Funcin hash por Plegamiento o
Doblamiento
Consiste en dividir la clave en partes de igual nmero
de dgitos aunque la ltima puede tener menos, y
operar con ellas.
Se toma como direccin los dgitos menos
significativos.
Las operaciones entre las partes pueden ser sumas o
multiplicaciones.
Sea K la clave del dato a buscar. K est formada por
los dgitos d
1
, d
2
, ..., d
n
. La funcin se define:
)) ... ( ... ) ... ( ) ... (( ) (
1 1 n l j i i
d d d d d d DgMenSig k H

Sea N = 100 el tamao del arreglo y sus direcciones los
nmero entre 0 y 99. Adems las claves son
K
1
= 7259 y K
2
= 9359.

Aplicamos la funcin hash por plegamiento
H(K
1
) = digmensig (72 + 59) = digmensig (131) = 31
H(K
2
) = digmensig (93 + 59) = digmensig (152) = 52

De la suma de las partes se toman solamente dos
dgitos porque los ndices del arreglo varan del 0 al 99


Funcin hash por Plegamiento o
Doblamiento - Ejemplo
Funcin hash por Truncamiento
Consiste en tomar algunos dgitos de la clave y formar
con ellos una direccin.
Es el ms sencillo, pero ofrece menos uniformidad en
la distribucin de claves.
Sea K la clave del dato a buscar. K est formada por
los dgitos d
1
, d
2
, ..., d
n
. La funcin sera:
) ... , ( ) (
2 1 n
d d d tos ElegirDgi k H
La eleccin de dgitos es arbitraria.
Sea N = 100 el tamao del arreglo y sus direcciones los
nmero entre 0 y 99. Adems las claves son
K
1
= 7259 y K
2
= 9359.
Aplicamos la funcin hash por truncamiento
H(K
1
) = ElegirDgitos (7259) = 75
H(K
2
) = ElegirDgitos (9359) = 95
En el ejemplo se toman el primero y tercer nmeros de
la clave y se unen de izquierda a derecha.

Funcin hash por Truncamiento -
Ejemplo
En general, cuando aparecen letras en las claves se
suele asociar a cada una un entero con la finalidad de
convertirlas en numricas.
Por ejemplo:
A B C D Z
01 02 03 04 27
Si la clave fuera ADA, su equivalente sera 010401.
Si la clave tuviera letras y nmeros, por ejemplo Z4F21,
su equivalente sera 2740621.
Otra alternativa sera usar el cdigo ASCII asociado.
Una forma obtenida la clave numrica, se puede usar
cualesquiera de las funciones estudiadas.

Funcin hash con claves de cadena
Funcin hash con claves de cadena-
Ejemplos
Opcin 1. Sumar los cdigos ASCII.
Mtodo Dispersin1 (Clave, TamaoClave, N)
Valor ASCII(Clave[0])
Para i desde 1 hasta TamaoClave-1 hacer
valor valor + ASCII(Clave[i])
fin para
Devolver valor mod N
Fin Mtodo
Es una funcin fcil de implementar y se ejecuta con
rapidez.
Pero si el tamao de la tabla es grande, sta funcin
no distribuye bien las claves, por ejemplo:
Si N = 10007 y las claves tienen 8 caracteres, la funcin
slo toma valores entre 0 y 1016 = 127*8

Funcin hash con claves de cadena-
Ejemplos
Opcin 2. Suponer que la clave tiene al menos tres
caracteres.
Mtodo Dispersin2 (Clave, TamaoClave, N)
Devolver (ASCII(Clave[0]) + 27*ASCII(Clave[1]) +
729 * ASCII(Clave[2])) mod N
Fin Mtodo
Funcin hash con claves de cadena-
Ejemplos
Si los primeros caracteres son aleatorios y el tamao
de la tabla es 10 007, esperaramos una distribucin
bastante homognea.
Desafortunadamente, los lenguajes naturales no son
aleatorios
Aunque hay 27
3
= 17 576 combinaciones posibles, en un
diccionario el nmero de combinaciones posibles
diferentes es menor que 3 000.
Slo un porcentaje bajo de la tabla puede ser
aprovechada por la dispersin.

Funcin hash con claves de cadena-
Ejemplos
Opcin 3. Intervienen todos los caracteres de la clave.
Funcin basada en la regla de Horner.


1
0
] 1 [ ( 32
ave LongitudCl
i
i
i ave LongitudCl clave ascii
Mtodo Dispersin3 (Clave, TamaoClave, N)
Valor ASCII(Clave[0])
Para i desde 1 hasta TamaoClave-1 hacer
valor (32 * valor + ASCII(Clave[i])) mod N
fin para
Devolver valor
Fin Mtodo
Por ejemplo, clave = abcd
(ascii(a) + 32.ascii(b) + 32
2
.ascii(c) + 32
3
ascii(d)) mod N

Funcin hash con claves de cadena-
Ejemplos
La multiplicacin por 32 no es realmente una
multiplicacin sino el desplazamiento de cinco bits.
Con lenguajes que permitan el desbordamiento, el
bucle se debera escribir sin la operacin mod, se
aplicara una sola vez justo antes de volver.
Si las claves son muy grandes, no se usan todos los
caracteres.
Funcin hash con claves de cadena-
Ejemplos
La eleccin de un mtodo adecuado para resolver
colisiones es tan importante como la eleccin de una
buena funcin hash.
Normalmente, cualquiera sea el mtodo elegido resulta
costoso tratar colisiones.
Es por ello que se debe hacer un esfuerzo para
encontrar la funcin que ofrezca la mayor uniformidad
en la distribucin de las claves.
La forma ms natural de resolver las colisiones es
reservar una celda por clave, pero puede tener un alto
costo en memoria.
Se debe analizar otras alternativas para equilibrar el
uso de la memoria con el tiempo de bsqueda.
Solucin de colisiones
Mtodos ms utilizados.
Dispersin cerrada. Si ocurre una colisin se buscan
celdas alternativas hasta encontrar una vaca.
Reasignacin
Prueba Lineal
Prueba cuadrtica
Doble direccin hash
Arreglos Anidados
Dispersin abierta. Se ampla la capacidad de cada
casilla de manera dinmica.
Encadenamiento
Solucin de colisiones
Detectada la colisin, se recorre el arreglo
secuencialmente a partir del punto de colisin,
buscando el elemento.
El proceso concluye cuando se halla el elemento o se
llega a una posicin vaca.
Se trata el arreglo como una estructura circular, el
elemento que sigue al ltimo es el primero.
La principal desventaja es que existe un fuerte
agrupamiento alrededor de ciertas claves, mientras
que en otra puede estar vaco.
A concentraciones de claves muy frecuentes, la
bsqueda principalmente ser secuencial.

Reasignacin por prueba lineal
Sea A un arreglo de 10 elementos. Sean las claves 25,
43, 56, 35, 54, 13, 80 y 104 asignadas segn la funcin
hash H(K) = K mod 10

Reasignacin por prueba lineal - Ejemplo
0 80
1
2
3 43
4 54
5 25
6 56
7 35
8 13
9 104
K H(K)
25 5
43 3
56 6
35 5
54 4
13 3
80 0
104 4
Reasignacin por Prueba Cuadrtica
Es similar al anterior con la diferencia de que en este
mtodo las direcciones alternativas se generarn
como:
D + 1
D + 4
D + 9

D + i
2
Esta variacin permite una mejor distribucin de las
claves en colisin.
Desventaja es que existe un agrupamiento alrededor
de ciertas claves y casillas no visitadas.
Sea A un arreglo de 10 elementos. Sean las claves 25,
43, 56, 35, 54, 13, 80, 104 y 55 asignadas segn la
funcin hash H(K) = K mod 10

Reasignacin por Prueba Cuadrtica -
Ejemplo
0 80
1 55
2
3 43
4 54
5 25
6 56
7 13
8 104
9 35
K H(K)
25 5
43 3
56 6
35 5
54 4
13 3
80 0
104 4
55 5
Reasignacin por Doble Direccin
El mtodo consiste en que cuando se detecta la
colisin, se debe generar otra direccin aplicando la
funcin hash a la direccin obtenida anteriormente.
Se detiene el proceso cuando se halla el elemento, o
cuando se encuentra una posicin vaca.
La funcin hash que se aplique puede ser diferente
con respecto a la que se aplic originalmente a la
clave.
No existe ningn estudio que precise cul funcin es la
mejor para emplear en el clculo de las direcciones
sucesivas.
Sea A un arreglo de 10 elementos. Sean las claves 25, 43, 56, 35,
54, 13, 80 y 104 asignadas segn la funcin hash D = H(K) = K
mod 10 y H(D) = (D+2) mod 10 para las direcciones sucesivas.
Reasignacin por Doble Direccin-
Ejemplo
0 80
1
2
3 43
4 54
5 25
6 56
7 35
8 104
9 13
K H(K) H(D) H(D) H(D)
25 5 - - -
43 3 - - -
56 6 - - -
35 5 7 - -
54 4 - - -
13 3 5 7 9
80 0 - - -
104 4 6 8 -
Resolucin de Colisiones por Arreglos
anidados
Este mtodo consiste en que cada elemento del
arreglo tenga otro arreglo en el cual se almacenen los
elementos colisionados.
Aunque la solucin parece sencilla, es ineficiente.
Al trabajar con arreglos, se depende del espacio que
tienen asignados.
Surge un problema: elegir el tamao adecuado del
arreglo que permita un equilibrio entre el costo de
memoria y el nmero de valores colisionados que
puede almacenar.
Sea A un arreglo de 10 elementos. Sean las claves 25, 43,
56, 35, 54, 13, 80 y 104 asignadas segn la funcin hash
H(K) = K mod 10.
Resolucin de Colisiones por Arreglos
anidados - Ejemplo
0 80
1
2
3 43 13
4 54 104
5 25 35
6 56
7
8
9
K H(K)
25 5
43 3
56 6
35 5
54 4
13 3
80 0
104 4
Resolucin de Colisiones por
Encadenamiento
Consiste en que cada elemento del arreglo tenga un
apuntador a una lista enlazada.
La lista se ir generando e ir almacenando los valores
colisionados a medida que se requiera. Es el mtodo
ms eficiente.
Cualquiera que sea el nmero de colisiones, siempre se
puede tratar una ms.
La desventaja del mtodo es que ocupa espacio
adicional al de la tabla y requiere el manejo de listas
enlazadas.
Si las listas crecen demasiado se pierde la facilidad de
acceso directo del mtodo hash.
Sea A un arreglo de 10 elementos. Sean las claves 25, 43,
56, 35, 54, 13, 80 y 104 asignadas segn la funcin hash
H(K) = K mod 10.
Resolucin de Colisiones por
Encadenamiento - Ejemplo
0 80
1
2
3 43
4 54
5 25
6 56
7
8
9
K H(K)
25 5
43 3
56 6
35 5
54 4
13 3
80 0
104 4
13 N
104 N
35 N
Bsqueda externa por dispersin
Los archivos se organizan en cubetas
Una cubeta contiene cero, uno o ms bloques.
Un bloque est formado por uno o ms registros.
Bsqueda externa por dispersin (Hash)
0
1
2
3
4
5
BLOQUE 1
BLOQUE 1
BLOQUE 1 BLOQUE 2
BLOQUE 2
BLOQUE 3
Directorio de cubetas
Funciones de dispersin (hash)
Transforma la clave a una direccin que hace referencia
a una cubeta, en la cual se puede encontrar un registro.
Si las claves fueran alfanumricas, primero debern
convertirse en numricas, tratando de no perder
informacin.
Las funciones mdulo, cuadrado, plegamiento y
truncamiento vistas en la bsqueda interna son vlidas
tambin en este caso.
Es importante que la funcin distribuya
homogneamente las claves entre los nmeros de
cubetas disponibles.




Bsqueda externa por dispersin (Hash)
Los bloques contienen un nmero fijo de registros
(uno o ms registros).
Las cubetas pueden no tener un lmite de bloques que
pueden almacenar (encadenamiento), pero no
siempre es posible definir una estructura de este tipo.
Para evitar las colisiones se debe elegir el tamao
adecuado de cubetas y bloques.
Si las cubetas se definen muy pequeas el nmero de
colisiones aumenta.
Si se definen muy grandes se pierde eficiencia de
almacenamiento y se pierden las ventajas del acceso
directo del mtodo.




Solucin de colisiones
Organizamos un archivo
en cubetas que tienen un
slo bloque.
La capacidad mxima de
cada cubeta estar
determinado por el
tamao del bloque
asociado con ella.
Una vez que se satura la
cubeta, cualquier registro
asignado a ella producir
una colisin.
Solucin de colisiones
Directorio de
cubetas












B
l
o
q
u
e

B
l
o
q
u
e

B
l
o
q
u
e

Se definen reas separadas (secundarias) de las
reas primarias de almacenamiento, en las que se
almacenarn todos los registros que hayan
colisionado.
El rea de colisiones puede estar organizada como
un rea comn a todas las cubetas.
Si se produce una colisin habr que buscar a lo
largo del rea de colisiones hasta encontrar el
elemento deseado.
Uso de reas independientes para
colisiones
Uso de reas independientes para
colisiones
Directorio de
cubetas








rea primaria de
almacenamiento
rea de
colisiones



Otra forma de organizar el rea de colisiones es
dividirla en bloques, asociando a cada uno de ellas a
uno del rea primaria.
Esta alternativa optimiza el tiempo de bsqueda en el
rea de colisiones.
Sin embargo, presenta el inconveniente de que estos
bloques podran a su vez saturarse y ocasionar
nuevamente colisiones.
Uso de reas independientes para
colisiones
Uso de reas independientes para
colisiones
Directorio de
cubetas








rea primaria de
almacenamiento
rea de
colisiones









Se definen reas de colisiones entre los bloques de
almacenamiento primario.
Es similar al mtodo de reasignacin en la bsqueda
interna.
Una vez detectada una colisin en un bloque se debe
buscar en el rea de colisiones inmediata a dicho
bloque.
Si el elemento no se encuentra y el rea de colisiones
est llena, se continuar la bsqueda a travs de las
otras reas de colisiones.
El proceso termina cuando se encuentra el elemento o
cuando existen espacios vacos en un bloque (elemento
no encontrado).
Uso de reas de colisiones entre los
bloques de almacenamiento primario
Uso de reas de colisiones entre los
bloques de almacenamiento primario
Directorio de
cubetas



rea primaria de almacenamiento
con bloques para colisiones
Bloque
Bloque
Bloque de colisiones
Bloque de colisiones
Vara el nmero de cubetas en funcin de su densidad
de ocupacin.
Se comienza a trabajar con un nmero determinado de
cubetas y a medida que stas se van llenando se
asignan nuevas cubetas al archivo.
Existen dos formas:
Expansiones totales
Expansiones parciales
Bsqueda externa dinmica
Consiste en duplicar el nmero de cubetas cuando
stas superan la densidad de ocupacin previamente
establecida.
Tambin se da en sentido contrario, es decir, si
disminuye la densidad de ocupacin de las cubetas
entonces se reduce el nmero de stas.
Densidad de ocupacin para expansin
Nro. Reg. ocupados / Nro. Reg. disponibles
Densidad de ocupacin para reduccin
Nro. Reg. ocupados / Nro. de cubetas

Expansiones Totales
Consiste en duplicar el nmero de cubetas cuando
stas superan la densidad de ocupacin previamente
establecida.
N 2N 4N
Tambin se da en sentido contrario, es decir, si
disminuye la densidad de ocupacin de las cubetas
entonces se reduce el nmero de stas.
Densidad de ocupacin para expansin
Nro. Reg. ocupados / Nro. Reg. disponibles
Densidad de ocupacin para reduccin
Nro. Reg. ocupados / Nro. de cubetas

Expansiones Totales
Expansiones Totales - Ejemplo
Nro. cubetas = 2, dos registros por cubeta, densidad de ocupacin
para expansin 80%, funcin hash:
H(clave) = clave MOD Nro. Cubetas
Se desean almacenar 42, 24, 15, 53

0 42 15
1 24
Clave H(clave)
42 0
24 0
15 1
53 1
Porcentaje de ocupacin
para expansin: 75%
Despus de insertar las 3 primeras claves
Expansiones Totales - Ejemplo
Cuando se quiere insertar 53, densidad de ocupacin sera 100%.
Por lo tanto se duplican las cubetas a 2N = 4 y se reasignan los
registros
0 24
1 53
2 42
3 15
Clave H(clave)
42 2
24 0
15 3
53 1
Porcentaje de ocupacin
para expansin: 50%
Despus de insertar la clave 53
N = 4
Expansiones Totales - Ejemplo
0 24 12
1 53 21
2 42
3 15
Clave H(clave)
21 1
12 0
Porcentaje de ocupacin
para expansin: 75%
Luego de insertar las claves 21 y 12
Expansiones Totales - Ejemplo
0 24
1
2 42
3
4 12
5 53 21
6 14
7 15
Clave H(clave)
42 2
24 0
15 7
53 5
21 5
12 4
14 6
Porcentaje de ocupacin
para expansin: 43.75%
Luego de insertar la clave 14
N = 8
Expansiones Totales - Ejemplo
0 24 128
1 49
2 42 18
3
4 12
5 53 21
6 14 22
7 15 23
Clave H(clave)
42 2
24 0
15 7
53 5
21 5
12 4
14 6
18 2
49 1
128 0
22 6
23 7
Porcentaje de ocupacin
para expansin: 68.75%
Luego de insertar la clave 23
N = 8
OBS: Si tratramos de
insertar 192 se
producira una colisin
192 MOD 8 = 0
Expansiones Totales - Ejemplo
0 128
1 49
2 18
3 67
4
5 53 21
6 22
7 23
8 24
9
10 42
11
12 12
13
14 14
15 15
Clave H(clave)
42 10
24 8
15 15
53 5
21 5
12 12
14 14
18 2
49 1
128 0
22 6
23 7
67 3
Porcentaje de ocupacin
para expansin: 40.62%
Luego de insertar la
clave 67
N = 16
Porcentaje de ocupacin
para reduccin: 81.25%
Expansiones Totales - Ejemplo
0 128
1 49
2 18
3 67
4
5 53 21
6 22
7 23
8 24
9
10 42
11
12 12
13
14 14
15 15
Clave H(clave)
42 10
24 8
15 15
53 5
21 5
12 12
14 14
18 2
49 1
128 0
22 6
23 7
67 3
Porcentaje de ocupacin
para expansin: 40.62%
Si deseamos eliminar 53
D.O. Reduccin 75% < 80%
N = 16
D.O. para expansin > 80%
D.O. para reduccin < 80%
Porcentaje de ocupacin
para reduccin: 81.25%
Expansiones Totales - Ejemplo
0 128
1 49
2 18
3 67
4
5 53 21
6 22
7 23
8 24
9
10 42
11
12 12
13
14 14
15 15
Clave H(clave)
42 10
24 8
15 15
53 5
21 5
12 12
14 14
18 2
49 1
128 0
22 6
23 7
67 3
Porcentaje de ocupacin
para expansin: 40.62%
Si deseamos eliminar 53
D.O. Reduccin 75% < 80%
N = 16
D.O. para expansin > 80%
D.O. para reduccin < 80%
Porcentaje de ocupacin
para reduccin: 81.25%
Expansiones Totales - Ejemplo
0 24 128
1 49
2 42 18
3 67
4 12
5 21
6 14 22
7 15 23
Clave H(clave)
42 2
24 0
15 7
21 5
12 4
14 6
18 2
49 1
128 0
22 6
23 7
67 3
Porcentaje de ocupacin
para expansin: 68.75%
Luego de eliminar 53
N = 8
D.O. para expansin > 80%
D.O. para reduccin < 80%
Porcentaje de ocupacin
para reduccin: 150%
Consiste en incrementar en 50% el nmero de
cubetas.
Dos expansiones parciales equivalen a una total

Expansiones Parciales
N 1.5N 2N 3N 4N 6N 8N
2N 2N 2N
2N 2N 2N
Expansiones Parciales - Ejemplo
Nro. cubetas = 2, dos registros por cubeta, densidad de ocupacin
para expansin 80%, funcin hash:
H(clave) = clave MOD Nro. Cubetas
Se desean almacenar 42, 24, 15, 53

0 42 15
1 24
Clave H(clave)
42 0
24 0
15 1
53 1
Porcentaje de ocupacin
para expansin: 75%
Despus de insertar las 42, 24 y 15
Expansiones Parciales - Ejemplo
Cuando se quiere insertar 53, densidad de ocupacin > 80%.
Por lo tanto se aumentan las cubetas a 1.5N = 3 y se reasignan los
registros
0 42 24
1
2 53
Clave H(clave)
42 0
24 0
15 0
53 2
Porcentaje de ocupacin
para expansin: 66.66%
Despus de insertar la clave 53
N = 3
15
En la cubeta 0 se tiene
una colisin, mientras
que la 1 permanece
vaca
Expansiones Parciales - Ejemplo
0 24
1 53 21
2 42
3 15
Clave H(clave)
42 2
24 0
15 3
53 1
21 1
Porcentaje de ocupacin
para expansin: 62.5%
Despus de insertar la clave 21
N = 4
Expansiones Parciales - Ejemplo
0 24 12
1 53 21
2 42
3 15
Clave H(clave)
42 2
24 0
15 3
53 1
21 1
12 0
Porcentaje de ocupacin
para expansin: 75%
Despus de insertar la clave 12
N = 4
Expansiones Parciales - Ejemplo
0 42 24
1 49
2 14
3 15 21
4
5 53
Clave H(clave)
42 0
24 0
15 3
53 5
21 3
12 0
14 2
18 0
49 1
Porcentaje de ocupacin
para expansin: 75%
Luego de expandir e insertar las claves 14, 18 y 49
N = 6
12 18
Expansiones Parciales - Ejemplo
0 24 128
1 49
2 42 18
3
4 12
5 53 21
6 14 22
7 15 23
Clave H(clave)
42 2
24 0
15 7
53 5
21 5
12 4
14 6
18 2
49 1
128 0
22 6
23 7
Porcentaje de ocupacin
para expansin: 75%
Luego de expandir e insertar las claves 128, 22 y 23
N = 8
Expansiones Parciales - Ejemplo
0 24 128
1 49
2 42 18
3
4 12
5 53 21
6 14 22
7 15 23
Clave H(clave)
42 2
24 0
15 7
53 5
21 5
12 4
14 6
18 2
49 1
128 0
22 6
23 7
Porcentaje de ocupacin
para expansin: 75%
Luego de expandir e insertar las claves 128, 22 y 23
N = 8

Você também pode gostar