Welcome to Scribd. Sign in or start your free trial to enjoy unlimited e-books, audiobooks & documents.Find out more
Download
Standard view
Full view
of .
Look up keyword
Like this
16Activity
0 of .
Results for:
No results containing your search query
P. 1
Metodos y Resolucion de Colisiones

Metodos y Resolucion de Colisiones

Ratings:
(0)
|Views: 1,763|Likes:
Published by Erik Juarez

More info:

Published by: Erik Juarez on Nov 28, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/21/2013

pdf

text

original

 
 
UAQ
FACULTAD DE INFORMÁTICA 
Campus Juriquilla
 Algoritmos y Estructuras de datos ALUMNOS: Erik René Juárez Vargas Adrian Pérez
Investigación :METÓDOS Y RESOLUCIÓN DE COLISIONES.
 
RESOLUCIÓN DE COLISIONES.Un aspecto importante a estudiar en el hasing es la resolución de colisiones entre sinónimos y sustres métodos basicos de resolución de colisiones, uno de ellos depende de la idea de mantener listasenlazadas de sinónimos, y los otros dos del cálculo de una secuencia de localizaciones en la tablahash hasta que se encuentre que se encuentre una vacía. El análisis comparativo de los métodos sehará en base al estudio del número de localizaciones que han de examinarse hasta determinar dondesituar cada nueva clave en la tabla.Para los ejemplos el tamaño de la tabla será M=13 y la función hash h
1
(k) que utilizaremos será:
HASH = Clave Mod M
y los valores de la clave k que consideraremos son los expuestos en la siguiente tabla:Suponiendo que k=0 no ocurre de forma natural, podemos marcar todas las localizaciones de la tabla,inicialmente vacías, dándoles el valor 0. Finalmente y puesto que las operaciones de búsqueda einserción están muy relacionadas, se presentaran algoritmos para buscar un item insertándolo si esnecesario (salvo que esta operación provoque un desbordamiento de la tabla) devolviendo lalocalización del item o un -1
(NULL)
en caso de desbordamiento.Encadenamiento separado o Hasing Abierto.La manera más simple de resolver una colisión es construir, para cada localización de la tabla, unalista enlazada de registros cuyas claves caigan en esa dirección. Este método se conocenormalmente con el nombre de
encadenamiento separado
y obviamente la cantidad de tiemporequerido para una búsqueda dependerá de la longitud de las listas y de las posiciones relativas delas claves en ellas. Existen variantes dependiendo del mantenimiento que hagamos de las listas desinónimos (FIFO, LIFO, por valor Clave, etc), aunque en la mayoría de los casos, y dado que laslistas individuales no han de tener un tamaño excesivo, se suele optar por la alternativa más simple,la LIFO.En cualquier caso, si las listas se mantienen en orden esto puede verse como una generalización delmétodo de búsqueda secuencial en listas. La diferencia es que en lugar de mantener una sola listacon un solo nodo cabecera se mantienen M listas con M nodos cabecera de forma que se reduce elnúmero de comparaciones de la búsqueda secuencial en un factor de M (en media) usando espacioextra para M punteros. Para nuestro ejemplo y con la alternativa LIFO, la tabla quedaría como semuestra en la siguiente figura:
 
A veces y cuando el número de entradas a la tabla es relativamente moderado, no es conveniente dar a las entradas de la tabla hash el papel de cabeceras de listas, lo que nos conduciría a otro métodode encadenamiento, conocido como
encadenamiento interno
. En este caso, la unión entre sinónimosestá dentro de la propia tabla hash, mediante campos cursores (punteros) que son inicializados a -1(NULL) y que irán apuntando hacia sus respectivos sinónimos.Direccionamiento abierto o Hasing Cerrado.Otra posibilidad consiste en utilizar un vector en el que se pone una clave en cada una de suscasillas. En este caso nos encontramos con el problema de que en el caso de que se produzca unacolisión no se pueden tener ambos elementos formando parte de una lista paraesa casilla. Parasolucionar ese problema se usa lo que se llama
rehashing 
. El rehashing consiste en que una vezproducida una colisión al insertar un elemento se utiliza una función adicional para determinar cualserá la casilla que le corresponde dentro de la tabla, aesta función la llamaremos función derehashing,
reh
(k)
.A la hora de definir una función de rehashing existen múltiples posibilidades, la más simple consisteen utilizar una función que dependa del número de intentos realizados para encontrar una casilla libreen la que realizar la inserción, a este tipo de rehashing se le conoce como
hashing lineal 
. De estaforma la función de rehashing quedaria de la siguiente forma:
reh
i
(k) = (h(k)+(i-1)) mod M i=2,3,...
En el ejemplo, después de insertar las 7 primeras claves nos aparece la tabla A, (ver la tablasiguiente). Cuando vamos a insertar la clave 147, esta queda situada en la casilla 6, (tabla B) una vezque no se han encontrado vacías las casillas 4 y 5. Se puede observar que antes de la inserción del147 había agrupaciones de claves en las localizaciones 4,5 y 7,8, y después de la inserción, esos dosgrupos se han unido formando una agrupación primaria mayor, esto conlleva que si se trata deinsertar un elemento al que le corresponde algunas de las casillas que están al principio de esaagrupación el proceso de rehashing tendrá de recorrer todas esas casillas con lo que se degradará laeficiencia de la inserción. Para solucionar este problema habrá que buscar un método de rehashingque distribuya de la forma más aleatoria posible las casillas vacías.

Activity (16)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Patry Paulino liked this
Nelly Mendoza liked this
Pablo Federico liked this
Aldo Castillo liked this
Henry Avila liked this
Blanca JM liked this

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->