TABLAS HASH       César Torres S.
HISTORIA Y ORÍGENES• El término hash proviene, aparentemente, de  la analogía con el significado de dicha palabra  en el m...
TABLAS HASH• Una tabla hash es una estructura de datos que  asocia llaves o claves con valores.• La operación principal qu...
TABLAS HASH• Comparada con otras estructuras de arrays asociadas,  las tablas hash son más útiles cuando se almacenan  gra...
TIEMPO DE EJECUCIÓN TABLAS HASH• Las tablas hash se implementar sobre arrays de una  dimensión,     aunque     se    puede...
FUNCIONAMIENTO• Las operaciones implementadas en las tablas hash son:   – inserción(llave, valor)   – búsqueda(llave) que ...
FUNCIONAMIENTO• Para usar una tabla hash se necesita:  – Una estructura de acceso  – Una estructura de datos con una clave...
OPERACIONES BÁSICAS TABLAS HASH• Inserción:• Para almacenar un elemento en la tabla hash se ha de  convertir su clave a un...
OPERACIONES BÁSICAS TABLAS HASH• El elemento se almacena en la posición de la  tabla obtenido en el paso anterior.• Si en ...
OPERACIONES BÁSICAS TABLAS HASH• Búsqueda• Para recuperar los datos, es necesaria la llave.• El valor obtenido se mapea al...
FUNCIONES HASH MÁS USADAS• Hash de División:• Dado un diccionario D, se fija un número m >=  |D|• Debe ser primo no cercan...
FUNCIONES HASH MAS USADAS• Hash de Multiplicación• Se escoge un tamaño de tabla m >= |D|.• Número irracional φ (normalment...
RESOLUCIÓN DE COLISIONES• Si dos llaves generan un hash apuntando al  mismo índice, los registros correspondientes  no pue...
RESOLUCIÓN DE COLISIONES• En 1 millón de entradas, hay un 95% de  posibilidades de que al menos una colisión  ocurra antes...
RESOLUCIÓN DE COLISIONES• ENCADENAMIENTO• En la técnica más simple.• Cada casilla en el array referencia una lista de los ...
• La técnica de encadenamiento tiene ventajas  sobre direccionamiento abierto. Primero el  borrado es simple y segundo el ...
• Las tablas hash encadenadas heredan las  desventajas de las listas ligadas. Cuando se  almacenan cantidades de informaci...
RESOLUCIÓN DE COLISIONES         Encadenamiento
RESOLUCIÓN DE COLISIONES• DIRECCIONAMIENTO ABIERTO• Las tablas hash de direccionamiento abierto pueden almacenar los  regi...
• El sondeo lineal ofrece el mejor rendimiento  del caché, pero es más sensible al  aglomeramiento• Doble Hasheo tiene pob...
• Una influencia crítica en el rendimiento de una tabla hash  de direccionamiento abierto es el porcentaje de casillas  us...
RESOLUCIÓN DE COLISIONES      DIRECCIONAMIENTO ABIERTO
VENTAJAS E INCONVENIENTES DE LAS          TABLAS HASH• Una tabla hash tiene como principal ventaja que  el acceso a los da...
• Necesidad de ampliar el espacio de la tabla si el volumen  de datos almacenados crece. Se trata de una operación  costos...
EJEMPLOS HASH• Ejemplo Hash 1 - > Web• Ejemplo Hash 2 - > Cain & Abel (Sniffer)
Tablas Hash
Tablas Hash
Próxima SlideShare
Cargando en…5
×

Tablas Hash

6.049 visualizaciones

Publicado el

0 comentarios
3 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
6.049
En SlideShare
0
De insertados
0
Número de insertados
8
Acciones
Compartido
0
Descargas
0
Comentarios
0
Recomendaciones
3
Insertados 0
No insertados

No hay notas en la diapositiva.

Tablas Hash

  1. 1. TABLAS HASH César Torres S.
  2. 2. HISTORIA Y ORÍGENES• El término hash proviene, aparentemente, de la analogía con el significado de dicha palabra en el mundo real: picar y mezclar.• Se cree que H. P. Luhn, empleado de IBM, fue el primero en utilizar el concepto en un memorándum fechado en enero de 1953. Su utilización masiva no fue hasta después de 10 años.
  3. 3. TABLAS HASH• Una tabla hash es una estructura de datos que asocia llaves o claves con valores.• La operación principal que soporta de manera eficiente es la búsqueda: permite el acceso a los elementos almacenados a partir de una clave generada• Funciona transformando la clave con una función hash en un hash, un número que la tabla hash utiliza para localizar el valor deseado.
  4. 4. TABLAS HASH• Comparada con otras estructuras de arrays asociadas, las tablas hash son más útiles cuando se almacenan grandes cantidades de información.• Las tablas hash almacenan la información en posiciones pseudo-aleatorias, así que el acceso ordenado a su contenido es bastante lento. Otras estructuras como árboles binarios auto-balanceables son más rápidos en promedio (tiempo de búsqueda O(log n)) pero la información está ordenada en todo momento.
  5. 5. TIEMPO DE EJECUCIÓN TABLAS HASH• Las tablas hash se implementar sobre arrays de una dimensión, aunque se pueden realizar implementaciones multi-dimensionales.• El tiempo es O(1)• En casos particularmente puede ser O(n).• Comparada con otras estructuras de arrays asociadas, las tablas hash son más útiles cuando se almacenan grandes cantidades de información.
  6. 6. FUNCIONAMIENTO• Las operaciones implementadas en las tablas hash son: – inserción(llave, valor) – búsqueda(llave) que devuelve valor• La mayoría de las implementaciones también incluyen borrar. También se pueden ofrecer funciones como iteración en la tabla, crecimiento y vaciado.• Algunas tablas hash permiten almacenar múltiples valores bajo la misma clave.
  7. 7. FUNCIONAMIENTO• Para usar una tabla hash se necesita: – Una estructura de acceso – Una estructura de datos con una clave – Una función (hash)
  8. 8. OPERACIONES BÁSICAS TABLAS HASH• Inserción:• Para almacenar un elemento en la tabla hash se ha de convertir su clave a un número. Esto se consigue aplicando la función resumen a la clave del elemento.• El resultado de la función resumen ha de mapearse al espacio de direcciones del array que se emplea como soporte, lo cual se consigue con la función módulo.• Tras este paso se obtiene un índice válido para la tabla.
  9. 9. OPERACIONES BÁSICAS TABLAS HASH• El elemento se almacena en la posición de la tabla obtenido en el paso anterior.• Si en la posición de la tabla ya había otro elemento, se ha producido una colisión. Este problema se puede solucionar asociando una lista a cada posición de la tabla, aplicando otra función o buscando el siguiente elemento libre.• Estas posibilidades han de considerarse a la hora de recuperar los datos.
  10. 10. OPERACIONES BÁSICAS TABLAS HASH• Búsqueda• Para recuperar los datos, es necesaria la llave.• El valor obtenido se mapea al espacio de direcciones de la tabla.• Si el elemento existente en la posición indicada en el paso anterior tiene la misma clave que la empleada en la búsqueda, entonces es el deseado. Si la clave es distinta, se ha de buscar el elemento según la técnica empleada para resolver el problema de las colisiones al almacenar el elemento.
  11. 11. FUNCIONES HASH MÁS USADAS• Hash de División:• Dado un diccionario D, se fija un número m >= |D|• Debe ser primo no cercano a potencia de 2 o de 10. Siendo k la clave a buscar y h(k) la función hash, se tiene h(k)=k%m.
  12. 12. FUNCIONES HASH MAS USADAS• Hash de Multiplicación• Se escoge un tamaño de tabla m >= |D|.• Número irracional φ (normalmente se usa 1+5^(1/2)/2 o 1-5^(1/2)/2). De este modo se define h(k)= Suelo(m*Parte fraccionaria(k*φ))
  13. 13. RESOLUCIÓN DE COLISIONES• Si dos llaves generan un hash apuntando al mismo índice, los registros correspondientes no pueden ser almacenados en la misma posición.
  14. 14. RESOLUCIÓN DE COLISIONES• En 1 millón de entradas, hay un 95% de posibilidades de que al menos una colisión ocurra antes de alcanzar los 2.500 registros.• Técnicas Resolución de Colisiones – Encadenamiento – Direccionamiento Abierto.
  15. 15. RESOLUCIÓN DE COLISIONES• ENCADENAMIENTO• En la técnica más simple.• Cada casilla en el array referencia una lista de los registros insertados que colisionan en la misma casilla.• La inserción consiste en encontrar la casilla correcta y agregar al final de la lista correspondiente. El borrado consiste en buscar y quitar de la lista.
  16. 16. • La técnica de encadenamiento tiene ventajas sobre direccionamiento abierto. Primero el borrado es simple y segundo el crecimiento de la tabla puede ser pospuesto durante mucho más tiempo dado que el rendimiento disminuye mucho más lentamente incluso cuando todas las casillas ya están ocupadas.• De hecho, muchas tablas hash encadenadas pueden no requerir crecimiento nunca, dado que la degradación de rendimiento es lineal en la medida que se va llenando la tabla.
  17. 17. • Las tablas hash encadenadas heredan las desventajas de las listas ligadas. Cuando se almacenan cantidades de información pequeñas, el gasto extra de las listas ligadas puede ser significativo. También los viajes a través de las listas tienen un rendimiento de caché muy pobre.
  18. 18. RESOLUCIÓN DE COLISIONES Encadenamiento
  19. 19. RESOLUCIÓN DE COLISIONES• DIRECCIONAMIENTO ABIERTO• 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 vacía, indicando que no existe esa llave en la tabla.• Las secuencias de sondeo más socorridas incluyen: – sondeo lineal - en el que el intervalo entre cada intento es constante (frecuentemente 1). – sondeo cuadrático - en el que el intervalo entre los intentos aumenta linealmente (por lo que los índices son descritos por una función cuadrática). – doble hasheo - en el que el intervalo entre intentos es constante para cada registro pero es calculado por otra función hash.
  20. 20. • El sondeo lineal ofrece el mejor rendimiento del caché, pero es más sensible al aglomeramiento• Doble Hasheo tiene pobre rendimiento en el caché pero elimina el problema de aglomeramiento.• El sondeo cuadrático se sitúa en medio.
  21. 21. • Una influencia crítica en el rendimiento de una tabla hash de direccionamiento abierto es el porcentaje de casillas usadas en el array.• Conforme el array se acerca al 100% de su capacidad, el número de saltos requeridos por el sondeo puede aumentar considerablemente.• Una vez que se llena la tabla, los algoritmos de sondeo pueden incluso caer en un círculo sin fin. Incluso utilizando buenas funciones hash, el límite aceptable de capacidad es normalmente 80%.• Con funciones hash pobremente diseñadas el rendimiento puede degradarse incluso con poca información, al provocar aglomeramiento significativo.
  22. 22. RESOLUCIÓN DE COLISIONES DIRECCIONAMIENTO ABIERTO
  23. 23. VENTAJAS E INCONVENIENTES DE LAS TABLAS HASH• Una tabla hash tiene como principal ventaja que el acceso a los datos suele ser muy rápido si se cumplen las siguientes condiciones:• Una razón de ocupación no muy elevada (a partir del 75% de ocupación se producen demasiadas colisiones y la tabla se vuelve ineficiente).• Una función resumen que distribuya uniformemente las claves. Si la función está mal diseñada, se producirán muchas colisiones.
  24. 24. • Necesidad de ampliar el espacio de la tabla si el volumen de datos almacenados crece. Se trata de una operación 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 más memoria de la necesaria; se suele resolver reservando espacio únicamente para punteros a los elementos.
  25. 25. EJEMPLOS HASH• Ejemplo Hash 1 - > Web• Ejemplo Hash 2 - > Cain & Abel (Sniffer)

×