You are on page 1of 19

SALIR

Un ndice hash organiza las claves de bsqueda con sus punteros asociados a una estructura de archivos hash. Se aplica una funcin hash de una clave de bsqueda para identificar a un cubo, y almacenar la clave y sus punteros asociados en el cubo (o en cubos de desbordamiento). En rigor, los ndices hash son slo estructuras de ndices secundarios, ya que si un mismo archivo se organiza mediante hash, no hay necesidad de una estructura de ndice independiente de hash sobre el mismo.

MEN

Una tabla hash, mapa hash o tabla de dispersin 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.

Las tablas hash se suelen implementar sobre vectores de una dimensin, aunque se pueden hacer implementaciones multidimensionales basadas en varias claves. Como en el caso de los arrays, las tablas hash proveen tiempo constante de bsqueda promedio O(1),1 sin importar el nmero de elementos en la tabla. Comparada con otras estructuras de arrays asociadas, las tablas hash son ms tiles cuando se almacenan grandes cantidades de informacin. Las tablas hash almacenan la informacin en posiciones pseudo-aleatorias, as que el acceso ordenado a su contenido es bastante lento. Otras estructuras como rboles binarios auto-balanceables son ms rpidos en promedio (tiempo de bsqueda O(log n)) pero la informacin est ordenada en todo momento. MEN

El mtodo llamado por transformacin de claves (hash), permite aumentar la velocidad de bsqueda sin necesidad de tener los elementos ordenados. Cuenta tambin con la ventaja de que el tiempo de bsqueda es prcticamente independiente del nmero de componentes del arreglo. Trabaja basndose en una funcin de transformacin o funcin hash (H) que convierte una clave en una direccin (ndice) dentro del arreglo. Cuando se tienen claves que no se corresponden con ndices (p. ejem. por ser alfanumricas), o bien cuando las claves son valores numricos muy grandes, debe utilizarse una funcin hash que permita transformar la clave para obtener una direccin apropiada. Esta funcin hash debe de ser simple de calcular y debe de asignar direcciones de la manera mas uniforme posible. Es decir, dadas dos claves diferentes debe generar posiciones diferentes. Si esto no ocurre (H (K1)=d,H(K2)=d y K1_K2), hay una colisin. Se define, entonces, una colisin como la asignacin de una misma direccin a dos o ms claves distintas.

Consiste en tomar el residuo de la divisin de la clave entre el nmero de componentes del arreglo. La funcin hash queda definida por la siguiente formula: H(K) = (K mod N) + 1 Se recomienda que N sea el nmero primo inmediato inferior al nmero total de elementos.

MEN

Una colisin se produce durante una insercin cuando dos registros son ordenadas en la misma direccin supongamos que hay un registro en el archivo con el valor 15 la posicin seria 5 y hay otro archivo con el nombre 25 que tambin la posicin seria 5 Hay una colisin entre 15 y el 25. Una forma de resolver el problema de las colisiones es encontrar una funcin hash que evita las colisiones a eso se le llama hashing perfecto. Idealmente lo que se buscara es tener un "algoritmo de hash perfecto" en el cual no ocurran colisiones y siempre nos garantice direcciones diferentes. Pero desafortunadamente esto es casi imposible, se dice que 1 de 10^120000 algoritmos evitaran dichas colisiones, as que hay que acostumbrarse a la idea de trabajar y lidiar con colisiones.

Las tablas hash de direccionamiento abierto pueden almacenar los registros directamente en el array. Las colisiones se resuelven mediante un sondeo del array, en el que se buscan diferentes localidades del array (secuencia de sondeo) hasta que el registro es encontrado o se llega a una casilla vaca, indicando que no existe esa llave en la tabla.

MEN

Si dos llaves generan un hash apuntando al mismo ndice, los registros correspondientes no pueden ser almacenados en la misma posicin. En estos casos, cuando una casilla ya est ocupada, debemos encontrar otra ubicacin donde almacenar el nuevo registro, y hacerlo de tal manera que podamos encontrarlo cuando se requiera. Hay varias tcnicas de resolucin de colisiones, pero las ms populares son encadenamiento y direccionamiento abierto.

En la tcnica ms simple de encadenamiento, cada casilla en el array referencia una lista de los registros insertados que colisionan en la misma casilla. La insercin consiste en encontrar la casilla correcta y agregar al final de la lista correspondiente. El borrado consiste en buscar y quitar de la lista.

Las tablas hash de direccionamiento abierto pueden almacenar los registros directamente en el array. Las colisiones se resuelven mediante un sondeo del array, en el que se buscan diferentes localidades del array (secuencia de sondeo) hasta que el registro es encontrado o se llega a una casilla vaca, indicando que no existe esa llave en la tabla.

Una tabla hash tiene como principal ventaja que el acceso a los datos suele ser muy rpido si se cumplen las siguientes condiciones: Una razn de ocupacin no muy elevada (a partir del 75% de ocupacin se producen demasiadas colisiones y la tabla se vuelve ineficiente). Una funcin resumen que distribuya uniformemente las claves. Si la funcin est mal diseada, se producirn muchas colisiones. Los inconvenientes de las tablas hash son: Necesidad de ampliar el espacio de la tabla si el volumen de datos almacenados crece. Se trata de una operacin costosa. Dificultad para recorrer todos los elementos. Se suelen emplear listas para procesar la totalidad de los elementos. Desaprovechamiento de la memoria. Si se reserva espacio para todos los posibles elementos, se consume ms memoria de la necesaria; se suele resolver reservando espacio nicamente para punteros a los elementos.

Tamao del cubo es el nmero de registros que se pueden almacenar en un cubo Por ejemplo, desde un cubo de 1.024 bytes puede almacenar 10 registros cada una de ellas es de 100 bytes de longitud el tamao del cubo es de 10 Alternativamente, si la longitud del registro se duplica de 100 bytes a 200 bytes, el tamao del cubo se reduce de 10 a 5 A medida que aumenta el tamao del cubo, la probabilidad de desbordamiento disminuye, pero el tiempo necesario para buscar un registro en el cubo aumenta.

MEN

Existen varias tcnicas relacionadas con Hash y el manejo de colisiones, dichas tcnicas se basan en una estructura esttica, es decir, se calcula un cierto nmero de posiciones posibles (registros) y en base a este supuesto se ampla el espacio de direcciones y en consecuencia se disminuyen las colisiones. El algoritmo de Hash Extendido se basa en una estructura de recuperacin conocida como "trie", la cual se encuentra dentro del grupo de bsquedas por radio, esto debido a que se presenta un rbol donde cada rama presenta un radio de posibilidades hacia donde moverse. en la figura 9.9 tenemos un radio de 26 que son las letras del alfabeto.

Para el caso del hash extendido, el trie que se emplea es de radio 2, utilizando como valores posibles el 1 y el 0, significando un bit. De manera que las decisiones de "a qu rama moverse" se definir como una decisin bit por bit. As, si buscamos alguna llave cuyo hash produce una direccin empieza con "11" entonces recuperaremos la "cubeta C".

MEN

El concepto de Hash es un caso ideal en la recuperacin de informacin El Hash tradicional es muy eficiente pero tiene 2 problemas principales: colisiones y el hecho de ser esttico Al igual que el BTree la estructura crece dinmicamente y permite bsquedas de alta velocidad; pero para el acceso secuencial (BTree) es una ventaja que sigue ganando la competencia. No se tienen algunas mtricas importantes acerca de la capacidad de cada cubeta

MEN

You might also like