Hasta ahora las técnicas de localización de registros vistas,
emplean un proceso de búsqueda que implica cierto tiempo y esfuerzo. El siguiente método
nos permite encontrar directamente el registro buscado.
La idea básica de este método consiste en aplicar una función que
traduce un conjunto de posibles valores llave en un rango de direcciones relativas. Un
problema potencial encontrado en este proceso, es que tal función no puede ser uno a uno;
las direcciones calculadas pueden no ser todas únicas, cuando R(k1 )= R(k2)
Pero : K1 diferente de K2 decimos que hay una colisión.
A dos llaves diferentes que les corresponda la misma dirección relativa se les llama sinónimos.
A las técnicas de calculo de direcciones también se les conoce como :
- Técnicas de almacenamiento disperso
- Técnicas aleatorias
- Métodos de transformación de llave - a- dirección
- Técnicas de direccionamiento directo
- Métodos de tabla Hash
- Métodos de Hashing
- Pero el término mas usado es el de hashing. Al cálculo que se
realiza para obtener una dirección a partir de una llave se le conoce como función hash.
-
-
- Ventaja
- Se pueden usar los valores naturales de la llave, puesto que se traducen internamente a
direcciones fáciles de localizar
- Se logra independencia lógica y física, 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 aplicación de la función hash
- Tiempo de procesamiento y los accesos E/S requeridos para solucionar las colisiones.
- La eficiencia de una función hash depende de:
- La distribución de los valores de llave que realmente se usan
- El numero de valores de llave que realmente están en uso con respecto al tamaño del
espacio de direcciones
- El numero de registros que pueden almacenarse en una dirección dad sin causar una
colisión
- La técnica usada para resolver el problema de las colisiones
- Las funciones hash mas comunes son:
- Residuo de la división
- Medio del cuadrado
- Pliegue
-
- HASHING POR RESIDUO DE LA DIVISIÓN
-
- La idea de este método es la de dividir el valor de la llave entre
un numero apropiado, y después utilizar el residuo de la división como dirección
relativa para el registro (dirección = llave módulo divisor).
-
- Mientras que el valor calculado real de una dirección relativa,
dados tanto un valor de llave como el divisor, es directo; la elección del divisor
apropiado puede no ser tan simple. Existen varios factores que deben considerarse para
seleccionar el divisor:
- El rango de valores que resultan de la operación "llave % divisor", va desde
cero hasta el divisor 1. Luego, el divisor determina el tamaño del espacio de direcciones
relativas. Si se sabe que el archivo va a contener por lo menos n registros, entonces
tendremos que hacer que divisor > n, suponiendo que solamente un registro puede ser
almacenado en una dirección relativa dada.
- El divisor deberá seleccionarse de tal forma que la probabilidad de colisión sea
minimizada. ¿Como escoger este numero? Mediante investigaciones se ha demostrado que los
divisores que son números pares tienden a comportase pobremente, especialmente con los
conjuntos de valores de llave que son predominantemente impares. Algunas investigaciones
sugieren que el divisor deberá ser un numero primo. Sin embargo, otras sugieren que los
divisores no primos trabajan también como los divisores primos, siempre y cuando los
divisores no primos no contengan ningún factor primo menor de 20. Lo mas común es elegir
el número primo mas próximo al total de direcciones.
- Ejemplo:
-
- Independientemente de que tan bueno sea el divisor, cuando el
espacio de direcciones de un archivo esta completamente lleno, la probabilidad de
colisión crece dramáticamente. La saturación de archivo de mide mediante su factor de
carga, el cual se define como la relación del numero de registros en el archivo contra el
numero de registros que el archivo podría contener si estuviese completamente lleno.

-
- Todas las funciones hash comienzan a trabajar probablemente cuando el
archivo esta casi lleno. Por lo general el máximo factor de carga que puede tolerarse en
un archivo para un rendimiento razonable es de entre el 70 % y 80 %.
-
-
- HASHING POR MEDIO DEL CUADRADO
-
- En esta técnica, la llave es elevada al cuadrado, después algunos
dígitos específicos se extraen de la mitad del resultado para constituir la dirección
relativa. Si se desea una dirección de n dígitos, entonces los dígitos se truncan en
ambos extremos de la llave elevada al cuadrado, tomando n dígitos intermedios. Las mismas
posiciones de n dígitos deben extraerse para cada llave.
-
- Ejemplo:
-
- Utilizando esta función hashing el tamaño del archivo resultante es
de 10n donde n es el numero de dígitos extraídos de los valores de la llave
elevada al cuadrado.
-
-
- HASHING POR PLIEGUE
-
- En esta técnica el valor de la llave es particionada en varias
partes, cada una de las cuales
- (excepto la ultima) tiene el mismo numero de dígitos que tiene la dirección relativa
objetivo. Estas particiones son después plegadas una sobre otra y sumadas. El resultado,
es la dirección relativa. Igual que para el método del medio del cuadrado, el tamaño
del espacio de direcciones relativas es una potencia de 10.
-
- Ejemplo:
-
- COMPARACIÓN ENTRE LAS FUNCIONES HASH
-
- Aunque alguna otra técnica pueda desempeñarse mejor en situaciones
particulares, la técnica del residuo de la división proporciona el mejor desempeño.
Ninguna función hash se desempeña siempre mejor que las otras. El método del medio del
cuadrado puede aplicarse en archivos con factores de cargas bastantes bajas para dar
generalmente un buen desempeño. El método de pliegues puede ser la técnica mas fácil
de calcular pero produce resultados bastante erráticos, a menos que la longitud de la
llave se aproximadamente igual a la longitud de la dirección.
-
- Si la distribución de los valores de llaves no es conocida, entonces
el método del residuo de la división es preferible. Note que el hashing puede ser
aplicado a llaves no numéricas. Las posiciones de ordenamiento de secuencia de los
caracteres en un valor de llave pueden ser utilizadas como sus equivalentes
"numéricos". Alternativamente, el algoritmo hash actúa sobre las
representaciones binarias de los caracteres.
- Todas las funciones hash presentadas tienen destinado un espacio de tamaño fijo.
Aumentar el tamaño del archivo relativo creado al usar una de estas funciones, implica
cambiar la función hash, para que se refiera a un espacio mayor y volver a cargar el
nuevo archivo.
-
-
-
- MÉTODOS PARA RESOLVER EL PROBLEMA DE LAS COLISIONES
-
- Considere las llaves K1 y K2 que son sinónimas
para la función hash R. Si K1 es almacenada primero en el archivo y su
dirección es R(K1), entonces se dice que K1 esta almacenado en su
dirección de origen.
-
- Existen dos métodos básicos para determinar donde debe ser alojado K2
:
-
- Direccionamiento abierto.- Se encuentra entre dirección de origen para
K2 dentro del archivo.
- Separación de desborde (Area de desborde).- Se encuentra una
dirección para K2 fuera del área principal del archivo, en un área especial
de desborde, que es utilizada exclusivamente para almacenar registro que no pueden ser
asignados en su dirección de origen
- Los métodos mas conocidos para resolver colisiones son:
-
-
- Sondeo lineal
-
- Que es una técnica de direccionamiento abierto. Este es un proceso
de búsqueda secuencial desde la dirección de origen para encontrar la siguiente
localidad vacía. Esta técnica es también conocida como método de desbordamiento
consecutivo.
-
- Para almacenar un registro por hashing con sondeo lineal, la
dirección no debe caer fuera del limite del archivo, En lugar de terminar cuando el
limite del espacio de dirección se alcanza, se regresa al inicio del espacio y sondeamos
desde ahí. Por lo que debe ser posible detectar si la dirección base ha sido encontrada
de nuevo, lo cual indica que el archivo esta lleno y no hay espacio para la llave.
-
Para la búsqueda de un registro por hashing con sondeo
lineal, los valores de llave de los registros encontrados en la dirección de origen, y en
las direcciones alcanzadas con el sondeo lineal, deberá compararse con el valor de la
llave buscada, para determinar si el registro objetivo ha sido localizado o no.

-
-
El sondeo lineal puede usarse para cualquier técnica de
hashing. Si se emplea sondeo lineal para almacenar registros, también deberá emplearse
para recuperarlos.