Tablas Asociativas (Hash) Tablas: filas & columnas de información Especificación algebraica

Documentos relacionados
Hashing (Funciones de Dispersión)

Tema 05: Tablas hash. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Estructura de datos y Algoritmos. Tema III Clasificación en memoria secundaria

Tabla de Símbolos. Programación II Margarita Álvarez

Tabla de Símbolos. Programación II Margarita Álvarez

Capítulo 3. Clasificación en Memoria Secundaria

Tablas de dispersión (hash tables)

Tablas de Dispersión (Hashing Tables)

Algoritmos y Estructuras de Datos Curso 04/05. Ejercicios

Es común al crear estructuras de datos y luego trabajar sobre las mismas, tener la necesidad de realizar búsquedas en forma más frecuente que la

Algoritmos y Estructuras de Datos Ingeniería en Informática

Estructuras de datos: Tablas de dispersión

Tablas (Diccionarios). Modelo matemático

1. Características de la organización direccionada 2. Tipos de organización direccionada 3. Funciones de Transformación 4. Gestión de desbordamientos

ÍNDICE 1. Índice Listas ordenadas Operaciones permitidas Pilas Operaciones permitidas...

El TAD tabla y las tablas dispersas (o tablas hash) Lección 19

Esquema básico de una Tabla de Dispersión

Estructuras Dinámicas de datos.

Alonso Ramirez Manzanares Computación y Algoritmos 03.05

Estructuras de Datos y Algoritmos Tema 3: Arrays y listas enlazadas

Procesadores de lenguaje Tema 6 La tabla de símbolos

TEMA 2 Estructuras de datos lineales

Francisco J. Hernández López

Procesadores de lenguaje Tema 6 La tabla de símbolos

Examen de Estructuras de Datos y Algoritmos. (Modelo 2)

Examen de Estructuras de Datos y Algoritmos. (Modelo 1)

Archivos Indice. Indexación y. Asociación. Conceptos Básicos Indices Ordenados Arboles. Asociación. Docente: Albert A.

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 4. Técnicas de Dispersión. Definición y Manejo.

localizar de un dato con un acceso directo y en una sola comparación de la llave. HASH

El nivel Interno. Índice Tema 3

Árboles balanceados (AVL) Tablas de dispersión (Hash) Colas de prioridad (Heap)

Indexación y Asociación

SOLUCIÓN EJERCICIOS DE UTILIZACIÓN DE TIPOS ABSTRACTOS DE DATOS

TEMA 2. ORGANIZACIONES DE FICHEROS Y ESTRUCTURAS DE ACCESO

Análisis y Diseño de Algoritmos Tablas de Hash

Tema 6. Ordenación, búsqueda e intercalación interna

TEMA 4 El tipo conjunto

Registros Un campo: Registro:

TEMA 3 TRANSFORMACIÓN DE CLAVES (HASHING)

Eduardo Mosqueira Rey Bertha Guijarro Berdiñas Mariano Cabrero Canosa

Para archivos, existen las siguientes organizaciones:

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Estructuras de datos: Árboles binarios de

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Bloque III: Estructuras de datos no lineales

Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????

Tema 2. Conjuntos y Diccionarios

Diseño de Conjuntos y Diccionarios con Hashing

En las preguntas 1-30 indique la respuesta correcta. e= ninguna de las anteriores

Análisis del caso promedio El plan:

Estructura de Datos y de la Información

Profesor: José Miguel Rubio L.

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Tema 05: Tablas hash. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

4. Pilas ESTRUCTURAS DE DATOS 1

Tema 04: TAD Lista. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

TRABAJO PRÁCTICO N 7 Mapeos, diccionarios, arboles binarios de búsqueda y tablas de dispersión

Tema 10: Árbol binario de búsqueda

ESTRUCTURAS DE ARBOLES Y HASHING

Estructura de datos y de la información Boletín de problemas - Tema 10

Estructuras de Datos II

Tema 1. Ordenación, búsqueda e intercalación interna

Almacenamiento y Recuperación de la Información

Abelardo Pardo. Iria Estévez Ayres. Damaris Fuentes Lorenzo. Pablo Basanta Val. Pedro J. Muñoz Merino. Hugo A. Parada.

Estructuras de Datos. 8.6 Árboles B. Supongamos que los nodos de un árbol deben ser guardados en un medio de almacenamiento secundario (disco).

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas

Estructuras de Datos y Algoritmos

ESTRUCTURAS DE DATOS Y ALGORITMOS

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Laboratorio de Estructuras de Datos II

Especialista en Abstracción y Estructura de datos en C++

FICHEROS Y BASES DE DATOS (E44) 3º INGENIERÍA EN INFORMÁTICA. Tema 3. Estructuras de Almacenamiento. Básicas. Definición y Manejo.

Tema 10. Indexación y asociación

ANÁLISIS SEMÁNTICO LA TABLA DE SÍMBOLOS

Programación de sistemas Listas enlazadas

ESTRUCTURAS DE DATOS TEORÍA 2016/2017 PILAS

Indexación con lista enlazada

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

Estructura de Datos. Índice

PRUEBA EVALUABLE ESTRUCTURAS DE DATOS PARTE I

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

Objetivos. Conocer y saber utilizar diferentes tipos de datos. estructurados: cómo se definen. cómo están organizadas sus componentes

INDICE. Prólogo de la Segunda Edición

Tema 2. Conjuntos y Diccionarios.

Algoritmos y Estructuras de Datos I Ejercicios. Tema 3. Árboles

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Programación de sistemas

Árboles n-arios de búsqueda. Lección 16

DISEÑO FÍSICO DE UNA BASE DE DATOS EDWIN FERNANDO PACHECO FIGUEROA LICENCIATURA EN INFORMÁTICA UNIVERSIDAD DE NARIÑO

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

White paper Hashing. Autor: Ramix (Ramiro A. Gómez) Sitio web: Fecha: 6 FEB Indice

EJERCICIO 2 (3 PUNTOS) A) Sea el árbol binario AVL de la figura siguiente: B) Dada la estructura de la figura siguiente:

Segundo Parcial de Programación 2 7 de junio de 2017

Tema 09: TAD Árbol binario

Clase adicional 9. Listas enlazadas. Temas. Listas enlazadas Árboles Problemas de la clase adicional Ejercicios de diseño

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Algoritmos y Programación II Curso 2006

Otras estructuras de datos

Tablas de Dispersión

Transcripción:

Tablas Asociativas (Hash) Tablas: filas & columnas de información Una tabla tiene varios campos (tipos de información) Una guía telefónica podría tener campos como: nombre, dirección, número de teléfono, etc. Una cuenta de correo podría tener campos como: nombre de usuario (ID), password, nombre completo, etc. Para encontrar una en la tabla, sólo se necesita conocer el contenido de uno de los campos (no de todos ellos). Este concepto se conoce como key () En la guía de teléfonos, la suele ser el nombre En una cuenta de correo, la suele ser el nombre de usuario (ID) Idealmente, una identifica unívocamente una Si la es el nombre y ninguna en la guía tiene el mismo nombre, la identificará de forma unívoca cada 2 3.4.2 Especificación algebraica Operaciones: CrearTablaVacia EsTablaVacia Está Recuperar Insertar Borrar 3

3.4.2 Especificación algebraica del TAD TipoTabla ESPECIFICACION Tablas PARAMETROS GENERICOS TIPOS TipoElemento, TipoClave OPERACIONES Clave: TipoElemento TipoClave FIN PARAMETROS GENERICOS TIPOS TipoTabla OPERACIONES (* CONSTRUCTORAS GENERADORAS *) CrearTablaVacia: TipoTabla Insertar: TipoTabla x TipoElemento TipoTabla (* OBSERVADORAS SELECTORAS *) PARCIAL Recuperar: TipoTabla x TipoClave TipoElemento 4 3.4.2 Especificación algebraica del TAD TipoTabla (* OBSERVADORAS NO SELECTORAS *) EsTablaVacia: TipoTabla Booleano Esta : TipoTabla x TipoClave Booleano (* CONSTRUCTORAS NO GENERADORAS *) Borrar: TipoTabla x TipoClave TipoTabla VARIABLES e,e1,e2 : TipoElemento c : TipoClave t: TipoTabla ECUACIONES DE DEFINITUD SI Esta(t,c) DEF (Recuperar(t,c)) 5 3.4.2 Especificación algebraica del TAD TipoTabla ECUACIONES ENTRE GENERADORAS (*Conmutatividad y prevalencia ultima insercion *) Insertar(Insertar(t, e1), e2) = SI Clave(e1) = Clave(e2) Insertar(t,e2) Insertar(Insertar(t,e2), e1) ECUACIONES (* Observadoras selectoras *) Recuperar(Insertar(t,e), c) = SI Clave(e)=c e Recuperar(t, c) 6

3.4.2 Especificación algebraica del TAD TipoTabla (* Observadoras no selectoras *) EsTablaVacia(CrearTablaVacia) = CIERTO EsTablaVacia(Insertar(t,e)) = FALSO Esta(CrearTablaVacia, c ) = FALSO Esta(Insertar(t,e),c ) = SI Clave(e) = c CIERTO Esta(t,c) (* Constructoras no generadoras *) Borrar(CrearTablaVacia, c) = CrearTablaVacia Borrar(Insertar(t, e), c) = SI Clave(e) = c Borrar(t,c) Insertar(Borrar(t,c), e) FIN ESPECIFICACIÓN 7 Implementación de tablas La elección de la implementación depende de las siguientes características Frecuencia de inserción y borrado de s Cantidad de s dispoblibles que es probable usar Patrón probable de búsquedas por e.g. Serán todas las búsquedas mediante una o dos s? La tabla es suficientemente pequeñas como para caber en memoria Vida útil de la tabla 8 NodoTabla: una y su Para las búsquedas se suele almacenar de forma separada la y la (incluso aunque se repita la información) NodoTabla Smith Smith, 124 Hawkers Lane, 9675846 Yeo Yeo, 1 Apple Crescent, 0044 1970 622455 9

0 0 Implementación 1: Array secuencial desordenado Array donde cada NodoTabla se almacena consecutivamente en cualquier orden Insertar: añadir al final del array; O(1) Encontrar: buscar por las s, potentialmente, todas O(n) Borrar: encontrar + reemplazar el nodo eliminado con el último; O(n) 1 2 3 etc. 10 Implementación 2: Array secuencial ordenado Array donde NodoTabla se almacena consecutivamente y ordenado por la Insertar: añadir ordenado; O(n) Encontrar: búsqueda binaria; O(log n) Borrar: encontrar, eliminar el nodo y compactar; O(n) 1 2 3 etc. Se puede utilizar la búsqueda binaria porque el array está ordenado 11 Implementación 3: Lista enlazada (ordenada o no) NodosTabla se almacenan de nuevo consecutivamente Insertar: añadir por cabecera; O(1) o O(n) para listas ordenadas Encontrar: buscar por todas las posibles s; O(n) también O(n) para listas ordenadas Borrar: encontrar y eliminar, corrigiendo los punteros correspondientes; O(n) etc. 12

Implementación 4: Árbol AVL Árbol AVL, ordenado por la Insertar: insección estándar; O(log n) Encontrar: búsqueda estándar (sin eliminar); O(log n) Borrar: borrado estándar; O(log n) O(log n) is el mejor de todos pero sería deseable O(1) etc. 13 Implementación 5: Tablas hash Array en el que NodosTabla no se almacenan consecutivamente Su posición de almacenamiento se determina aplicando una función hash a la 4 función hash índice del array 10 Clave dispersada (Hashed key): resultado de aplicar la función has a la Claves y s se dispersan por todo el array 123 14 Implementación 5: hashing Array con NodosTabla almacenados no consecutivos su lugar de almacenado se calcula usando un función hash Insetar: calcular la posición de almacenamiento e insertar; O(1) Encontrar: calcular la posición de almacenamiento y devolver; O(1) Borrar: calcular la posición de almacenamiento y poner a null; O(1) 4 10 123 Todas las operaciones son O(1)! 15

Ejemplo de dispersión (Hashing) : Tienda de frutas 10 posiciones en la table hash Números de Stock entre 0 and 1000 función hash : no. stock / 100 Qué ocurres si se inserta el no. 350? Posición 3 está ocupada: hay una colisión Estrategia de resolución de Colisiones: insertar en la siguiente posición libre Dado un número de stock, se encuentra la posición utilizando la función hash aplicada al no. stock, resolviendo las colisiones si fuese necesario 0 1 2 3 4 5 6 7 8 9 key entry 85 85, manzanas 323 323, uvas 462 462, peras 350 350, naranjas 912 912, papayas 16 Factores que afectan al rendimiento de las tablas hash La función hash Idealmente debería distribuir las s y s 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 / en cada posición Direccionamiento abierto: almacenar s/s en posiciones diferentes Tamaño de la tabla (suele ser un número primo) Demasiado grande: se desperdicia memoria Demasiado pequeño, icrementará las colisiones pudiendo forzar rehashing (copiar en una tabla mayor) Apropiado a la función hash utilizada 17 Selección de la función hash: convertir la en una posición Truncado (Truncation) Ignorar parte de la y utilizar el resto como el índice del array Técnica muy rápida pero puede causar el agrupamiento de las s en alguna zona concreta de la tabla (clustering) Plegado (Folding) Dividir la en varias partes y combinarlas de forma apropiada Utiliza toda la información de la (no como el truncado) Aritmética Modular (Modular arithmetic) Dividir la posicón por el tamaño de la tabla y tomar el resto como nueva posición Esta técnica se puede usar después de un truncado y/o plegado o sola 18

( 1 ) Ejemplos de funciones hash Truncado: si los estudiantes tienen un identificador de 9- dígitos, tomar los tres últimos dígitos como posición de la tabla e.g. 925371622 se convierte en 622 Plegado: dividir el número de 9-dígitoa number en tres de 3- dígitos, y sumarlos e.g. 925371622 se convierte en 925 + 376 + 622 = 1923 Aritmética Modular: si el tamaño de la tabla es 1000, e.g. 1923 mod 1000 = 923 19 ( 2 ) Ejemplos de funciones hash Usar el número de teléfono como El código de área no es aleatorio, no dispersará las s/s por toda la tabla (habrá muchas colisiones) Los últimos tres dígitos son más aleatorios Usar un nombre como Usar el nombre entero en vez del apellido (los apellidos son menos diversos) Asignar nombres a caracteres (e.g. a = 1, b = 2; o valores Unicode) Estrategia 1: Sumar los números resultanes. Inapropiado para tamaños grandes de tabla Estrategia 2: Calcular el número máximo de caracteres c (e.g. c = 54 {a,..z}+{a,..,z}+{ }+{_}). Multiplicar cada caracter en el nombre por potencias incrementales de c. Finalmente, sumar el resultado 20 Seleccionar el tamaño de la tabla para minimizar las colisiones Al aumenta el número de elementos en la tabla, la probabilidad de colisión aumenta hacer la tabla grande pero práctica Si el tamño de la tabla es 100, y las s dispersadas son divisibles por 10, habrá muchísimas colisiones Muy malo sin el tamaño es potencia de un entero pequeño (e.g. 2 o 10) En general, las colisiones suelen ser más frecuentes si: Máximo común divisor(s dispersadas, tamaño tabla) > 1 Consecuencia: tamaño de la tabla número primo (gcd = 1) Las colisiones podría seguir produciéndose estrategia de resolución de colisiones 21

Resolución de colisiones: direccionamiento abierto (1) Prueba (Probing): si la posición, dada por la dispersada, está ocupada, incrementar la posición una cantidad hasta encontrar una posicón vacía Prueba lineal: incrementar de 1 en 1 [mod tamaño_tabla] Prueba cuadrática: añadir a la posición original, 1, 4, 9, 16, Utilizar la resolución de colisiones según se inserta y cuando se busca (asegurándose de que es la que se está buscando) Se podría también hacer un hash doble: redispersar con otra función hash Con direccionamiento abierto, el tamaño de la tabla debería ser el dobe del número de elementos esperados 22 Resolución de colisiones: direccionamiento abierto (2) Si la tabla está vacia, si hay muchas colisiones, la prueba lineal puede agrupar (clustering) las s/s Incrementa el timpo de insertar y borrar 1 2 3 4 5 6 7 8 Para tabla de tamaño n, si está vacía, la probabilidad de que en la siguiente se ocupe una posición cualquiera es 1/n En el diagrama, la probabilidad de que la posición 2 se ocupe después es 2/n (tanto si cae en la 1 o la 2 se ocupa la segunda) Una vez que la 2 está llena, la probabilidad de ocupar la posición 4 es 4/n y la 7 es 7/n (i.e. la probabilidad de obtener cadenas largas se incrementa sucesivamente) 23 Resolución de colisiones: direccionamiento abierto (3) Una / vacía indica el final de un grupo (cluster) Se puede utilizar para terminar una operación de encontrar ya que no podría aparecer más adelante Consecuencia: si se elimina una, dentro de un grupo, no se debería vaciar (Poner un flag que indique que está vacía) Permite que la prueba lineal siga hasta el final del grupo El elemento se marca como eleminado pero se mantiene el cluster para aumentar la eficiencia de las operaciones 24

Resolución de colisiones: ( 4 ) direccionamiento abierto Laprueba cuadrática es una solución para el problema del agrupado (clustering) Prueba Lineal suma1, 2, 3, etc. a la dispersada original Prueba cuadrática suma 1 2, 2 2, 3 2 etc. a la dispersada original Sin embargo, la prueba lineal asegura que todas las posiciones libres se examinarán (la prueba cuadrática no lo hace) e.g. si el tamaño de la tabla es 16 y la dispersada es 3 se tendría la secuencia: 3, 4, 7, 12, 3, 12, 7, 4 En general, con prueba cudrática, la inserción podría ser imposible si la tabla está más llena que la mitad Necestia un rehash (doblar la tabla y redispersar) 25 Resolución de colisiones: encadenamiento separado Cada posición de la tabla es una lista enlazada Añadir s/s en la lista (por cabecera) Ventajas sobre el direccionamiento abierto: Inserción y borrado más sencillo El tamaño del array no es una limitación (aunque se debe minimizar las colisiones) tamaño de tabla igual al número de s esperadas Desventaja Sobrecarga de memoria si hay pocas s 4 10 123 No se necestia cambiar la posición ent. ent. ent. ent. ent. 26 Rehashing: aumentar la tabla Proceso de redispersión (rehashing): Crear una nueva tabla de tamaño doble (ajustando a un número primo) Transferir las s de la tabla vieja a la nueva, recalculando sus nevas posiciones (utilizando la función hash) Cúando se debe hacer rehashing Cuando la tabla está completamente llena Con prueba cuadrática, cuando la tabla está llena a la mitad o la inserción falla Por qué doblar el tamaño? Si n es el número de elementos en la tabla, después de la redispersión habrá n/2 inserciones (si se hizo con la tabla llena) Haciendo el tamaño 2n, se añade un coste constante a cada inserción 27

Aplicaciones de las tablas hash Los compiladores usan tablas hash (tabla de símbolos) para mantener al información de las variables declaradas Correctores ortográficos on-line si detectan un error ortográfico (en vez de corregir) se busca en un diccionario almacenado en una tabla hash buscando las palabras alternativas en orden constante Los juegos usan tablas para almacenar posiciones ya visitadas, ahorrando mucho tiempo si se vuelve a encontrar la misma posición Para comprobar si dos elementos son iguales si dos elementos tienen valor hash distinto los elementos son diferentes Almacenado de datos dispersos 28 Tablas hash Vs. otras estructuras Las tablas hash son convenientes cuando hay necesidad de muchas búsquedas en tiempos bajos Las tablas hash no son tan adecuadas si hay muchas inserciones y borrados, o si se necesita recorrer entera en este caso es mejor un AVL Si hay más datos que memoria dispoble, se suele utilizar un árbol-b Las tablas hash tampoco son convenientes si se ejecutan operaciones que requieran que las s estén ordenadas e.g. Encontrar el mínimo (los valores de las s no tienen que mantener el orden) 29 Prestaciones de las tablas hash Para analizar las prestaciones de las tablas hash se necesita considerar las búsquedas satisfactorias y no satisfactorias por separado Direccionamiento abierto El número de pruebas depende del factor de carga (denotado por λ) que representa el ratio entre s presentes en la tabla y posiciones del array Encadenamiento separado El número medio de pruebas para una búsqueda satisfactoria es λ y para una no satisfactoria es 1 + λ/2 30

Performance of Hashing (2) Para direccionamiento abierto, el cálculo es más complicado. Los valores típicos son: Factor de carga 0.1 0.5 0.8 0.9 0.99 Búsqueda satisfactoria Prueba lineal 1.05 1.6 3.4 6.2 21.3 Prueba cuadrática 1.04 1.5 2.1 2.7 5.2 Búsqueda no satisfactoria Prueba lineal 1.13 2.7 15.4 59.8 430 Prueba cuadrática 1.13 2.2 5.2 11.9 126 Indicar que los valores no dependen del tamaño del array o del número de s, sólo depende de su ratio (factor de carga) 31