You are on page 1of 17

METODO DE BUSQUEDA HASH

El mtodo de bsqueda hash o por transformacin de clave aumenta la velocidad de bsqueda sin necesidad de que los elementos estn previamente ordenados, comparndolo con los mtodos anteriores. Adems tiene la ventaja de que el tiempo de bsqueda es independiente del nmero de elementos de la estructura que los almacena.

Este mtodo permite que el acceso a los datos sea por una llave que indica directamente la posicin donde estn guardados los datos que se buscan. Prcticamente trabaja con una funcin que transforma la llave o dato clave en una direccin (ndice) dentro de la estructura y que en ocasiones puede generar una colisin, que se define como una misma direccin para dos o ms claves distintas.

Caractersticas
Buena velocidad de bsqueda sin necesidad de tener los datos ordenados. El tiempo de bsqueda es prcticamente independiente de la cantidad de datos. Dentro del espacio de direccionamiento, hay posiciones vacas.

Clave
La clave contiene el valor que permite ubicar, mediante la funcin Hash, la posicin registro que contiene el resto de informacin asociada. Normalmente la clave es el campo que identifica en forma nica la informacin.

Para trabajar con este mtodo de bsqueda debe elegir previamente dos cosas:
- Una funcin hash que sea fcil de calcular y que distribuya uniformemente las direcciones. - Un mtodo para resolver colisiones, generando posiciones alternativas.

Funciones para generar claves:


Funcin mdulo (por divisin). Funcin cuadrada. Funcin plegamiento. Funcin truncamiento.

FUNCION MODULO
La funcin mdulo o por divisin toma el residuo de la divisin entre la clave y el total de elementos de la estructura, generando la siguiente frmula: direccin = (clave % total elementos) Para lograr una mayor uniformidad en la distribucin de los elementos, se debe buscar que el valor que se usa en el total de elementos sea un nmero primo ms cercano al tamao de la estructura. Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones generadas son las siguientes: direccin = (7259%100) = 59 direccin = (9359%100) = 59 Estos dos casos generan una colisin, ya que los dos nmeros no se pueden asignar dentro de la misma direccin en la estructura, para evitar la colisin, se cambia el valor de 100 por el numero primo ms cercano a l, en este caso seria un 97, lo que generara las siguientes direcciones: direccin = (7259%97) = 81 direccin = (9359%97) = 47

FUNCION CUADRADA
La funcin cuadrada como su nombre lo indica eleva al cuadrado la clave y del resultado, se toman los dgitos centrales como la direccin. El nmero de dgitos a tomar se determina del por el rango del ndice de toda la estructura. La frmula hash es la siguiente: direccin = dgitos centrales (clave2) Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones generadas son las siguientes: direccin = dgitos centrales (72592) = 52693081 = 93 direccin = dgitos centrales (93592) = 87590881 = 90 Como el rango de claves es de 1 a 100 se toman dos dgitos centrales.

FUNCION PLEGAMIENTO
La funcin plegamiento divide la clave en partes de igual nmero de dgitos (la ltima puede tener menos dgitos), tomando como direccin los dgitos menos significativos, despus de realizar una operacin entre las partes, ya sea una serie de sumas o de multiplicaciones. La frmula seria la siguiente: direccin = dgitos menos significativos (suma de partes) direccin = dgitos menos significativos (multiplicacin de partes) Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones generadas son las siguientes: direccin = dgitos menos significativos (72 + 59) = dgitos menos significativos (131) = 31 direccin = dgitos menos significativos (93 + 59) = dgitos menos significativos (152) = 52 Como el rango de claves es de 1 a 100 se toman dos dgitos para las particiones y para la direccin.

FUNCION DE TRUNCAMIENTO
La funcin truncamiento toma algunos de los dgitos de las claves y forma con ellos una direccin. La eleccin de los dgitos es arbitraria, podran tomarse los de las posiciones pares o impares para con ellos generar la direccin donde se almacenara la clave, uniendo los dgitos de izquierda a derecha o de derecha a izquierda, su frmula es la siguiente: direccin = elegir dgitos (unin dgitos) Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones generadas son las siguientes: direccin = elegir dgitos (7, 5) = 75 direccin = elegir dgitos (9, 5) = 95 Para este caso se tomaron los dgitos impares y se unieron de izquierda a derecha.

Mtodos para la solucin de colisiones:


-

Reasignacin.
Arreglos anidados. Encadenamiento.

Reasignacin

Prueba lineal.
Prueba cuadrtica. Doble direccin hash.

Prueba Lineal

consiste en recorrer la estructura secuencialmente a partir del punto de colisin, hasta encontrar un lugar vaci, la estructura se debe controlar como una estructura circular, donde el siguiente elemento despus del ltimo es el primero. La principal desventaja de este mtodo es que Si las concentraciones de claves son muy frecuentes, la bsqueda ser principalmente secuencial perdiendo as las ventajas del mtodo hash.

Prueba Cuadrtica
es similar a la anterior, con la diferencia de que la bsqueda de un lugar vaci no se hace de forma consecutiva, se genera a partir de la elevacin de un valor al cuadrado, donde ese valor inicia con el nmero 1 y lo suma a la direccin que se encuentra en colisin (d+i2), si se genera nuevamente una colisin el valor del nmero se incrementa, se eleva al cuadrado y se suma a la direccin inicial (d+1, d+4, d+9, d+16, , d+i2), este proceso se repite hasta que se encuentre una direccin vaca. Est generacin de direcciones puede llegar a exceder el tamao de la estructura, si es as, la direccin inicia en uno y el valor inicial a elevar es el cero. La principal desventaja de este mtodo es que pueden quedar casillas del arreglo sin visitar, Adems, como los valores de las direcciones varan en 1 unidades, resulta difcil determinar una condicin general para detener el ciclo. Este problema podra solucionarse empleando una variable auxiliar, cuyos valores dirijan el recorrido del arreglo de tal manera que garantice que sern visitadas todas las casillas.

Doble Direccin Hash


Consiste en que una vez detectada la colisin se debe generar otra direccin, aplicando la funcin hash a la direccin previamente obtenida. El proceso se detiene cuando el elemento es hallado, o bien cuando se encuentra una posicin vaca. D = H(K) D' = H(D) D'' = H(D') La funcin 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 funcin a emplear en el calculo de las sucesivas direcciones.

Arreglos Anidados
Este mtodo consiste en que cada elemento del arreglo tenga otro arreglo en el cual se almacena los elementos colisionados. Si bien la solucin parece ser sencilla, es claro tambin que resulta ineficiente. Al trabajar con arreglos se depende del espacio que se all asignado a este lo cual conduce a un nuevo problema difcil de solucionar: elegir un tamao adecuado de arreglo que permita el equilibrio entre el coste de memoria y el numero de valores colisionados que pudiera almacenar.

Encadenamiento
El mtodo de encadenamiento consiste en que cada posicin de la estructura contenga una lista ligada, la cual crecer con cada elemento que entre en la estructura, sobre todo con los elementos que generen una colisin. Este es el mtodo ms eficiente debido a que las listas ligadas son dinmicas y evitan tener tantos lugares libres como el mtodo arreglos anidados. Como desventaja se puede encontrar que cuando la lista ligada crece demasiado se pierde la facilidad de acceso directo del mtodo hash.

You might also like