tablas hash by fash

28
Tablas HASH Franco Sánchez Huertas ([email protected]) Víctor Arroyo Apaza ([email protected]) Algoritmos y Estructura de Datos Arequipa Perú UCSP 2008

Upload: francosh

Post on 18-Jun-2015

798 views

Category:

Documents


8 download

DESCRIPTION

Ya vico no te lleve slos creditos est elo hice solito xD

TRANSCRIPT

Page 1: Tablas Hash by FASH

1

Tablas HASHFranco Sánchez Huertas ([email protected])

Víctor Arroyo Apaza ([email protected])

Algoritmos y Estructura de Datos

Arequipa – PerúUCSP – 2008

Page 2: Tablas Hash by FASH

2

Introducción• Muchas aplicaciones requieren un conjunto dinámico que soporte las

operaciones de un diccionario: Insert, Search, Delete. Por ejemplo elcompilador cuando guarda los identificadores de un programa.

• Es posible hacer uso de una lista enlazada con un tiempo O(n) ; sin embargo,este tiempo se puede reducir notablemente a orden O(1) en la mayoría de loscasos usando una tabla hash.

• La idea surge de los arreglos que nos permiten acceso a sus elementos enorden O(1).

• Una opción sería usar un arreglo tan grande como el rango de posibles claves.La desventaja es el espacio de memoria requerido en tal estrategia.

• Otra opción es usar un arreglo menor, al cual podemos mapear las claves enuso. Esta función de mapeo es la función hash. La tabla así organizada es latabla hash.

• Como es posible que dos claves conduzcan al mismo mapeo (lo cual seconoce como una colisión), es necesario buscar formas para resolver estasituación.

• Una forma, conocida como hashing abierto (hay otros términos dependiendodel texto), crear una lista asociada a cada entrada del arreglo.

Page 3: Tablas Hash by FASH

3

Introducción

• Otra forma, conocida como hashing cerrado (el término depende del libro),almacena las claves en las mismas entradas del arreglo o tabla hash.

• Una tabla tiene varios campos (tipos de información)

– Una guía telefónica podría tener campos como: nombre, dirección,teléfono, etc.

• Para encontrar una entrada en la tabla, solo se necesita conoce el contenidode uno de los campos (no de todos ellos). Este concepto se le conoce comokey (clave).

– En la guía de teléfonos, la clave suele ser el nombre.• Idealmente, una clave identifica unívocamente una entrada.

– Si la clave es el nombre y ninguna entrada en la guía tiene el mismonombre, la clave identificará de forma univoca cada entrada.

Page 4: Tablas Hash by FASH

4

Definición

• Una tabla hash o mapa hash es una estructura de datos que asociallaves o claves con valores. La operación principal que soporta demanera eficiente es la búsqueda: permite el acceso a los elementos(teléfono y dirección, por ejemplo) almacenados a partir de una clavegenerada (usando el nombre o número de cuenta, por ejemplo).Funciona transformando la clave con una función hash en un hash, unnúmero que la tabla hash utiliza para localizar el valor deseado.

• Las tablas hash almacenan la información en posiciones pseudo-aleatorias, así que el acceso ordenado a su contenido es bastantelento. Otras estructuras como árboles binarios auto-balanceables sonmás lentos en promedio (tiempo de búsqueda O(log n)) pero lainformación está ordenada en todo momento.

• Comparada con otras estructuras de arreglos asociadas, las tablashash son más útiles cuando se almacenan grandes cantidades deinformación.

Page 5: Tablas Hash by FASH

Consideraciones

• El número de claves almacenadas es pequeña en relación con elnúmero de claves existentes

• Una tabla hash es un array pero de tamaño proporcional alnúmero de claves almacenadas (no al número posible declaves)

• Dada una clave k, no usaremos este valor como índice de latabla, en lugar aplicaremos una función especial a k llamadafunción hash

5

Page 6: Tablas Hash by FASH

6

Ventajas e Inconvenientes

• Una tabla hash tiene como principal ventaja que el acceso a los datos suele ser muyrápido si se cumplen las siguientes condiciones:

– Una razón de ocupación no muy elevada (a partir del 75% de ocupación seproducen 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.

• Los inconvenientes de las tablas hash son:

– Necesidad de ampliar el espacio de la tabla si el volumen de datos almacenadoscrece. Se trata de una operación costosa.

– Dificultad para recorrer todos los elementos. Se suelen emplear listas ocolecciones (Collection usadas en .net) para procesar la totalidad de los elementos.

– Desaprovechamiento de la memoria. Si se reserva espacio para todos los posibleselementos, se consume más memoria de la necesaria; se suele resolverreservando espacio únicamente para punteros a los elementos.

Page 7: Tablas Hash by FASH

7

Funciones Hash

• Una buena función hash debería satisfacer la suposición de hashuniforme.

• Como el recorrido de la función de hash es un número natural, hayque saber interpretar o transformar a número natural el tipo declave.

• Si se trata de claves enteras, el problema está más o menos resuelto.

• Si se trata de secuencia de caracteres, strings, se puede interpretarcada carácter como un número en base 128 (los números ASCII vandel 0 al 127) y el string completo como un número en base 128. Asípor ejemplo la clave “pt” puede ser transformada a(112*128+116)=14452. OBS: ASCII(p)=112 y ASCII(t)=116.

• En adelante supondremos que las claves son números naturales (o yahan sido transformadas a números naturales)

Page 8: Tablas Hash by FASH

8

Hashing Abierto• Suposición de hashing uniforme: es cuando cualquier elemento es igualmente

probable de caer en cualquiera de las m entradas de la tabla hash, independientementede cualquier otro elemento.

• Aún con hashing uniforme, el peor caso de hashing abierto nos conduce a una lista contodas las claves en una única lista. El peor caso para búsqueda es así (n).

• En hashing abierto la búsqueda no exitosa de una clave toma tiempo (1+ ), dondees el factor de carga =número de claves en la tabla/número de entradas en la tabla

hash.¿Por qué esto? El costo de calcular la función hash (1), más la prueba en cada una delos nodos de la lista asociada a la entrada. En promedio hay n/m nodos en cada lista yhay que probarlos todos ==> ( ). Luego se tiene que el tiempo total es (1+ ).

• Análogamente la búsqueda exitosa de una clave toma un tiempo (1+ /2)

• La inserción de una clave toma (1)

• La eliminación de una clave toma un tiempo (1+ ). Aquí suponemos que la clave debeser buscada dentro de la lista, para luego ser eliminada.

• En resumen, si la tabla mantiene un número limitado de claves, n/m está acotado poruna constante, todas las operaciones toman un tiempo (1).

Page 9: Tablas Hash by FASH

Visión gráfica (hashing abierto)

• Desde un “gran” Universo sólo un número reducido de claves serán consideradas.

Claves usadas

Universo de Claves

Función de mapeoo Función de hash

Lista Enlazada

Page 10: Tablas Hash by FASH

Hashing Cerrado

• En Hashing cerrado, todos los elementos o claves son almacenadas en la tabla hashing misma. Es decir, cada entrada de la tabla contiene un elemento del conjunto dinámico o NULL.

• Cuando se busca, examinamos varias entradas hasta encontrar lo buscado o es claro que no está.

• No hay una lista ni elementos almacenados fuera de la “tabla”.

• La tabla se podría llenar. El factor de carga no puede exceder 1.

• La gran ventaja de hashing cerrado es que elimina totalmente los punteros usados en la lista enlazada. Se libera así espacio de memoria, el que puede ser usado en más entradas de la tabla y menor número de colisiones.

Page 11: Tablas Hash by FASH

11

Visión gráfica (hashing cerrado)

• Desde un “gran” Universo sólo un número reducido de claves serán consideradas.

Claves usadas

Universo de Claves

Función de mapeoFunción de hash

La “lista” se almacena en la misma tabla

Page 12: Tablas Hash by FASH
Page 13: Tablas Hash by FASH
Page 14: Tablas Hash by FASH
Page 15: Tablas Hash by FASH

Método de División (h(k) = k mod m)

Ejemplo: m = 20, k = 91, h(k) = 11

Ventajas: Rápido

Desventajas: Evita ciertos valores de m .

Trabaja mal con las potencias de 2, si m = 2p, entonces h(k) eslos p bits menos significantes, de k.

POR EJEMPLO:

m = 2^6 >> La función hash no depende de todos los bits de k

si k = 0110001110110102, entonces h(k) = 0110102

Si k es una cadena de caracteres representado con radix 2^p,entonces m = 2p – 1 trabaja mal pues si se permutan el orden de loscaracteres se tiene el mismo valor de la función hash.

Usualmente se escoge como valor de m un número primo no cercanoni a 2 ni a 10.

15

Page 16: Tablas Hash by FASH

Método de Multiplicación

Donde:

Parte fraccionaria de kA

Dicho de otra manera se procede como sigue:

1. Escoger una constante A dentro del rango 0 < A < 1

2. Multiplicar kA

3. Extraer la parte fraccionaria de kA

4. Multiplicar la parte fraccionaria por m

5. Tomar el mínimo entero del resultado

Desventajas : Más lento que el método por división.

Ventajas : El valor de m no es crítico.

16

Page 17: Tablas Hash by FASH

Método de Multiplicación (Implementación)

17

Page 18: Tablas Hash by FASH

18

Page 19: Tablas Hash by FASH

Tablas Hash

Un problema es cuando el universo de claves es demasiado grande por ejemplo sitenemos 18,446,744,073,709,551,616 números de claves, esto mantendría un archivodemasiado grande incluso, si solamente se almacenarían algunas pocas entradas, ,entonces el las tablas de direccionamiento directo son útiles para ciertos casos, y paravalores pequeños de tablas, en este caso sen particular sería ingenuo utililizar una tablade direccionamietno directo

A diferencia de las tablas de direccionamieto directo en las tablas hash se requiere queel universo de claves sea mucho mayo en comparación con el conjunto posible declaves. de esta manera si tenemos por ejemplo 18,446,744,073,709,551,616 comonúmero máximo de clave no necesariamente tendremos un archivo de ese tamaño, sino un archivo de tamaño mucho menor, es decir la complejidad de espacio en estesentido será de O(k) llamaremos h a la función hash y será la encargada de mapearlas claves hacia una posición en la tabla, obviamente tendra valores dentro del rangode valores permitidos por el tamaño de la tabla es decir se mapeará dentro del rangode valores T={0,…,m-1}, siendo el universo de claves mucho mayor U={0,…,n-1} n>m

19

Page 20: Tablas Hash by FASH

20

Page 21: Tablas Hash by FASH
Page 22: Tablas Hash by FASH

22

In

Page 23: Tablas Hash by FASH

23

Page 24: Tablas Hash by FASH
Page 25: Tablas Hash by FASH

25

Factores que afectan al rendimiento de las tablas hash

• La función hash– Idealmente debería distribuir las claves y entradas por toda la tabla.– Debería minimizar las colisiones (posición devuelta por la función hash ya

ocupada).• Estrategia de resolución de colisiones

– Encadenamiento separado: enlazar juntas varias clave/entrada en cada posición.

– Direccionamiento abierto: almacenar claves/entradas en posiciones diferentes.

• Tamaño de la tabla (suele ser un número primo)– Demasiado grande: se desperdicia memoria.– Demasiado pequeño: incrementará las colisiones pudiendo forzar rehashing

(copiar en una tabla mayor).– Apropiado a la función hash utilizada.

Page 26: Tablas Hash by FASH
Page 27: Tablas Hash by FASH
Page 28: Tablas Hash by FASH

Fin de la Presentación... xD

KSI NO C/C++ (v. 2008.1)28