Вы находитесь на странице: 1из 3

Tabla Hash Las tablas hash aparecen para conseguir una bsqueda e insercin muy rpidas; para ello

se hace uso de un array, con lo que se vuelve a la estructura bsica de almacenamiento. Sin embargo, hay una diferencia importante que es lo que hace que sea mejor que el array en cuanto a rapidez; a cada dato se le asigna, mediante una frmula matemtica denominada funcin hash, una posicin nica en la tabla, con lo que la bsqueda, la insercin y el borrado son inmediatos: Una tabla hash que est apropiadamente configurada para los elementos que contiene, puede realizar estas operaciones en un tiempo fijo, a diferencia de otras estructuras de datos y algoritmos que ya hemos examinado, Algunas ventajas de las funciones hash: Deben proporcionar como salida la mayor parte de posiciones en la tabla. Deben distribuir las claves lo ms aleatoriamente posible por la tabla. Debe intentar minimizar el nmero de colisiones. De las desventajas que se pueden localizar en el uso de tablas hash se tienen las siguientes: Al tratarse de un array, el tamao de la tabla est limitado y debe fijarse desde el principio. Como las posiciones ocupadas no tienen por qu ser consecutivas, no se puede recorrer el contenido de una tabla hash. Como la posicin de una palabra se calcula de forma matemtica, los datos no pueden almacenarse ordenados. Si se permite datos duplicados se produce lo que se denomina colisin, que consiste en que a dos palabras se les asigna la misma posicin en el array. Observaciones importantes: Se recomienda fijar el tamao de la tabla hash como el doble del necesario para almacenar todos los elementos. Si queremos ampliar el tamao de la tabla, como la funcin hash depende del tamao de sta, hay que recalcular las posiciones de todos los elementos e insertarlos en estas nuevas posiciones, es importante recalcar que no se puede copiar directamente el contenido de una tabla a otra. El tamao de la tabla debe ser un nmero primo para evitar bucles infinitos. Se recomienda no permitir datos duplicados a no ser que se implemente la tabla hash con listas, ya que si se almacena todo en el array la gestin de la informacin para insertar y buscar se complica. En caso de que se permitiera datos duplicados en una tabla implementada con saltos, se necesita introducir un nuevo campo Borrado de tipo boolean en cada posicin que se diga si el dato contenido en esa posicin ha sido borrado o todava no se ha insertado nada en ella. La complejidad de la tabla hash aumenta, ya que cada posicin debe contener, adems, una bandera que indique: o Posicin libre: Valor L. o Posicin ocupada: Valor O. o Posicin borrada: Valor B. La insercin nicamente podr realizarse sobre posiciones libres (marcadas con L) o eliminadas (marcadas con B).

Si la funcin hash sobre una clave da como resultado una posicin que ya est ocupada, el direccionamiento cerrado resuelve las colisiones haciendo que la funcin hash dependa del nmero de intento realizado para la insercin.

Resolucin de colisiones Dado que la mayor parte de las funciones hash son sobreyectivas, se debe establecer un mecanismo para resolver las colisiones entre valores hash de claves diferentes: Mtodo de encadenamiento separado. Cada celda de la tabla hash es una lista que contiene las claves con el mismo valor hash. Mtodo de direccionamiento cerrado. Si se produce una colisin, se le asigna un nuevo valor hash a la clave hasta que se encuentre una posicin de la tabla vaca. Encadenamiento separado. La tabla se representa como un vector de listas de claves. Denominamos factor de carga al nmero medio de claves por lista. Una buena funcin hash debera tender a que el factor de carga est prximo a 1. La funcin hash secundaria se puede disear atendiendo a varias posibilidades: o Prueba lineal o Prueba cuadrtica: o hashing doble: Las bsquedas de una clave en la tabla hash se realizan en el mismo orden que se sigui para la insercin. Los borrados marcan las posiciones de la tabla con un valor distinto de libre u ocupado, para facilitar las nuevas inserciones y la bsqueda de elementos.

Diferencia entre mapas y conjuntos hash Los mapas hash y los conjuntos hash son dos tipos diferentes de tablas hash. Los mapas hash son estructuras asociativas que almacenan pares de valores-clave, mientras que los conjuntos hash son estructuras que mantienen el registro de la pertenencia de elementos dentro de una coleccin Los conjuntos hash no asocian claves a los valores, simplemente almacenan un coleccin de claves. Por ejemplo, una lista de palabras comnmente mal deletreadas, puede ser almacenada usando un conjunto hash. En este ejemplo, no hay un mapeo o asignacin de una clave a un valor como en el ejemplo del diccionario. Cada palabra sirve solamente como una clave. Por lo tanto, un conjunto hash es usado para reportar si existe o no una palabra en la lista. Funciones Hash Llamamos funcin hash a la funcin que asocia un valor clave con su posicin en la tabla hash. Esta funcin debe ser inyectiva. Sin embargo, encontrar tal funcin es complicado. Si conseguimos encontrar una funcin hash biyectiva, decimos que es perfecta. Para ello, el conjunto de datos debe ser fijo y conocido a priori. Usualmente, las funciones hash son sobreyectivas. Si la funcin hash obtenida es sobreyectiva, debemos resolver colisiones entre claves utilizando mecanismos para ello.

Conclusiones Una tabla hash es un tipo de mapa y los mapas son estructuras asociativas. Conceptualmente, las estructuras de datos asociativas almacenan datos en pares de valorclave. Por cada valor almacenado existe una clave correspondiente usada para acceder el valor. Un ejemplo real de una estructura de datos asociativa es un diccionario. En un diccionario, los datos estn almacenados en pares de valor-clave. Las claves son las palabras, y los valores son las definiciones. Para acceder a una definicin, debemos usar la clave correspondiente

Вам также может понравиться