1 / 34

TABLAS HASH

TABLAS HASH. 1.- TABLAS HASH Una tabla hash es simplemente un array que hace uso de una función (Función Hash) donde los elementos son guardados de acuerdo a esta función.. U: universo h : U  {0,1,…, m-1} K: clave tabla hash : T[0… m-1] h: Función hash. Ejemplo :.

Download Presentation

TABLAS HASH

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. TABLAS HASH 1.- TABLAS HASH Una tabla hash es simplemente un array que hace uso de una función (Función Hash) donde los elementos son guardados de acuerdo a esta función.. U: universo h : U  {0,1,…, m-1} K: clave tabla hash : T[0… m-1] h: Función hash

  2. Ejemplo : Función hash h(k) = k mod 8

  3. usando h para mapear las claves hacia los slots de la tabla hash,las claves k2 y k5 tienen el mismo slots, entonces ellos colisionaron.

  4. Resolución de Colisión por Encadenamiento (Chaining) Las entradas en la Tabla Hash son dinámicamente asignadas e ingresadas en un linked list asociado con cada entrada en la tabla hash.

  5. Implementación Chained-hash-insertar(T,x) Insertar x en la cabecera de la lista T[h(clave[x])] Chained-hash-buscar(T,k) Buscar para un elemento con clave k en la lista T[h(k)] Chained-hash-eliminar(T,x) Eliminar x de la lista T[h(clave[x])]

  6. Análisis • El peor caso para la inserción es O(1). Por que se asume que el elemento x esta siendo insertado no esta en la tabla (puede ser verificada con un costo adicional). Para la búsqueda el peor caso es proporcional al tamaño de la lista(será analizada mas adelante). La eliminación sera de O(1) si la lista es una lista doblemente enlazada, sino estaríamos en el mismo caso de una búsqueda. • ¿Cuan bueno es el desempeño con Chaining? In Particular, ¿cuanto toma una búsqueda de un elemento y una clave dada? • Dado una tabla hash T con m slots que guardan n elementos.El peor caso es cuando todos los n elementos tienen el mismo slot, creando una lista de tamaño n el cual seria O(n) mas el tiempo de computo de la función.

  7. 2.- FUNCIONES HASH Que hace a un buena función hash? Debería ser fácil y rápida de calcular. También debería ser una función inyectiva, que quiere decir a claves distintas les debería asignar posiciones distintas dentro del array. También debería ser sobreyectiva, es decir, debería poder colocar alguna clave en todas las posiciones del array. H : Clave  Posición La cual es una función hash perfecta, la cual es difícil de encontrar por que el numero de claves posibles es muy grande del que solo almacenaremos un subconjunto pequeño, pero no sabemos a priori ese subconjunto

  8. Métodos El método de división Mapeamos una clave k dentro uno de los slots m tomando el resto de k dividido por m. h(k)= k mod m ejemplo en una tabla de tamaño 12 (m=12) y k=100, entonces h(k)=4(por requerir solo una división es muy rápido), en este método tenemos que evitar algunos valores. Por ejemplo m no debería ser una potencia de 2.

  9. El método de multiplicación Opera en dos pasos. Primero multiplicamos la clave k por A en el rango 0<A<1 y extraer la parte fraccionaria de kA, luego multiplicamos este valor por m. h(k) =  m(kA mod 1) donde “kA mod 1” significa la parte fraccionaria de kA, esto es, kA - kA  m no es critico típicamente es m = 2p Ejemplo:m = 16 , A = 0.3 k =75  kA =22.5 kA mod 1 = 0.5  12(0.5)=6

  10. 3.-DISPERCION ABIERTA • Todos los elementos son guardados en la misma tabla hash. • Inserción: se busca usa la función hash si para la clave hay un slots vació se inserta, si no la hay se busca hasta encontrar una posición libre(el cual requeriría de un tiempo de búsqueda de O(n)) • Búsqueda, eliminación: es similar a la inserción.

  11. Redispersion lineal Es de la forma: hi(k) = (k + i) mod m k mod m,(k+1) mod r,(k +2) mod r,... (i =0,1,2,…m-1 hi(k) y hi+1 (k) la distancia es constante generalmente 1)

  12. Redispersion Cuadrático • Es una variante del método lineal usa una función hash de la forma: • hi(k) = (h’(k) + i2) mod m , donde h’ es una función hash auxiliar , i = 0,1,…m-1, la colisión secundaria no implica la formación de cadenas siempre que h(k) ≠ h(k') y si h(k) = h(k') entonces las cadenas son idénticas. • Para mejorar el desempeño m es primo, de esa forma recorre [m/2] medios diferentes (dado que i y m-i modulo m son iguales) por lo que puede haber sitios libres y no los encuentre o la tabla, en al practica no es importante. Si después de [m/2] ensayos no se encuentra ningún sitio libre significa que la tabla esta casi llena y debe regenerarse.

  13. Dispersión doble • Es uno de los mejores métodos hábiles para direccionamiento abierto por que las permutaciones producidas tienen muchas de las características de permutaciones de elección aleatoria. La dispersión doble usa una función hash de la forma: • hi(k) = (h’(k)+ih’’(k)) mod m • es necesario que h’’(k) produzca valores entre 0 y m-1 que sea primo con m. h’’ depende de h’ por ejemplo: si h’(k) = k mod m  h’’(k) = 1 + (k mod (m-2)) idealmente m y m-2 deben ser PESI

  14. Ejemplo: sea una Tabla de capacidadDelArray=10, función de dispersión tal que hi(k) =(k +i) mod 10 (lineal) y hi(k) = (k+i2) mod 7 (cuadratica). Insertar en ella 89, 18, 49, 58 ,3 y 9 Lineal cuadrático doble

  15. Bibliografía • Estructuras de datos Especificación, diseño e implementación 3ra edición de Xavier Franch Gutiérrez • Introduction to Algorithms, 2da Edición deThomas H. Cormen

  16. Aplicaciones de las Tablas Hash

  17. Aplicaciones de las Tablas Hash permite el acceso a los elementos (teléfono y dirección, por ejemplo) almacenados a partir de una clave generada (usando el nombre o número de cuenta, por ejemplo).Es muy utilizado en los diccionarios.

  18. Por que es mejor utilizar la tabla Hash ? Cuando tenemos la necesidad de almacenar datos en memoria tenemos una serie de opciones: (listas enlazadas, arrayas, arboles...) cada una de las cuales tienes sus ventajas y sus inconvenientes que normalmente consisten en establecer un compromiso entre espacio en memoria y velocidad.

  19. Por que es mejor utilizar la tabla Hash ? Una lista enlazada aprovecha completamente el espacio de memoria pero la velocidad de búsqueda es lineal en un arrayreservamos toda la memoria que podríamos por adelantado pero por contra obtenemos un rendimiento de búsqueda constante O(1). Los arboles constituyen una variación de las listas enlazadas en las cuales se mejora el rendimiento de búsqueda (O(log(n))) a cambio de empeorar el rendimiento de inserción

  20. Por que es mejor utilizar la tabla Hash Las tablas hash constituyen una forma de obtener un rendimiento (casi) constante controlando la cantidad de memoria que deseamos comprometer, cuanto más pequeña sea la tabla mayor será el impacto sobre el rendimiento de la tabla debido al numero de colisiones.

  21. Funciones Hash en Criptografía

  22. Funciones Hash en Criptografía En informática, Hash se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc., resumir o identificar un dato a través de la probabilidad, utilizando una función hash o algoritmo hash. Un hash es el resultado de dicha función o algoritmo.

  23. Funciones Hash en Criptografía • Una función Hash "comprime" los bits del mensaje a un valor Hash de tamaño fijo, de manera de distribuir uniformemente los posibles mensajes en los posibles valores Hash

  24. Funciones Hash en Criptografía La función hash toma como entrada una cadena de longitud arbitraria, digamos 5259 bits, luego divide éste mensaje en partes iguales, digamos de 160bits; como en este caso y en general el mensaje original no será un múltiplo de 160, entonces para completar un número entero de partes de 160 bits al último se le agrega un relleno, digamos de puros ceros. En nuestro caso en 5259 caben 32 partes de 160 bits y sobran 139, entonces se agregarán 21 ceros más.

  25. Funciones Hash en Criptografía

  26. Funciones Hash en Criptografía • Posteriormente se asocia un valor constante a un vector inicial IV y H0=IV Ahora se obtiene H1 que es el resultado de combinar H0 con X1 usando una función de compresión f H1 = f(H0,X1) Posteriormente se obtiene H2, combinando H1 y X2 con f H2 = f(H1,X2) Se hace lo mismo para obtener H3 H3 = f(H2,X3) Hasta llegar a Ht Ht = f(Ht-1, Xt) Entonces el valor hash será h(M) = Ht

  27. Funciones Hash en Criptografía

More Related