Está en la página 1de 13

Colisiones y Soluciones

[ Estructura de Datos ]
Ingeniera de Sistemas
Tabla dispersa

Las tablas de dispersin o, simplemente tablas


hash, son estructuras de datos que se usan en
aplicaciones que manejan una secuencia de
elementos, de tal forma que cada elemento
tiene asociado un valor clave, que es un
nmero entero positivo perteneciente a un
rango de valores, relativamente pequeo. En
estas organizaciones, cada uno de los
elementos ha de tener una clave que identifica
de manera unvoca al elemento.
Tabla dispersa

Por ejemplo, el campo nmero de matricula


del conjunto de alumnos puede
considerarse un campo clave para
organizar la informacin relativa al
alumnado de una universidad. El nmero
de matrcula es nico, hay una relacin
biunvoca, uno a uno, entre el campo y el
registro alumno. Puede suponerse que no
existen, simultneamente, dos registros
con el mismo nmero de matrcula.
Problemas con Hash

Una funcin hash ideal, h(x), debe generar


direcciones distintas para dos claves
distintas. No siempre es as, no siempre
proporciona direcciones distintas; en
ocasiones, ocurre que dadas dos claves
diferentes x1, x2 h(x1) = h(x2). Este
hecho es conocido como colisin, es
evidente que el diseo una tabla dispersa
debe proporcionar mtodos de resolucin
de colisiones.
Soluciones de Colisiones

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:
insertar, buscar y eliminar.
Se consideran dos modelos para resolver
colisiones: la exploracin de direcciones
y el direccionamiento enlazado
Exploracin de Direcciones

Los diversos mtodos de exploracin 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 una posicin libre (un hueco) en
la operacin de insertar o se encuentra el
elemento buscado en las operaciones
buscar y eliminar.
Exploracin Lineal
Es la forma ms primaria y 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 esta
posicin ya est ocupada por otro elemento se ha
producido una colisin. La forma de resolver est colisin
con exploracin lineal consiste en buscar la primera
posicin disponible que siga a p. La secuencia de
exploracin que se genera es lineal: p, p+1, p+2, ... m-1, 0,
1, ... 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 0.
Ejemplo: Exploracin Lineal

Se tienen 9 elementos cuyas claves simblicas son x1,


x2, x3, x4, x5, x6, x7, x8 y x9.
Para cada uno la funcin de dispersin genera las
siguientes direcciones:
Exploracin cuadrtica

Suponiendo que a un elemento con clave x


le corresponde la direccin p y que la
posicin de la tabla indexada por p est
ocupada, el mtodo de exploracin o
prueba cuadrtica busca en las direcciones
p, p+1, p+4, p+9, ... p+i2, considerando la
tabla como un array circular. El nombre de
cuadrtica para esta forma de explorar se
debe al desplazamiento relativo, i2 para
valores de i= 1, 2, 3...
Exploracin cuadrtica

Se dispone de 9 elementos cuyas claves simblicas son: x1,


x2, x3, x4, x5, x6, x7, x8 y x9. El tamao de la tabla donde
se guardan es 17 (nmero primo), rango de 0 a 16. Para
cada uno de los elementos la funcin de dispersin genera
las direcciones:
Direccionamiento enlazado

Una alternativa a la secuencia de


exploracin es el direccionamiento
(hashing) enlazado. Se basa en utilizar
listas enlazadas (cadenas de elementos), 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) = h(x3) ... van a estar
ubicados en la misma lista enlazada
Ejemplo

La Figura muestra la estructura de datos


bsica para este mtodo de dispersin. La
idea fundamental es la siguiente: si se ha
elegido una funcin hash que genera
direcciones en el rango 0 a m-1, se debe
crear una tabla de m posiciones, indexada
de 0 a m-1; cada posicin de la tabla
contendr la direccin (referencia) de
acceso a su correspondiente lista enlazada.
Ejemplo

También podría gustarte