Busqueda Por Hash
Busqueda Por Hash
Busqueda Por Hash
Los mtodos de bsqueda pueden clasificarse segn la ubicacin de los datos sobre los que se realizara la bsqueda. Existen dos clases: y Mtodos de Bsqueda Interna y Mtodos de Bsqueda Externa.
elementos se encuentran en memoria secundaria (archivos almacenados en dispositivos tales como cintas y discos magnticos).
tener los objetos ordenados. y El tiempo de bsqueda es totalmente independiente del numero de componentes del arreglo. y La bsqueda se realiza por medio de direcciones, creadas por una funcin hash(H).
FUNCIONES HASH
y Las Funciones HASH (H) mas aplicadas son: y Funcin Modulo (Por divisin). y Funcin Cuadrado. y Funcin Plegamiento. y Funcin Truncamiento.
Procedimiento
yMtodo consistente en aplicar
una funcin que traduce un conjunto de posibles valores llave en un rango de direcciones relativas
Casos de Colisin
aleatoriamente los registros podemos evitar "agrupaciones" de llaves que produzcan las mismas direcciones y 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. y 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.
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
y Se pueden usar los valores naturales de la llave,
puesto que se traducen internamente a direcciones fciles de localizar y Se logra independencia lgica y fsica, debido a que los valores de las llaves son independientes del espacio de direcciones y No se requiere almacenamiento adicional para los ndices.
Desventajas
y No pueden usarse registros de longitud variable y El archivo no esta clasificado y No permite llaves repetidas y Solo permite acceso por una sola llave
Costos
y Tiempo de procesamiento requerido para la
aplicacin de la funcin hash y Tiempo de procesamiento y los accesos E/S requeridos para solucionar las colisiones.
Factores de Eficiencia
y La distribucin de los valores de llave que realmente se
usan y El numero de valores de llave que realmente estn en uso con respecto al tamao del espacio de direcciones y El numero de registros que pueden almacenarse en una direccin dad sin causar una colisin y La tcnica usada para resolver el problema de las colisiones
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
y
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 %.