Your SlideShare is downloading. ×
15 Tablas Hash
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

15 Tablas Hash

29,427
views

Published on

Published in: Technology, Education

1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
29,427
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
654
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Tablas Hash Apoyo SSD5
  • 2. Introducción Una tabla hash es una estructura de datos que soporta la recuperación, eliminación e inserción de elementos de forma muy rápida. Mtl Lourdes Cahuich 2
  • 3. Tabla hash 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 Mtl Lourdes Cahuich 3
  • 4. Tabla hash 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 valor-clave. Mtl Lourdes Cahuich 4
  • 5. Tabla hash Esto significa que 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 están almacenados en pares de valor-clave. Mtl Lourdes Cahuich 5
  • 6. Tabla hash Las claves son las palabras, y los valores son las definiciones. Para acceder a una definición, debemos usar la clave correspondiente Mtl Lourdes Cahuich 6
  • 7. 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 colección Mtl Lourdes Cahuich 7
  • 8. Los conjuntos hash no asocian claves a los valores, simplemente almacenan un colección de claves. Por ejemplo, una lista de palabras comúnmente mal deletreadas, puede ser almacenada usando un conjunto hash. Mtl Lourdes Cahuich 8
  • 9. En este ejemplo, no hay un mapeo o asignación 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. Mtl Lourdes Cahuich 9
  • 10. Funciones Hash Las operaciones que usan tablas hash son eficientes porque la posición de un valor almacenado puede ser calculada usando la clave. Las tablas hash son implantadas por lo general, como un arreglo de valores. Mtl Lourdes Cahuich 10
  • 11. Funciones hash Una función hash es usada para asignar una clave a un índice dentro de este arreglo. Este índice está donde está almacenado el valor correspondiente a la clave. Mtl Lourdes Cahuich 11
  • 12. Tablas hash Otros algoritmos de búsqueda, como la búsqueda lineal o binaria, no pueden asignar una clave a la posición de su valor tan rápidamente como las tablas hash. Mtl Lourdes Cahuich 12
  • 13. Usos tablas hash Estos algoritmos deben desarrollar más comparaciones para encontrar el índice del valor almacenado. El tiempo que toma esta búsqueda aumenta conforme aumenta el número de elementos almacenados. Mtl Lourdes Cahuich 13
  • 14. Mtl Lourdes Cahuich 14
  • 15. Función hash En esta figura, la función hash genera un índice basado en el dígito colocado en el extremo derecho del valor ASCII de la segunda letra del apellido de la persona. Mtl Lourdes Cahuich 15
  • 16. Función y tabla hash Por ejemplo, en el nombre quot;Hanson, Bobquot;, la segunda letra es una quot;aquot;. El valor ASCII de quot;aquot; es 97. El dígito colocado en el extremo derecho de 97 es 7. Por lo tanto, el registro para quot;Hanson, Bobquot; es almacenado en el índice 7 de la tabla hash. Mtl Lourdes Cahuich 16
  • 17. Mtl Lourdes Cahuich 17
  • 18. Función y tabla hash La tabla hash en la figura anterior muestra cada nombre en su posición asignada. La ventaja de una tabla hash es que para encontrar una entrada, uno sólo tiene que aplicar la función hash a la clave Mtl Lourdes Cahuich 18
  • 19. Función y tabla hash Un método popular usado para implantar una función hash es el método de división. Como todas las funciones hash, el método de división asigna una clave a un índice dentro de la tabla hash. Mtl Lourdes Cahuich 19
  • 20. La implantación del método de división involucra la conversión de una clave a una variable de tipo unsigned int. Luego, este valor es dividido entre el tamaño de la tabla hash. Mtl Lourdes Cahuich 20
  • 21. class hash_function { public: unsigned int mm; hash_function(unsigned int m = 6151) : mm(m) {} unsigned int operator()(const string& s) const { unsigned int res = 0; for (int i = 0; i < s.size(); i++) { res = res * mm + s[i]; } return res; } }; Mtl Lourdes Cahuich 21
  • 22. Desventajas tablas hash Cuando consideramos que existen muchas más claves que posiciones dentro de una tabla hash, surge un problema. Esto significa que una función hash puede potencialmente asignar dos o más claves distintas al mismo índice. Mtl Lourdes Cahuich 22
  • 23. Colisiones en tablas hash Las implantaciones de tablas hash son complicadas por el hecho de que deben manejar colisiones potenciales. Estos mecanismos para manejar colisiones se discuten a detalle en el capítulo 20 del libro de texto de Weiss. Básicamente, las colisiones decrementan el desempeño de las operaciones de la tabla hash Mtl Lourdes Cahuich 23
  • 24. Colisiones en tablas hash La mejor manera de reducir el número de colisiones, y por ende, incrementar la eficiencia de la tabla hash, es usar una buena función hash. Una buena función hash distribuye equitativamente la asignación de claves a través de las posiciones de la tabla hash. Mtl Lourdes Cahuich 24
  • 25. Memoizing: Una Aplicación de las Tablas Hash Cuando es computacionalmente costoso calcular el valor de una función y = f(x), puede ser una buena idea almacenar el valor para un uso futuro. Mtl Lourdes Cahuich 25
  • 26. Memorizing En otras palabras, calculamos f(x) sólo la primera vez que el valor de la función de esta entrada particular x es requerida, y luego almacenamos ( x, f(x) ) en una tabla hash. Cualquier solicitud futura para f(x) resultará en una búsqueda en la tabla y será mucho más rápido el recálculo. Mtl Lourdes Cahuich 26
  • 27. Memorizing Esta técnica es llamada memoizing Aquí se muestra la estructura de una función memoized Mtl Lourdes Cahuich 27
  • 28. int f_memo(int x) { if ( there is an entry (x,y) in hash table ) { return y; } else { compute y = f(x) directly store (x,y) in table return y; } } Mtl Lourdes Cahuich 28
  • 29. Memorizing Debido a que la tabla hash tiene que persistir entre las llamadas a la función, sería natural organizarla como una clase que sobrecarga el operador (). Mtl Lourdes Cahuich 29