Está en la página 1de 4

HashTable (Tabla Hash)

Una tabla
hash,
es
una estructura
de
datos que
asocia llaves o claves con valores. La operacin principal que soporta de
manera eficiente es la bsqueda: permite el acceso a los elementos
(telfono y direccin, por ejemplo) almacenados a partir de una clave
generada (usando el nombre o nmero de cuenta, por ejemplo).
Funciona transformando la clave con una funcin hash en un hash, un
nmero que identifica la posicin (casilla o cubeta) donde la tabla hash
localiza el valor deseado. En otras palabras, una tabla hash no es ms
que un vector unidimensional que almacena elementos pero que a la
hora de la bsqueda podemos encontrar un elemento X con rapidez sin
la necesidad de recorrer todo el arreglo en busca de dicho elemento.
Cmo funciona?
Primero que nada, se necesita una funcin hash que asigne un nmero
(valor hash/clave) a un elemento determinado:

ValorHash = hash(x)

Se hace uso de una funcin (como la anterior, por ejemplo) para indexar
un valor al arreglo, aunque a veces suele pasar que la clave que nos
arroja la funcin hash es mayor que el tamao del arreglo, para resolver
dicho problema se hace uso de un operador modulo:

indiceHash = valorHash % length(array) es un entero entre 0 y


length(array) 1

Aqu vemos cmo es que a la cadena azul


se le aplica la funcin de dispersin y esta
arroja como resultado el valor 2, por lo que
la cadena azul encaja en el espacio 2 de la
tabla hash.
ValorHash = hash(azul)

El resultado de la operacin sera el siguiente:

Pero qu pasa cuando la funcin hash nos arroja una misma clave para
dos objetos distintos? A esto se le conoce como colisin.
Existen diversas maneras de manejar estas colisiones, una de ellas es la
exploracin lineal. Lo que hace la exploracin lineal es que cuando se
produce una colisin visita la siguiente casilla del arreglo, y si esta vaca
insertar el elemento en esa posicin, de lo contrario seguir buscando
casilla por casilla hasta encontrar un espacio libre.
Otra manera de manejar las colisiones es a travs de listas enlazadas,
as en cada posicin del arreglo se tiene una lista enlazada en la que se
van insertando los elementos cuya clave es la misma.

Factor

de

carga

Ahora que hemos insertado los elementos en la tabla hash llegamos a


otro concepto el cual es el de factor de carga, el cual nos dice el grado
de ocupacin de la tabla, este factor de carga es realmente importante
porque cuando es alto (>75%), el nmero de colisiones aumenta
considerablemente. Hay algo que se puede hacer para reducir el factor
de carga, a esto se le conoce como ReHashing, lo cual disminuye dicho
factor mediante la creacin de otro vector y pasando los nodos del
vector viejo al nuevo.

Bsqueda

Para recuperar los datos, es necesario nicamente conocer la


clave del elemento, a la cual se le aplica la funcin resumen.

El valor obtenido se mapea al espacio de direcciones de la tabla.

Si el elemento existente en la posicin indicada en el paso anterior


tiene la misma clave que la empleada en la bsqueda, entonces es
el deseado. Si la clave es distinta, se ha de buscar el elemento
segn la tcnica empleada para resolver el problema de las
colisiones al almacenar el elemento.

Aplicaciones

Correctores ortogrficos
Tablas de smbolos de compiladores
Diccionarios

Recomendaciones
A la hora de manejar las tablas hash es necesario tener en cuenta
algunas cosas para obtener un desempeo ms ptimo.
Es crucial que la funcin hash que nosotros vayamos a definir sea
fcilmente calculable para que al momento de ejecucin el coste de
operacin no sea un problema.

Otra cosa muy importante a tomar en cuenta es que el tamao de la


tabla hash debe ser mucho mayor al nmero de elementos que se tenga
pensado ingresar, esto se hace as para minimizar las colisiones y para
tener un factor de carga ptimo.

También podría gustarte