Está en la página 1de 20

Direccionamiento abierto

Archivos direccionables

Direccionamiento lineal
Las tablas hash del direccionamiento abierto pueden almacenar
los registros directamente en el array. Las colisiones se
resuelven mediante un sondeo del array en el que se buscan
diferentes localidades del array (secuencia de sondeo) hasta
que el registro es encontrado o se llega a una casilla vaca,
indicando que no existe esa llave en la tabla.
CARACTERISTICAS:
Registros de longitud fija (*)
Acceso Directo
Cantidad maxima de registros fija (*)
No hay ordenamiento (*)
No hay acceso secuencial (*)
Cada registro se identifica por una clave primaria

Cuando ocurre una colision se prueban posiciones del archivo hasta


encontrar una libre:
h0(r), h1(r), ....., hn(r)
hi (r)=(hash(r) + f (i))mod N con f (0)=0
hi (r)=(hash(r) + f (i))mod N con f (0)=0

f(i) define la estrategia para la resolucin de colisiones:


Lineal
Cuadrtico
Doble Hashing

Direccionamiento abierto lineal

En esta tcnica de hashing, todos los elementos se almacenan en la tabla


de tamao m

Observemos que deber conocer una cota para el numero de elementos


mximo a almacenar

Cuando hay una colisin, empiezo a recorrer la tabla hasta encontrar un


slot libre

Para esto, agregamos un argumento a h


h : U x {0, 1,..,m 1} {0, 1,..,m 1}

Al insertar, seguimos la secuencia :h(k, 0), h(k, 1),......, h(k,m -1) hasta
encontrar un slot vaco

En cada registro debe


existir como dato
administrativo una marca
que indique: Libre,
Borrado u Ocupado.
Borrado y Libre no son la
misma cosa. El numero
de registro, posicin
obviamente no forma
parte del archivo.

Direccionamiento abierto lineal (operaciones)

Bsquedas: Buscar hasta encontrar el registro o bien uno libre


(borrado=seguir)

Altas: Buscar el registro, al encontrar uno libre insertar.

Bajas: Buscar + Marcar

Modificaciones: Buscar + Modificar

Problemas: Clustering
A medida que ocurren colisiones los sinnimos tienden a agruparse en reas
reducidas del archivo generando el fenmeno conocido como clustering o
aglomeramiento

Accesos en promedio para una insercin


(Bsqueda no exitosa)
Accesos=1/2(1+(1/(1)^2))

Accesos en promedio para una insercin


(Bsqueda exitosa)
Accesos=1/2(1+(1/(1)))

Direccionamiento abierto cuadrtico


Tiene como objetivo reducir el fenmeno de clustering.
f (i)=i^2

i=1,4,9,16,25....

Teorema:

Si N es primo y < 0,5 entonces si existe algn lugar libre en el archivo el


mtodo lo encuentra. Es decir que se garantiza el xito de la insercin.

Que ocurre cuando >0.5?

No se pueden garantizar las altas por lo tanto se debe reorganizar el archivo


agregando espacio hasta que <0,5.
Al extender el archivo se lo debe extender a un nuevo numero primo.

Cantidad de accesos promedio

No se ha analizado hasta el momento (!)

En general se soluciona el problema de clustering pero se observa que los


registros que son sinnimos producirn la misma serie de lugares a testear,
esto se conoce como clustering secundario y si bien no es tan grave
tambin representa un problema.

Para eliminar este fenmeno el mtodo mas popular se conoce como


doble hashing

Direccionamiento abierto doble


hashing
Consiste en que una vez detectada la colisin se debe generar otra direccin
aplicando la funcin hash a la direccin previamente obtenida. El proceso se
detiene cuando el elemento es hallado, o bien cuando se encuentra una posicin
vaca.
D = H(K)
D' = H(D)
D'' = H(D')
La funcin hash que se aplique a las direcciones puede o no ser la misma que
originalmente se aplico a la clave. No existe una regla que permita decidir cual ser
la mejor funcin a emplear en el calculo de las sucesivas direcciones.

El desplazamiento para la bsqueda lineal esta dado por una segunda


funcin de hashing.
f (i)=h2(r)

De esta forma los sinnimos no necesariamente generan secuencias


iguales

Si el espacio de direcciones es N la funcin de hashing produce un numero


entre 0 y N-1

La segunda funcin de hashing debe producir un numero entre 0 y M-1 con


M relativamente primo con respecto de N (sin divisores comunes)

De esta forma se garantiza que se recorren todos los registros libres del
archivo de posiciones a probar.

Direccionamiento abierto, rea de


overflow
Puede estar dentro o fuera del mismo archivo.
Para manejarse dentro del rea de overflow se utiliza alguna de las
estrategias que vimos hasta ahora (lineal, cuadrtico, doble
hashing).
Ventajas:
Ausencia de sinnimos en el rea de datos se garantiza entonces que
para registros sin sinnimos la cantidad de accesos es 1

Desventajas
Limitado de acuerdo al tamao del rea de overflow
Los sinnimos estn fsicamente distantes de los registros de datos
(solucin: distribuir el rea de overflow)

Lista enlazada construida en rea especial de tabla


llamada rea de desbordamiento
h(k)==h(j)
K se almacena primero
Se aade j
Calcular h(j)
Encontrar k
Conseguir primera ranura en el rea de overflow
Poner j en ella
Punteros k apuntan a esa ranura

Direccionamiento abierto, con rea de


overflow distribuida.

Cada a registros
de datos se utilizan
b registros de
overflow

También podría gustarte