Tema 8: Tabla Hash Estructuras de datos Introducción Función

Anuncio
1
2
Estructuras de datos
Nivel de
Abstracción
Tema 8: Tabla Hash
Alto
Javier Miranda
Bajo
Estructura de datos
Pila, Cola, Árbol
Hash
Grafo
Array, Lista Enlazada, Árbol
Ordenación
(C) Javier Miranda
18-feb-04
(C) Javier Miranda
18-feb-04
3
4
Introducción
Función HASH
• Ventajas
CASO 1
– Inserción muy rápida O(1)
– Búsqueda muy rápida O (1)
Diseñar estructura de datos que permita
buscar e insertar muy rápido información de
1000 personas. Cada persona tiene una
clave entre 1 y 1000.
• Inconvenientes
– Basadas en arrays
– No es posible ordenar su contenido
– No es posible recorrer en orden su contenido
(C) Javier Miranda
18-feb-04
(C) Javier Miranda
18-feb-04
5
6
Función HASH
Función HASH
CASO 2
Solución 1
Sumar el código numérico de cada letra
Necesitamos almacenar todas las palabras
de un diccionario. ¿ Cómo las almacenamos
para que se puedan buscar e insertar en poco
tiempo ?
18-feb-04
(C) Javier Miranda
Problema: La tabla seria excesivamente
pequeña (no caben todas las palabras del
diccionario)
18-feb-04
(C) Javier Miranda
1
7
8
Función HASH
Función HASH
Solución 2
Función polinómica utilizando el código
numérico de cada letra (potencias de 27)
Objetivo
• Que la tabla sea del tamaño necesario para
almacenar justo el número de elementos que
queremos guardar
Problema: La tabla seria excesivamente
grande y con muchos huecos que no se
utilizarán nunca
• En la práctica veremos que es mejor que la
tabla tenga espacio para el doble de
elementos.
(C) Javier Miranda
18-feb-04
(C) Javier Miranda
18-feb-04
9
10
Colisiones
Función HASH
Soluciones
1. Buscar el hueco más cercano
Solución 3
Función polinómica utilizando el código
numérico de cada letra (potencias de 27) +
uso de la función mod para convertir el
número al rango de la tabla.
– Linear Probing
(x+1, x+2, ..., x+n)
– Quadratic Probing (x+1, x+22, ..., x+n2)
– Double Hashing Salto = K – (Clave mod K)
El Tamaño de la tabla debe
ser un número primo
Problema: COLISIONES (la función puede
asignar la misma posición a varias palabras)
2. Listas dinámicas
(C) Javier Miranda
18-feb-04
(C) Javier Miranda
18-feb-04
11
12
Tabla Hash
Linear Probing
Tabla Hash
Quadratic & Double Hashing
Run
18-feb-04
Run
(C) Javier Miranda
18-feb-04
(C) Javier Miranda
2
13
Detalles pendientes (cuando no
se utilizan listas dinámicas)
• ¿Duplicados? No se recomienda si no se utilizan
listas dinámicas porque obliga a recorrer siempre
todo el array
• Tamaño de la tabla: Si no se utilizan listas
dinámicas se recomienda el doble del número de
elementos para que no tarde demasiado en
encontrar un hueco libre
• ¿Ampliar la tabla? Habría que volver a insertar
de nuevo todos los elementos porque la función
hash depende del tamaño de la tabla.
18-feb-04
(C) Javier Miranda
3
Descargar