Вы находитесь на странице: 1из 17

Bsqueda por Hash

Milena Matamoros
Manuel Ricardo Corts
Juan Carlos Garca

Procedimiento
Mtodo

consistente en
aplicar una funcin que
traduce un conjunto de
posibles valores llave en un
rango
de
direcciones
relativas

Casos de Colision

soluciones para reducir el nmero


de colisiones
Propagar los registros: Buscar funciones que distribuyan muy

aleatoriamente los registros podemos evitar "agrupaciones" de llaves que


produzcan las mismas direcciones
Usar memoria extra: En el ejemplo anterior planteamos tener una

direccin de entre 1000 posibles, el uso de memoria extra se basa en


proponer un espacio de direcciones posibles mucho ms grande que el
nmero de registros a usar, de modo que si vamos a insertar 100 registros
un espacio de 500 direcciones nos una mejor opcin de esparcir mejor.
Colocar ms de un registro en una direccin: A diferencia de los

casos anteriores donde cada direccin almacena nicamente un registro,


este concepto se basa en "buckets" o cubetas de datos en cada direccin,
ah se colocan algunos (casi todos) los registros que colisionan de manera
que al hacer una bsqueda debemos recuperar la cubeta entera y ahi
buscar por el registro deseado.

9.3.1 Un Algoritmo de Hash

No existe una frmula "nica" para hash, pero el producirla es un algoritmo que bsicamente se presenta en 3 pasos:

1) Representar la llave de manera numrica (siempre que no sea de por s un nmero)


Una buena opcin es usar los valores ASCII o bien los Unicode de las letras
LOWELL= L O W E L L _ _ _ _ _ _
76 79 87 69 76 76 32 32 32 32 32 32
2) Plegar y Agregar
Combinar algunos de estos nmeros para generar pequeos trozos con los que podamos trabajar
76 79 | 87 69 | 76 76 | 32 32 | 32 32 | 32 32
De manera que podemos hacer algunas operaciones matemticas con dichos nmeros para finalmente obtener un nmero del
cual obtendremos la direccin
7679 + 8769 + 7676 + 3232 + 3232 = 30 588
Nota: Respecto a la implementacin se puede dar el caso de formar nmeros demasiado grandes, tanto que llegue al overflow del
tipo de datos que estemos usando. Para solucionar esto podemos usar funciones como el "mod" intermedias para no tener ese
problema.
3) Dividir por un nmero primo y usar el resultado como direccin
Los archivos de hash por lo general suelen limitarse a un cierto rango de direcciones posibles para aprovechar mejor el concepto
de memoria. de manera que podemos concluir nuestro algoritmo con la frmula:

a= s mod n

donde a es la direccin resultante, s es la suma o resultado de los pasos anteriores y n el nmero de direcciones posibles en el
archivo
Existen innumerables operaciones adicionales que pueden aplicarse en las frmulas, as como las tcnicas para limitar el valor
final. Entre ellas se encuentran: elevar a alguna potencia, raz cuadrada, convertir los nmeros de base (hexadecimal, octal), etc...

Ventajas
Se pueden usar los valores naturales de la

llave, puesto que se traducen


internamente a direcciones fciles de
localizar
Se logra independencia lgica y fsica,
debido a que los valores de las llaves son
independientes del espacio de direcciones
No se requiere almacenamiento adicional
para los ndices.

Desventajas
No pueden usarse registros de longitud

variable
El archivo no esta clasificado
No permite llaves repetidas
Solo permite acceso por una sola llave

Costos
Tiempo de procesamiento requerido para

la aplicacin de la funcin hash


Tiempo de procesamiento y los accesos
E/S requeridos para solucionar las
colisiones.

Factores de Eficiencia
La distribucin de los valores de llave que

realmente se usan
El numero de valores de llave que realmente
estn en uso con respecto al tamao del
espacio de direcciones
El numero de registros que pueden
almacenarse en una direccin dad sin causar
una colisin
La tcnica usada para resolver el problema de
las colisiones

Tipos de Funcion Hash

Residuo de la

divisin
Medio del
cuadrado
Pliegue

Hashing por residuo de


divisin
La idea de este mtodo es la

de dividir el valor de la llave


entre un numero apropiado, y
despus utilizar el residuo de la
divisin como direccin relativa
para el registro (direccin = llave
mdulo divisor).

Consideraciones
Independientemente de que tan bueno sea

el divisor, cuando el espacio de direcciones de


un archivo esta completamente lleno, la
probabilidad de colisin crece
dramticamente. La saturacin de archivo de
mide mediante su factor de carga, el cual se
define como la relacin del numero de
registros en el archivo contra el numero de
registros que el archivo podra contener si
estuviese completamente lleno.

Factor de Carga

Todas las funciones hash comienzan a trabajar


probablemente cuando el archivo esta casi lleno. Por lo
general el mximo factor de carga que puede tolerarse en
un archivo para un rendimiento razonable es de entre el 70
% y 80 %.

Hashing por Elevacion al cuadrado


En esta tcnica, la llave es elevada al cuadrado,

despus algunos dgitos especficos se extraen de la


mitad del resultado para constituir la direccin
relativa. Si se desea una direccin de n dgitos,
entonces los dgitos se truncan en ambos extremos
de la llave elevada al cuadrado, tomando n dgitos
intermedios. Las mismas posiciones de n dgitos
deben extraerse para cada llave.
Utilizando esta funcin hashing el tamao del
archivo resultante es de 10 n donde n es el numero
de dgitos extrados de los valores de la llave
elevada al cuadrado.

Hashing por Pliegue


En esta tcnica el valor de la llave es

particionada en varias partes, cada una de las


cuales
(excepto la ultima) tiene el mismo numero de
dgitos que tiene la direccin relativa objetivo.
Estas particiones son despus plegadas una
sobre otra y sumadas. El resultado, es la
direccin relativa. Igual que para el mtodo
del medio del cuadrado, el tamao del
espacio de direcciones relativas es una
potencia de 10.

Вам также может понравиться