direccionamiento (1)

20
Direccionamiento abierto Archivos direccionables

description

archivos

Transcript of direccionamiento (1)

Page 1: direccionamiento (1)

Direccionamiento abiertoArchivos direccionables

Page 2: direccionamiento (1)

Direccionamiento linealLas 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 vacía, 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

Page 3: direccionamiento (1)

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 resolución de colisiones:

Lineal

Cuadrático

Doble Hashing

Page 4: direccionamiento (1)

Direccionamiento abierto lineal

En esta técnica de hashing, todos los elementos se almacenan en la tabla de tamaño m

Observemos que deberá conocer una cota para el numero de elementos máximo a almacenar

Cuando hay una colisión, empiezo a recorrer la tabla hasta encontrar un slot libre

Para esto, agregamos un argumento a hh : 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 vacío

Page 5: direccionamiento (1)

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, posición obviamente no forma parte del archivo.

Page 6: direccionamiento (1)

Direccionamiento abierto lineal (operaciones)

Búsquedas: 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

Page 7: direccionamiento (1)

Problemas: Clustering

A medida que ocurren colisiones los sinónimos tienden a agruparse en áreas reducidas del archivo generando el fenómeno conocido como “clustering” o “aglomeramiento”

Page 8: direccionamiento (1)
Page 9: direccionamiento (1)
Page 10: direccionamiento (1)

Accesos en promedio para una inserción(Búsqueda exitosa)

Accesos=1/2(1+(1/(1−λ)^2))

Accesos en promedio para una inserción(Búsqueda no exitosa)

Accesos=1/2(1+(1/(1−λ)))

Page 11: direccionamiento (1)

Direccionamiento abierto cuadrático

Tiene como objetivo reducir el fenómeno de clustering.

f (i)=i^2

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

Teorema: Si N es primo y λ < 0,5 entonces si existe algún lugar libre en el archivo el

método lo encuentra. Es decir que se garantiza el éxito de la inserción.

¿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.

Page 12: direccionamiento (1)

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 sinónimos producirán la misma serie de lugares a testear, esto se conoce como clustering secundario y si bien no es tan grave también representa un problema.

Para eliminar este fenómeno el método mas popular se conoce como “doble hashing”

Page 13: direccionamiento (1)
Page 14: direccionamiento (1)
Page 15: direccionamiento (1)

Consiste en que una vez detectada la colisión se debe generar otra dirección aplicando la función hash a la dirección previamente obtenida. El proceso se detiene cuando el elemento es hallado, o bien cuando se encuentra una posición vacía.

D = H(K)

D' = H(D)

D'' = H(D')

La función 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 función a emplear en el calculo de las sucesivas direcciones.

Direccionamiento abierto doblehashing

Page 16: direccionamiento (1)
Page 17: direccionamiento (1)

El desplazamiento para la búsqueda lineal esta dado por una segunda función de hashing.

f (i)=h2(r)

De esta forma los sinónimos no necesariamente generan secuencias iguales

Si el espacio de direcciones es N la función de hashing produce un numero entre 0 y N-1

La segunda función 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.

Page 18: direccionamiento (1)

Direccionamiento abierto, área deoverflow

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, cuadrático, doble hashing).

Ventajas:

Ausencia de sinónimos en el área de datos se garantiza entonces que para registros sin sinónimos la cantidad de accesos es 1

Desventajas

Limitado de acuerdo al tamaño del área de overflow

Los sinónimos están físicamente distantes de los registros de datos (solución: distribuir el área de overflow)

Page 19: direccionamiento (1)

Lista enlazada construida en área especial de tabla llamada área de desbordamiento

h(k)==h(j)

K se almacena primero

Se añade j

Calcular h(j)

Encontrar k

Conseguir primera ranura en el área de overflow

Poner j en ella

Punteros k apuntan a esa ranura

Page 20: direccionamiento (1)

Direccionamiento abierto, con área deoverflow distribuida.

Cada “a” registros de datos se utilizan “b” registros de overflow