Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Dispersión
Dispersión
Dirección
Clave
Llave #intermedio Dirección
base
Conversión
Conversión de
del # a una
llave aa número
clave número
dirección
Dispersión
Tipo de dispersión
• Dispersión con espacio de direccionamiento estático:
El espacio disponible para dispersar los registros de un
archivo de datos está previamente fijado.
• Dispersión con espacio de direccionamiento
dinámico: El espacio disponible para dispersar los
registros de un archivo de datos aumenta o disminuye
en función de las necesidades de espacio que en cada
momento tiene el archivo.
Dispersión estática
A 1 A 1 A 1
2 2 2
B B B
3 3 3
C C C
4 4 4
D D D
5 5 5
E 6 E 6 E 6
Función utilizada.
Figura 1
Dispersión estática
• Densidad de empaquetamiento
Esla relación entre el espacio disponible para el archivo de
datos y la cantidad de registros que integran dicho archivo.
Cantidad de registro que componen el archivo
DE =
Espacio disponible
• Densidad de empaquetamiento
Cuanto mayor sea la DE, mayor será la posibilidad de
generarse colisiones, dado que se dispone de menos espacio
para esparcir registros.
Por el contrario, si la DE se mantiene baja, se dispone de mayor
espacio para esparcir registros y, por ende, disminuye la
probabilidad de colisiones.
Por otra parte, cuando la DE se mantiene baja, se desperdicia
espacio en el disco, do que se utiliza menor espacio que el
reservado, generando fragmentación.
Dispersión estática
Dispersión doble
Saturación progresiva
Consiste en almacenar el registro en la dirección siguiente más
próxima al nodo donde se produce la saturación.
Supongamos el caso de la Fig 2, donde cada nodo tiene capacidad
de 2 registros, y se quiere agregar a Díaz. La función de hash
retorna como dirección base al nodo 22. Esta situación genera
desborde debido a que el nodo 22 está completo. La primera
dirección del nodo posterior que tiene capacidad para contener a
Díaz es la dirección 24. Por lo tanto, el registro es almacenado he
dicho lugar (Fig. 3).
Saturación progresiva
El proceso de búsqueda debe estar adaptado. Si se busca a Díaz,
la dirección base que determina la función de hash seguirá siendo
22. Como el elemento no se encuentra en dicho lugar y el nodo está
completo, se debe continuar la búsqueda en los nodos siguientes
hasta encontrar el elemento o hasta encontrar un nodo que no esté
completo.
Se debe notar la simpleza del método, pero además su limitada
eficiencia. En este ejemplo fueron necesarios tres accesos para
encontrar el registro.
Supongamos ahora que en la Fig, 3 se elimina el registro
correspondiente a Gómez (Fig. 4)
Saturación progresiva
Si nuevamente se intenta localizar a Díaz, se presenta un
inconveniente. Al chequear la dirección 23, ésta no se encuentra
completa, por lo que la búsqueda se detendría, sin permitir que
Díaz sea localizado.
El método necesita indicar que si una dirección estuvo completa
anteriormente, debe ser marcada como dirección ya saturada a fin
de no impedir la búsqueda potencial de registros. En este ejemplo,
el nodo 23, si bien ahora no está saturado, al haberlo estado
mantiene esa condición. Se podría utilizar una marca *** para
indicar dicha situación en el nodo 23 (Fig. 5)
Saturación progresiva
Ejemplo 1
Ana -1
Saturación progresiva
Ejemplo 1
DE = 8 / 11 = 0,72 DE = 72 %
Saturación progresiva encadenada
En líneas generales, el método funciona igual a su predecesor.
La diferencia radica en que, una vez localizada la nueva
dirección, ésta se encadena o enlaza con la dirección base
inicial, generando una cadena de búsqueda entre sinónimos.
En la Fig. 6 se presenta un ejemplo. Cada nodo tiene además
la dirección siguiente. El valor -1 en el campo de enlace indica
que no direcciona a ningún registro en saturación.
Saturación progresiva encadenada
Como ventaja podemos citar que mejora el número de accesos
promedios ya que sólo se necesita acceder a los registros con
claves que son sinónimos.
La desventaja es que debe agregarse un campo de enlace a
en cada nodo y requiere espacio de almacenamiento.
Saturación progresiva encadenada
Éste método presenta el problema cuando se accede a una
dirección base ocupada por un registro que no es de ese lugar
(intruso).
Supongamos que queremos incorporar el registro con clave
Guerra que tiene dirección base 24. ¿Está bien enlazar a
Guerra con Díaz? No, porque no son sinónimos.
MAL!!!
Saturación progresiva encadenada
A continuación analizaremos dos soluciones:
• Solución 1 (sin intruso): Sólo se puede utilizar esta solución si se
conocen todos los registros y no se van a realizar futuras inserciones.
Consiste en cargar el archivo en dos pasos.
1. Primero se cargan los registros en sus direcciones base y los registros
con claves que son sinónimos se guardan aparte. De esta forma se
garantiza que ninguna dirección base estará ocupada por registros
en saturación.
2. Cargar los registros que se guardaron aparte en las direcciones
libres.
• Solución 2 (con intruso): Si el registro nuevo a insertarse encuentra su
dirección base ocupada por un registro cuya clave no es sinónimo,
entonces éste debe removerse. Se o ubicará en la próxima dirección
libre y se actualizarán los enlaces necesarios.
Saturación progresiva encadenada
Ejemplo 2
El registro con clave Luz fue el último registro. Ahora hay que colocar los
registros que están en espera.
Saturación progresiva encadenada
Ejemplo 2
5
Saturación progresiva encadenada
Ejemplo 3
DE = 1 / 11 = 0,09
DE = 9 %
Dispersión estática – Redispersión
Ejemplo 5
DE = 2 / 11 = 0,18 DE = 18 %
Dispersión estática – Redispersión
Ejemplo 5
DE = 3 / 11 = 0,27
DE = 27 %
Dispersión estática – Redispersión
Ejemplo 5
DE = 4 / 11 = 0,36 DE = 36 %
Dispersión estática – Redispersión
Ejemplo 5
H (Ema) = 69 + 97 = 166
dir = 166 mod 11 = 1 Libre!!!
DE = 5 / 11 = 0,45
DE = 45 %
H (Irene) = código Ascii de la I + código Ascii de la e
H (Irene) = 73 + 101 = 174
dir = 174 mod 11 = 9 COLISIONA con María!!!
Hay que aplicar la segunda función de hash.
H2 (Irene) = código Ascii 1° letra DIV 10
H2 (Irene) = 73 DIV 10
H2 (Irene) = 7 DESPLAZAMIENTO
Buscamos un lugar libre para Irene.
dir = (dir + desplazamiento) mod 11
dir = (9 + 7) mod 11 = 5 Ocupada!!!
dir = (dir + desplazamiento) mod 11
dir = (5 + 7) mod 11 = 1 Ocupada!!!
dir = (dir + desplazamiento) mod 11
dir = (1 + 7) mod 11 = 8 Ocupada!!!
dir = (dir + desplazamiento) mod 11
dir = (8 + 7) mod 11 = 4 Libre!!!
El registro con clave Irene se ubica en la dirección 4.
Supera el 50%, hay
DE = 6 / 11 = 0,54 DE = 54 % que redispersar!!!
Dispersión estática – Redispersión
Ejemplo 5
0 0
dirección
Dispersión dinámica – Método hash
extensible
Para realizar inserciones, el método trabaja de la siguiente
forma:
• Se calcula la función de hash y se toman tantos bits como indica
el valor asociado a la tabla. Cuando dicho valor es cero
significa que hay una sola dirección en la tabla.
• Una vez obtenida la dirección de la tabla se procede a
recuperar el nodo del disco. Si tiene hay espacio en el nodo, el
registro se guardará allí.
0 0
dirección José Sofía
Dispersión dinámica – Método hash
extensible
• En el caso que el nodo esté saturado, se deberán realizar los
siguientes pasos:
Aumentar en uno el valor asociado del nodo saturado y
agregar un nuevo nodo.
Analizar si hay que duplicar la estructura auxiliar y por lo
tanto aumentar su valor asociado.
Volver a dispersar (con el nuevo valor asociado) las claves
en conflicto.
Dispersión dinámica – Método hash
extensible
Tabla en memoria Direcciones en disco
Alta de la
0 1
clave Ana
dirección 23
José 56
Sofía
1
Valor asociado Nueva dirección
en disco
a cada nodo.