You are on page 1of 17

METODOS PARA LA RESOLUCION DE COLISIONES

PLANTILLA PARA ARTCULO


BIBLIOTECA FRAY ARTURO CALLE RESTREPO o.f.m.
UNIVERSIDAD DE SAN BUENAVENTURA SECCIONAL MEDELLN
Utilice esta plantilla para la presentacin de un ARTCULO. Las siguientes son recomendaciones basadas en la edicin ms actualizada de la norma APA
(6th Ed. 2010), sin embargo consulte con su asesor, director o coordinador de trabajo de grado para aplicacin de aspectos particulares. Primero, de clic en
Archivo y luego en Guardar Como para almacenar una copia personal. Borre este cuadro de texto y edite la informacin necesaria, eliminando o
remplazando los datos adecuados.
Estructura de Documento, Citas y Referencias: APA 6th Edition (2010).
Mrgenes: Superior: 2.57 cm. - Inferior: 2.57 cm. - Izquierdo: 2.57 cm. - Derecho: 2.57 cm.
Tipo de Fuente: Times New Roman - Tamao: 12 - Interlineado: Doble (2.0) 1.5

Revista Ingenieras USBMed, Vol. 3, No. 1, Ene-Jun 2012. ISSN: 2027-5846.

Citar y referenciar este documento en APA:

(lvarez Giraldo & Soto Ocampo, 2012)

lvarez Giraldo, L. M, & Soto Ocampo, D. A. (2012). La biblioteca digital: una aproximacin terica. Revista Ingenieras
USBMed, 3(1), 15-24.

La biblioteca digital: una aproximacin terica 1

Lina Mara lvarez Giraldo

Diana Alexandra Soto Ocampo

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

METODOS PARA LA RESOLUCION DE COLISIONES

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

This article is a review of Collision Resolution Algorithms to be used in hash tables or


hashing, with the purpose of solving collisions that occur in a hash function and assign addresses
as uniformly as possible. Features 3 Collision Resolution Algorithms para developed in Borland
5.02 and gives a knowing how alternative positions would have if collision is generated.

Keywords: hash tables, Resolution Algorithms, hash function

METODOS PARA LA RESOLUCION DE COLISIONES

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

METODOS PARA LA RESOLUCION DE COLISIONES

Desarrollo del tema


La eleccin de un mtodo adecuado para resolver colisiones es tan importante como la
eleccin de una Buena funcin hash. Se consideran dos modelos para resolver colisiones:

Reasignacin

Arreglos anidados

Encadenamiento

Reasignacin
Los diversos mtodos de reasignacin se utilizan cuando todos los elementos,

colisionados o no, se almacenan en la misma tabla. Las colisiones se resuelven explorando


consecutivamente en una secuencia de direcciones hasta que se encuentra un posicin libre o se
encuentra el elemento buscado en las operaciones de buscar y eliminar.
Es importante inicializar todas las posiciones de la tabla a un valor que indique vaco.
1.1

Prueba lineal
Es la forma ms simple de resolver una colisin entre claves, al aplicar una

funcin de dispersin. Supngase que se tiene un elemento de clave x, la direccin que


devuelve la funcin h(x)=p si est ocupada por otro elemento se ha producido una
colisin. La forma de resolver esta colisin con prueba lineal consiste en buscar la
primera posicin disponible que siga a p.
La secuencia de bsqueda que se genera es lineal p,p+1 .. m-1, 1, 0 y as
consecutivamente hasta encontrar una posicin vaca. La tabla se ha de considerar
circular, de tal forma que siendo m-1 la ltima posicin, la siguiente es la posicin 1.
1.2

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

METODOS PARA LA RESOLUCION DE COLISIONES

evitar la agrupacin es la prueba cuadrtica. Suponiendo que a un elemento con clave x le


corresponde la direccin p y que la posicin de la tabla apuntada por p est ocupada, el
mtodo de prueba cuadrtica busca las direcciones p, p +1, p + 4, p + 9 ... p + i,
considerando la tabla como un arreglo circular. El nombre de cuadrtica se debe al
desplazamiento relativo i.
1.3

Doble direccin hash


Este mtodo utiliza una segunda funcin hash. Se tiene una funcin hash principal,

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

Encadenamiento o direccionamiento enlazado


Se basa en utilizar listas enlazadas, de tal forma que en cada lista se colocan los elementos

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.

METODOS PARA LA RESOLUCION DE COLISIONES

Codificacin de mtodos para la resolucin de colisiones


1. Mtodo de prueba lineal
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 auxiliar Dx que sea igual a la suma de la direccin D ms la unidad
3. Realizar un bucle para encontrar el dato o una posicin Dx vaca, si Dx sobrepasa
el nmero de elementos del arreglo se le da el valor 1 (por esta razn se trata como
circular)
A continuacin se expone le algoritmo de solucin de colisiones por medio de prueba
lineal:

Figura 1. Prueba lineal codificacin c++

METODOS PARA LA RESOLUCION DE COLISIONES

En la tabla 1 se presenta un ejemplo de arreglo de 10 elementos


Tabla 1. Tabla de datos
25

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

n = elementos del arreglo


k = campo clave
H(k) = direcciones

Tabla 2. Tabla de direcciones con hash modular


K

25

43

56

35

54

13

80

104

H(k)

Entonces los elementos en el arreglo estaran de la siguiente manera:


Tabla 3. Tabla de arreglo con hash modular
X

H(k)

80

43

54

25

56

13

104

35

10

Como se puede apreciar en la tabla, ha habido colisiones. Para resolverlas, se aplicar el


mtodo de prueba lineal, donde se obtiene:

METODOS PARA LA RESOLUCION DE COLISIONES

Tabla 4. Tabla hash usando Prueba lineal


X

H(k)

80

10

43

54

25

56

35

13

104

2. Mtodo de prueba cuadrtica


En la elaboracin del algoritmo es similar al anterior. La diferencia consiste en que las
direcciones alternativas en la prueba cuadrtica se generaran como D+1, D+4, D+i en vez de
D+1, D+2, D+3.. D+i. Esta variacin permite una mejor distribucin de las claves que colisionan.
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 auxiliar entero = 1 y hacer Dx = D+(i+i), con esto se consigue la
direccion alternativa cuadrada.
3. Realizar un bucle para encontrar el dato o una posicin Dx vaca, si Dx sobrepasa
el nmero de elementos del arreglo se le da el valor Dx=1, D=1 y i=0 (por esta
razn se trata como circular)
A continuacin se expone le algoritmo de solucin de colisiones por medio de prueba
cuadrtica:

METODOS PARA LA RESOLUCION DE COLISIONES

Figura 2. Prueba cuadrtica codificacin c++

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

METODOS PARA LA RESOLUCION DE COLISIONES

10

Usando el algoritmo de prueba cuadrtica, obtenemos:


Tabla 5. Tabla hash usando Prueba cuadrtica
X

H(k)

80

55

10

43

54

25

56

13

104

35

Como se observa la tabla 5 es diferente a la tabla 4 en las posiciones de colisiones.


3. Mtodo de doble direccin hash
En la elaboracin del algoritmo se utiliza la otra funcin hash(k) no necesariamente tiene
que ser una similar puede ser tanto una variante como cualquier otra. Sin embargo, no existe
ningn estudio que precise cual es la mejor funcin que se debe utilizar en el clculo de las
direcciones sucesivas.
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 auxiliar Dx=H(k), (la nueva funcin hash)
3. Realizar un bucle hasta encontrar el dato o una posicin Dx vaca y Dx sea
diferente de D (esto ltimo para no caer en un bucle infinito), y adentro hacer
Dx=H(k), para generar diferentes direcciones.
A continuacin se expone le algoritmo de solucin de colisiones por medio de doble
direccin:
Figura 3. Doble direccin codificacin c++

METODOS PARA LA RESOLUCION DE COLISIONES

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

Entonces aplicamos el mtodo de doble direccin y obtenemos:


Tabla 7. Tabla hash usando doble direccin
X

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)

METODOS PARA LA RESOLUCION DE COLISIONES

12

3. Realizar un bucle hasta encontrar el dato o una posicin Dx vaca y Dx sea


diferente de D(esto ltimo para no caer en un bucle infinito), y adentro hacer saltar
q=q->sig.
A continuacin se expone le algoritmo de solucin de colisiones por medio de encadenamiento:

Figura 4. Encadenamiento codificacin c++


Usando la tabla 3 con los datos y la funcin modular, probamos el algoritmo de encadenamiento,
obteniendo:

METODOS PARA LA RESOLUCION DE COLISIONES

13

Tabla 8. Tabla hash usando encadenamiento


X

H(k)

80

43

54

25

56

10

35

Anlisis de los mtodos de resolucin de colisiones


La eficiencia de una funcin hash, junto al mtodo de resolucin de colisiones, supone
analizar la operacin de insertar la operacin de buscar (eliminar supone una bsqueda).
1. Anlisis de la prueba lineal
La principal desventaja de este mtodo es que puede haber un fuerte agrupamiento
alrededor de ciertas claves, mientras que otras zonas del arreglo podran permanecer vacas. Si las
concentraciones de claves son muy frecuentes, la bsqueda ser secuencial, perdiendo as las
ventajas del mtodo hash.
Por eso cuando el factor de ocupacin se acerca al 50%, el agrupamiento de elementos en
posiciones adyacentes es notable. El factor carga de la tabla &, es determinante a la hora de
determinar la eficiencia de las operaciones.
La eficiencia de la insercin se suele medir como el nmero medio de posiciones
examinadas, en la prueba lineal se aproxima a:
2. Anlisis de la prueba cuadrtica
Este mtodo de resolver colisiones reduce el agrupamiento que produce la prueba lineal.
Sin embargo, si no se elige el tamao de la tabla, no se puede asegurar que se prueben todas las
posiciones de la tabla.

METODOS PARA LA RESOLUCION DE COLISIONES

14

Se puede demostrar que si el tamao de la tabla es un numero primo y el factor de carga


no alcanza el 50%, todas las pruebas que se realicen con la secuencia p+i se hacen sobre
posiciones de la tabla distintas y siempre que se podr insertar.
3. Anlisis del encadenamiento
En el encadenamiento la bsqueda es una operacin lineal, en el peor de los casos recorre
todos los nodos de la lista; a pesar de ello, las listas han de tener un nmero de nodos
suficientemente pequeo, y as el tiempo de ejecucin ser reducido.
Considerando el factor de carga &, la longitud media de cada lista enlazada (nmero de
nodos) es, precisamente &. Esto permite concluir que le nmero de medio de nodos visitados en
una bsqueda sin xito es &, y el promedio de nodo visitados en una bsqueda con xito es 1
+1/2&
El factor de carga en estas tablas, normalmente es 1, es decir, el rango de ndices del
vector coincide con el nmero de elementos que se espera seas insertados. A medida que aumenta
el factor de carga, la eficiencia de la bsqueda de un elemento en la lista disminuye. Sin embargo
no es conveniente que disminuya mucho el factor de la carga, debido a que cuando este es menor
que 1 aumenta la memoria no utilizada.

METODOS PARA LA RESOLUCION DE COLISIONES

15

Discusin

La manera ms natural de resolver el problema de colisiones es reservar una casilla por


clave, es decir, aquellas que se correspondan una a una con las posiciones del arreglo. Pero esta
solucin tiene un alto costo de memoria, por tanto, es mejor analizar otras alternativas.
En el mtodo de prueba lineal que se presenta tiene el problema de la agrupacin de
elementos en posiciones contiguas, que afecta negativamente a la eficiencia de las operaciones,
en nuestro trabajo eso se verifica ya tiene un alto costo de tiempo de ejecucin.
En el mtodo de prueba cuadrtica que se presenta para asegurar la eficiencia se debera
elegir el tamao de la tabla como un nmero primo para que cada uno de los elementos genere
posiciones de tablas distintas.
En el mtodo de doble direccin se realiza una variacin de la funcin hash modular, sin
embargo no existe ningn estudio para escoger la mejor funcin, por eso se tiene que escoger la
mejor funcin hash al comienzo para que no genere direcciones iguales sucesivamente.
En el mtodo de encadenamiento que se presenta es necesario saber el uso de listas
enlazadas y saber que no existen muchas colisiones, porque de ser asi se perdera el uso de tablas
hash.

METODOS PARA LA RESOLUCION DE COLISIONES

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.

METODOS PARA LA RESOLUCION DE COLISIONES

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.

You might also like