Anda di halaman 1dari 18

Ing. Luis B.

Palma Ttito

TABLAS HASH
La tabla Hash o tabla de localizacin, nos permiten
acceder asociativamente a la informacin y, adems, lo
hacen en un tiempo medio constante, es decir, que el
tiempo necesario para acceder a un elemento, no va a
depender del nmero de elementos que almacene la
estructura.

f(clave)

Estructura de la Tabla Hash


Una estructura Hash se construye con tres elementos

bsicos :
Un vector direccionable mediante nmero de posicin (un

vector) capaz de almacenar N elementos.


Una funcin de dispersin que nos permita a partir de la clave
obtener el ndice donde estar el dato asociado a esa clave. Es
frecuente que existan dos claves distintas para las que la funcin de
dispersin produzca el mismo ndice. Esto se denomina colisin, y
las dos claves distintas que dieron lugar al mismo ndice, se dicen
sinnimas respecto a la funcin de dispersin utilizada.
Una funcin de resolucin de colisiones

VECTOR DIRECCIONABLE
La estructura ms adecuada para este propsito son las
Estructuras del tipo Arreglo, los cuales almacenan un
conjunto de variables del mismo tipo, cuyo acceso se
realiza atreves de ndices

FUNCIN DE DISPERSIN
La funcin de dispersin permite mediante la clave de
bsqueda obtener un ndice del arreglo en la cual deber
guardarse dicha clave. La eleccin de una buena funcin de
dispersin es vital para el buen funcionamiento de la
estructura.

Caractersticas de la Funcin de Dispersin


Sencilla y por tanto rpida.
La funcin debe distribuir uniformemente los elementos en el

espacio de almacenamiento
Evitar en lo posible la aparicin de sinnimos (evitar
colisiones)
Para dos claves muy similares, generar posiciones distantes.

Funcin de dispersin
Funcin Hash(ClaveBusqueda, TamaoTablaHash)
Inicio
ValorHash 0
PARA

i 1 HASTA longitud(ClaveBusqueda) HACER


ValorHash ValorHash + Valor_Numerico(Clavei)

Retornar ValorHash mod TamaoTablaHash


Fin

Funcin de dispersin
Funcin Hash(ClaveBusqueda, TamaoTablaHash)
Inicio
ValorHash 0

PARA

i 1 HASTA longitud(ClaveBusqueda) HACER


ValorHash 37 * ValorHash + Valor_Numerico(Clavei)

ValorHash ValorHash mod TamaoTablaHash

Si ValorHash < 0 Entonces


ValorHash TamaoTablaHash + ValorHash
Retornar ValorHash
Fin

FUNCIN DE RESOLUCIN DE COLISIONES


Es inevitable que algunas claves distintas lleguen a producir
el mismo resultado de la funcin de dispersin. Esto es un
problema. Pero hay dos estrategias muy utilizadas para
resolverlo este problema:
Dispersin Abierta: utilizaremos una estructura de datos

auxiliar para guardar los elementos cuya posicin ya esta


ocupada por otros elementos. Se suele utilizar una lista.
Dispersin cerrada: Evita el uso de una segunda estructura
de datos. En caso de colisin, se busca una posicin
alternativa hasta que se encuentre una libre. Se pueden llegar
a producir colisiones en cadena.

Exploracin lineal
Exploracin cuadrtica

Operaciones de la Tabla Hash


Bsqueda

Insertar
Eliminar

Algoritmo de bsqueda
1. A partir de la clave de bsqueda, se le aplica la
funcin de dispersin. Esto nos da un ndice del
arreglo.

2. Si el dato buscado est en ese ndice, se devuelve el


ndice y se finaliza.
3. Sino, se busca en la zona de resolucin de colisiones.

4. Si est, se devuelve la posicin del elemento en la


estructura y se finaliza.
5. Sino se indica que no se encuentra y se finaliza.

Algoritmo de Insercin
1.
2.
3.
4.
5.
6.

A partir de la clave de bsqueda, se le aplica la funcin de


dispersin. Esto nos da un ndice del arreglo.
Si ese ndice esta libre o marcado como borrado, se
guarda en l el elemento y se finaliza, Caso contrario, ir a
3.
Si quedan posiciones libres, ir a 4. Sino indicar que no
quedan posiciones libres y finalizar.
Se aplica la funcin de resolucin de colisiones, que nos
da un nuevo ndice.
Si est nueva posicin est libre, se guarda el elemento y
se finaliza.
Sino se vuelve a 3.

Algoritmo de Eliminacin
1. Se Busca el elemento. Si se encuentra, ir a 2. Caso
contrario error y finalizar.
2. Se marca el elemento como borrado y finalizar.

Algoritmo de modificaciones
1. Se busca el elemento. Si se encuentra, ir a 2. Caso
contrario error y finalizar.
2. Se hacen las modificaciones en la posicin devuelta
por la bsqueda y se finaliza.

Determinacin del tamao de la Tabla(N)


El tamao (N) de la tabla hash es un parmetro de vital
importancia para el correcto funcionamiento de la
estructura. Si N es demasiado alto, las operaciones
sern muy eficientes, pero desperdiciaremos
demasiado espacio. Si por el contrario, N es demasiado
bajo, las colisiones se dispararn y la estructura tendr
un rendimiento malo. Adems, uno de los
fundamentales problemas de las tablas Hash es que
una vez puesta en funcionamiento, la nica forma de
hacer crecer N es hacer una estructura nueva y copiar
los datos que ya hubiera en la antigua: N no se puede
cambiar dinmicamente.

Calculo del tamao de la Tabla Hash


N primer nmero primo mayor que 2M, donde M =
cantidad de datos que se pretende guardar en la tabla
hash.

Por ejemplo, si se desea guardar 5000 datos, entonces


el tamao de la tabla ser igual a 10007, ya que 10007 es
el primer nmero primo superior a 5000*2

Anda mungkin juga menyukai