Professional Documents
Culture Documents
lvarez Giraldo, L. M, & Soto Ocampo, D. A. (2012). La biblioteca digital: una aproximacin terica. Revista Ingenieras
USBMed, 3(1), 15-24.
lina.alvarez@correo.com
diana.soto@correo.com
Artculo presentado para optar al ttulo de Especialista en Gestin de Informacin y Bases de Datos, Facultad de
Ingenieras, Universidad de San Buenaventura Seccional Medelln, 2012. Asesor MSc Juan Camilo Burgos Quintana
Resumen
En este artculo esta una revisin de los algoritmos de resolucin de colisiones que se
utiliza en las tablas hash o tablas de dispersin, con el propsito de solucionar las colisiones que
se dan en una funcin hash y asignar direcciones de la manera ms uniforme posible. Presenta 3
algoritmos para resolucin de colisiones desarrollado en Borland 5.02 y da a conocer como se
generaran las posiciones alternativas si hubiera colisin.
Palabras clave: tablas hash, resolucin de colisiones, tablas de dispersin
Abstract
Introduccin
Una funcin de dispersin convierte el dato considerado campo clave en un ndice dentro
del rango de definicin del arreglo que almacena los datos, de tal forma que sea adecuado para
indexar el arreglo. Con la ventaja de que el tiempo bsqueda es independiente del nmero de
componentes del arreglo y sin necesidad de tener los elementos ordenados.
h(x): k -> L
donde k : clave
L=direccin de memoria
Estas funciones deben generar direcciones distintas para dos claves distintas. No siempre
es asi, no siempre proporciona direcciones distintas, en ocasiones ocurre que dadas dos claves
diferentes a las que se aplica la funcin hash, si se obtienen dos direcciones iguales
x1, x2 => h(x1) = h(x2). Se le conoce como colisin, por eso en el diseo de una tabla
dispersa debe incorporar mtodos de resolucin de colisiones.
Entonces a la hora de disear una tabla hash, se debe seleccionar previamente una buena
funcin hash. Que disperse lo ms uniformemente, segundo seleccionar un mtodo para resolver
colisiones.
De tal forma que si estas se presentan, se contara con algn mtodo que genere posiciones
alternativas. Es importante tener en cuenta que la resolucin de colisiones en una tabla dispersa,
afecta directamente a la eficiencia de las operaciones bsicas sobre la tabla
Reasignacin
Arreglos anidados
Encadenamiento
Reasignacin
Los diversos mtodos de reasignacin se utilizan cuando todos los elementos,
Prueba lineal
Es la forma ms simple de resolver una colisin entre claves, al aplicar una
Prueba cuadrtica
La resolucin de colisiones con la prueba lineal provoca que se agrupen los
elementos de la tabla segn se acercando el factor de carga a 0.5. Una alternativa para
h(x), y otra funcin secundaria h(x). El primer intento de insertar o buscar, un nuevo
elemento inspecciona la posicin h(x)=p, si hay una colisin, se obtiene un segundo
desplazamiento con otra funcin hash h(x)=p. Entonces, la secuencia de bsqueda p,
p+p, p+2p, p+3p se inspecciona hasta encontrar una posicin libre.
2
Arreglos anidados
Consiste en que cada elemento del arreglo tenga otro arreglo, en el cual se almacenen los
elementos que colisionan (una matriz). Este mtodo resulta ineficiente porque se necesitara
elegir un tamao adecuado de arreglo que permita el equilibrio entre el costo de memoria y el
nmero de valores que colisionan que pudiera almacenar.
3
que tienen la misma direccin hash. Todos los elementos que colisionan: h(x1) = h(x2) =(x3) ..
Van a estar ubicados en la misma tabla enlazada.
43
56
35
54
13
80
104
Usando los datos de la tabla 1. Usando una funcin hash modular se obtiene:
Hash modular
H(k) = k(mod)n+1
25
43
56
35
54
13
80
104
H(k)
H(k)
80
43
54
25
56
13
104
35
10
H(k)
80
10
43
54
25
56
35
13
104
Usando los datos de la tabla 1 de datos, y aplicando hash modular obtendremos la tabla hash:
Tabla 3. Tabla de arreglo con hash modular
X
H(k)
80
43
54
25
56
13
104
35
10
10
H(k)
80
55
10
43
54
25
56
13
104
35
11
Usando los datos de la tabla 3 y una nueva funcin hash h(k)=((D+1) mod 10)+1, obtendremos:
Tabla 6. Tabla de valores usando mtodo doble direccin
K
25
43
56
35
54
13
80
104
H(k)
H(D)
H(D)
H(D)
10
H(k)
80
10
43
54
25
56
35
104
13
4. Mtodo de encadenamiento
Es el mtodo ms eficiente debido al dinamismo propio de las listas. Cualquiera que sea el
nmero de colisiones que se presenten, se podrn resolver sin inconvenientes.
Para la obtencin del algoritmo, se siguen los siguientes pasos:
1. Verificar si la direccin D del dato y su informacin son las mismas que el dato de
colisin, si esto fuera verdad el dato est en la posicin D y es el mismo.
2. Iniciar un nodo auxiliar = x[D]->sig, (apuntador a la lista)
12
13
H(k)
80
43
54
25
56
10
35
14
15
Discusin
16
Conclusiones
En los diferentes mtodos que se expuso en este trabajo el mejor mtodo sera el de
encadenamiento por el dinamismo de las listas, pero se aconseja que el factor de carga en las
tablas enlazadas sea prximo a 1, ya que en el caso de crezca mucho puede empeorar la eficiencia
de la bsqueda al aumentar el nmero de nodos de las listas.
Una de las aplicaciones de las tablas hash esta en los compiladores de lenguajes de
programacin. La tabla donde se guardan los identificadores del programa, tabla de smbolos, se
implementa como una tabla hash. La clave es el smbolo que se transforma en un valor entero
para aplicar alguna de las funciones hash.
17
Referencias
Osvaldo Cairo, Silvia Guardati (2006). Methods of search, Estructura de datos 3 ED edition
Luis Joyanes Aguilar, Ignacio Zahonero Martinez (2008). Tables hashing, Estructura de datos en
Java
Mark Allen Weiss, (2000), Tablas hash, Estructura de datos en Java 3 edition
Martnez, R. (2007). Biblioteca Digital: conceptos, recursos y estndares. Buenos Aires:
Alfagrama.