Escolar Documentos
Profissional Documentos
Cultura Documentos
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