Sei sulla pagina 1di 13

Agenda

Archivos de acceso aleatorio

25/04/16

Manejo de colisiones
Sondeo lineal
Doble hash

Prog. 2 B2015 - S. Sol

Archivos de acceso aleatorio


Datos almacenados en forma de registros.
Todos los registros del archivo tienen la misma
longitud.
Se
puede acceder directamente a un
registro, en un slo acceso.
Cada registro tiene una clave, es decir, un dato
que identifica unvocamente a cada registro
La clave no puede estar duplicada dentro
del archivo.
El medio de almacenamiento del archivo debe
permitir acceso directo, ej: medios pticos.

25/04/16

Prog. 2 B2015 - S. Sol

Hash

Hashing = picar, desmenuzar

Funcin hash: transforma la clave en


una direccin.
Direccion = f(clave)

25/04/16

Prog. 2 B2015 - S. Sol

Colisiones
Ocurren cuando dos o ms claves
diferentes generan la misma direccin
al aplicarles la funcin hash.

25/04/16

Prog. 2 B2015 - S. Sol

Eficiencia de una funcin


hash
Si consigo el dato en la direccin que me
regres la funcin -> acierto
Si NO consigo el dato en la direccin que
me regres la funcin -> falla

25/04/16

Cul es la mejor funcin hash?: La


que genera menos colisiones
Efectividad de una funcin hash es igual a
#aciertos/#intentos
Prog. 2 B2015 - S. Sol

Caractersticas deseables
para una funcin hash

Debe ser rpida.

Debe generar pocas colisiones.

Debe distribuir los datos uniformemente.

25/04/16

Prog. 2 B2015 - S. Sol

Residuo como funcin hash


Residuo

f(clave) = clave%n ,

donde n es la cantidad total de registros en el archivo

Rango de direcciones va de 0 a n-1


n
debe escogerse para minimizar
probabilidad de colisin

25/04/16

Prog. 2 B2015 - S. Sol

la

Factor de carga
Mide la saturacin de un archivo de acceso
directo.
FC = # reg. en el archivo / # max. reg. puede contener archivo

Todas las funciones hash tienen un pobre


desempeo cuando el archivo est casi lleno.
FC entre 0.7 y 0.8 es lo mximo que puede
tolerarse.
Cuando un archivo se llena a mas del 70% u
80% debe ampliarse y reorganizarse.

25/04/16

Prog. 2 B2015 - S. Sol

Serializacin
Serializar: convertir el estado de un objeto en un
arreglo de bytes (tambin se le llama
marshalling).
Deserializar: convertir un arreglo de bytes en un
objeto (tambin se le llama unmarshalling).
En C++ se hace usando los flujos
(streams). Se sobrecargan los operadores
<< y >> para escribir objetos como si fueran
texto y leerlos en el mismo formato.
25/04/16

Prog. 2 B2015 - S. Sol

Colisiones - Sondeo lineal

Bsqueda secuencial desde la direccin que


genera la funcin hash para encontrar la
siguiente direccin vaca.
Para implementarlo es necesario poder saber si
una direccin est vaca. (Bandera lgica que
se inicializa en cada direccin cuando se llena)

25/04/16

Prog. 2 B2015 - S. Sol

10

Colisiones - Sondeo lineal


1.Aplicar la funcin hash a la clave para obtener
la direccin (dir. original).
2.Est ocupada esa direccin?
a)NO: se guarda la clave en esa direccin y se
marca esa posicin como ocupada.
b)SI: se cambia la direccion a direccion+1, si la
direccion es mayor al tamao del archivo,
entonces direccion=0
i. La direccin es la misma dir. original?
A)SI: el archivo est completamente lleno
B)NO: ir al paso 2.
25/04/16

Prog. 2 B2015 - S. Sol

11

Colisiones - Sondeo lineal

34
12
78
54
63
17
90
22

25/04/16

34 mod 8 = 2
12 mod 8 = 4
78 mod 8 = 6
54 mod 8 = 6
63 mod 8 = 7
17 mod 8 = 1
90 mod 8 = 2
22 mod 8 = 6

63

17

34

90

12

22
78
54

6
7

Prog. 2 B2015 - S. Sol

12

Colisiones Doble hash


Aplica una segunda funcin hash para
combinar la clave y la direccin resultante del
primer hash.
Como direccionamiento abierto
El espacio de direccin objetivo del segundo hash es
el mismo archivo original.

Como tcnica de separacin de desborde


El espacio de direccin objetivo del segundo hash
puede ser el mismo archivo original o un archivo de
desborde donde se colocan los registros con colisiones.

25/04/16

Prog. 2 B2015 - S. Sol

13

Potrebbero piacerti anche