23
METODOS PARA LA RESOLUCION DE COLISIONES 1 Revista Ingenierías 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 aproximación teórica. Revista Ingenierías USBMed, 3(1), 15-24. La biblioteca digital: una aproximación teórica 1 1 Artículo presentado para optar al título de Especialista en Gestión de Información y Bases de Datos, Facultad de Ingenierías, Universidad de San Buenaventura Seccional Medellín, 2012. Asesor MSc Juan Camilo Burgos Quintana Lina María Álvarez Giraldo [email protected] Diana Alexandra Soto Ocampo [email protected] PLANTILLA PARA ARTÍCULO BIBLIOTECA FRAY ARTURO CALLE RESTREPO o.f.m. UNIVERSIDAD DE SAN BUENAVENTURA SECCIONAL MEDELLÍN Utilice esta plantilla para la presentación de un ARTÍCULO. Las siguientes son recomendaciones basadas en la edición más actualizada de la norma APA (6th Ed. 2010), sin embargo consulte con su asesor, director o coordinador de trabajo de grado para aplicación 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 información necesaria, eliminando o remplazando los datos adecuados. Estructura de Documento, Citas y Referencias: APA 6th Edition (2010).

metodos de resolucion de colisiones

Embed Size (px)

DESCRIPTION

metodos de resolucion de colisiones, metodo hash

Citation preview

METODOS PARA LA RESOLUCION DE COLISIONES

1

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

ResumenEn 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 dispersinAbstract

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 functionIntroduccinUna 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 memoriaEstas 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

Desarrollo del temaLa 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

1 ReasignacinLos 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.1Prueba linealEs 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.2Prueba cuadrticaLa 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 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.3Doble direccin hashEste 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 anidadosConsiste 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 enlazadoSe 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.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++

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

Tabla 1. Tabla de datos

25435635541380104

Usando los datos de la tabla 1. Usando una funcin hash modular se obtiene:

Hash modularH(k) = k(mod)n+1

n = elementos del arreglo

k = campo clave

H(k) = direcciones

Tabla 2. Tabla de direcciones con hash modular

K25435635541380104

H(k)64765415

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

Tabla 3. Tabla de arreglo con hash modular

X12345678910

H(k)8043542556

1310435

Como se puede apreciar en la tabla, ha habido colisiones. Para resolverlas, se aplicar el mtodo de prueba lineal, donde se obtiene:

Tabla 4. Tabla hash usando Prueba lineal

X12345678910

H(k)80435425563513104

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: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

X12345678910

H(k)8043542556

1310435

Usando el algoritmo de prueba cuadrtica, obtenemos:

Tabla 5. Tabla hash usando Prueba cuadrtica

X12345678910

H(k)8055435425561310435

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++

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

K25435635541380104

H(k)64765415

H(D)867

H(D)89

H(D)10

Entonces aplicamos el mtodo de doble direccin y obtenemos:Tabla 7. Tabla hash usando doble direccinX12345678910

H(k)80435425563510413

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)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:

Tabla 8. Tabla hash usando encadenamientoX12345678910

H(k)8043542556

13

104

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.

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.

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.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.ReferenciasOsvaldo Cairo, Silvia Guardati (2006). Methods of search, Estructura de datos 3 ED editionLuis 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 editionMartnez, R. (2007). Biblioteca Digital: conceptos, recursos y estndares. Buenos Aires: Alfagrama.

{Formatting Citation}

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

Diana Alexandra Soto Ocampo

[email protected]

Lina Mara lvarez Giraldo

[email protected]

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