Esquema básico de una Tabla de Dispersión

Documentos relacionados
Tablas de dispersión (hash tables)

Tablas de Dispersión (Hashing Tables)

Estructuras de datos: Tablas de dispersión

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

Capítulo 3. Clasificación en Memoria Secundaria

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

Estructuras de datos y algoritmos

Procesadores de lenguaje Tema 6 La tabla de símbolos

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

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

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

Estructuras de datos: Árboles binarios de

Tablas de Dispersión

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

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

Alonso Ramirez Manzanares Computación y Algoritmos 03.05

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

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

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

Sistemas de Información II Tema 8. Estructuras de datos en memoria secundaria

Complejidad de algoritmos recursivos

Estructuras de datos y algoritmos

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

Diseño de Conjuntos y Diccionarios con Hashing

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

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

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

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

Tema 9. Recursividad

Bloque II. Elementos del lenguaje de programación Java

EDA. Tema 8 Colas de Prioridad: Heaps

Manos a la obra: Recursión, división y listas

Tema 7- Modelo y Aplicación de Pila, Cola y. Tema 7- Modelo y Aplicación de. Lista Con Punto de Interés

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

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

Estructura de datos y algoritmos. Tema IV: TIPOS DE DATOS ABSTRACTOS DINÁMICOS LINEALES

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

Estructura de Datos. Listas Enlazadas

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

TEMA 4 El tipo conjunto

Tema 2. Conjuntos y Diccionarios

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

Introducción: una simple colección

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

Profesor: José Miguel Rubio L.

El programa que permite el manejo de la base de datos tiene la siguiente funcionalidad:

Unidad II Tema 3: Tratamiento de arreglos y cadenas en Java

Fundamentos matemáticos. Tema 2 Matrices y ecuaciones lineales

Estructura de datos Tema 6: Tablas de dispersión (hashing)

Sacándole Partido a JUnit Módulo 1. Introducción a las Pruebas

Tema 10: Árbol binario de búsqueda

Tema 9. Algoritmos sobre listas. Programación Programación - Tema 9: Algoritmos sobre listas

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

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

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

Generación de Variables Aleatorias. UCR ECCI CI-1453 Investigación de Operaciones Prof. M.Sc. Kryscia Daviana Ramírez Benavides

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

Estructura de datos y Programación

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Tipos Recursivos de Datos

Estructuras de Datos y Algoritmos Tema 5: Tablas de Dispersión

Algoritmos de Ordenación

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Árboles B y B ) 20. Algoritmos y Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 63

Punteros y Memoria Dinámica I

Fracciones. El denominador 6, representa la cantidad de partes iguales en que se ha dividido la UNIDAD.

Unidad 5: Estructuras Estáticas I: Tablas 1 Unidad 5 ESTRUCTURAS ESTÁTICAS I: Tablas Desarrollo de la unidad : 36 h

Listas enlazadas. Programación de Sistemas

III. Desarrollo de aplicaciones con manejo de datos en la memoria Reuven Feuerstein Javier Navarro

Programación Dinámica

IMADIL /10/2014

Capítulo 12: Indexación y asociación

Porque usar Arreglos?

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Tipos abstractos de datos (TAD)

Estructuras de datos Listas y árboles

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

Introducción al tipo Vector Cómo guardar una colección de datos conceptualmente relacionados? - almacenar los 100 primeros números primos, - al

3. Gestionar tablas MOS EXCEL CREAR TABLAS.

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

Seminario 1. Excel Básico

Métodos de ordenamiento y búsqueda para datos en memoria principal

Generación de números aleatorios con distribución uniforme

Estructura repetitiva do while

TAD CONJUNTOS Y MULTICONJUNTOS

1. Introducción 2. Esquema básico 3. Codificación 4. Evaluación 5. Selección 6. Operadores 7. Ejemplo. Algoritmos genéticos

Matemáticas 2ºBachillerato Aplicadas a las Ciencias Sociales. Un sistema de ecuaciones lineales es un conjunto de ecuaciones lineales de la forma:

Tema 7.- Fundamentos de la Programación Orientada a Objetos

ASIGNATURA: ESTRUCTURA DE DATOS II

NIVEL 14: ESTRUCTURAS DE ACCESO DIRECTO

Examen Teórico Convocatoria de Junio de 2012

ADSW Tema 2 Diccionarios

Se desea estudiar el comportamiento de una función a medida independiente x se aproxima a un valor específico.

Estructuras de Datos Clase 20 Árboles de búsqueda

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 6

ESTRUCTURAS DE DATOS Y DE LA INFORMACIÓN 2

Simulación. pseudoalealeatorios

Transcripción:

3 Tablas de Dispersión Estructura de datos para gestionar colecciones de elementos donde la búsqueda de un elemento puede hacerse en O(1) en un alto porcentaje de casos - mejora el tiempo de búsqueda en listas: O(n) (o O(log n) si la lista está ordenada) Constituyen la generalización del concepto de "array" asocian cada llave (en array: cada valor del índice) con su valor correspondiente (en array: elemento que ocupa la posición indicada por el índice) También llamadas tablas hash Estructuras de Datos 2/11/11 43 Esquema básico de una Tabla de Dispersión Valores Llaves 0 Lolo "Pedro" "Lolo" hash("pedro") 3 hash("lolo") 0 1 2 Vacío Pepe Estructura de acceso aleatorio (array) "Pepe" hash("pepe") 2 3 Pedro 4 Vacío hash(): función de dispersión (también llamada función hash ) Estructuras de Datos 2/11/11 44 Función de dispersión Función que hace corresponder cada llave con un número entero que es el código de dispersión (hashcode) de esa llave Características de una buena función de dispersión: El código de dispersión debe ser un número dentro del rango de índices del array - suele utilizarse el operador módulo (% en Java) para lograrlo Debe generar una dispersión uniforme de las llaves en el array Debe poder computarse de manera muy eficiente Estructuras de Datos 2/11/11 45

Funciones de dispersión cuando la llave es un número entero Primer método: función módulo hash(llave) = llave % max donde max es el tamaño de la tabla Inconvenientes: -sólo se usa la parte menos significativa de la llave -puede producir distribuciones muy poco homogéneas - cuando alguna de las terminaciones de las llaves tiende a repetirse más que otras Ejemplo: llave=13267456, max=100 1 3 2 6 7 4 5 6 5 6 Estructuras de Datos 2/11/11 46 Funciones de dispersión cuando la llave es un número entero (cont.) Segundo método: troceado en grupos de cifras divide la llave en n grupos de cifras el código de dispersión se calcula como el módulo de la suma de esos grupos hash( llave) = n 1 llave ------------ mod max max i mod max i = 0 +Ventaja: utiliza todas las cifras de la llave -Inconveniente: es algo más costosa de calcular Ejemplo: llave=13267456, max=100, n=4 1 3 2 6 7 4 5 6 1 3 + 2 6 + 7 4 + 5 6 %100= 6 9 Estructuras de Datos 2/11/11 47 Funciones de dispersión cuando la llave es una cadena de caracteres Primer método: suma de los códigos ASCII de los caracteres length 1 hash( llave) = ascii( llave i ) % max i = 0 +Ventajas: sencilla y eficiente -Inconveniente: las llaves con los mismos caracteres (aunque estén en distinto orden) generan el mismo código de dispersión Ejemplo: llave="hola", max=100 hash("hola") = (ascii( h ) + ascii( o ) + ascii( l ) + ascii( a )) % 100 = (104 + 111 + 108 + 97) % 100 = 20 Estructuras de Datos 2/11/11 48

Funciones de dispersión cuando la llave es una cadena de caracteres (cont.) Segundo método: suma con pesos de los códigos ASCII de los caracteres al código ASCII de cada carácter se le suma un peso que depende de la posición que ocupa en la llave length 1 hash( llave) ascii( ( llave i ) peso i = ) % max i = 0 +Ventaja: el código depende de los caracteres que forman la llave y también del orden que ocupan dichos caracteres -Inconveniente: más costosa de calcular Ejemplo: llave="hola", max=100, peso=37 hash("hola") = (ascii( h )*37 3 + ascii( o )*37 2 + ascii( l )*37 1 + ascii( a )*37 0 ) % 100 = (104*50653 + 111*1369 + 108*37 + 97) % 100 = 64 Estructuras de Datos 2/11/11 49 Funciones de dispersión cuando la llave es una cadena de caracteres (cont.) Es posible simplificar el cálculo utilizando la siguiente propiedad: A 3 X 3 + A 2 X 2 + A 1 X 1 + A 0 X 0 = ((( A 3 )X + A 2 )X + A 1 )X + A 0 nos ahorramos calcular X i Nos permite representar la función hash mediante la siguiente expresión recursiva: ascii( llave 0 ) hash( llave i ) = ( ( ascii( llave i 1 ) max) + ascii( llave i )) hash( llave) = hash( llave length ) mod max Para cadenas largas, el resultado obtenido podría superar el valor máximo almacenable en un entero en ese caso se podría obtener un resultado negativo si esto ocurre le sumamos max para ponerlo en positivo Estructuras de Datos 2/11/11 50 Funciones de dispersión cuando la llave es una cadena de caracteres (cont.) Ejemplo: cálculo de la función hash para cadenas de caracteres public static int hashcode(string s, int max) { int cod=0; for (int i=0; i<s.length(); i++) { cod=(cod*37+ s.charat(i)); } cod = cod % max; if (cod<0) { cod=cod+max; } } return cod; Estructuras de Datos 2/11/11 51

Problema de las colisiones Valores Llaves 0 Lolo "Pedro" hash("pedro") 3 1 Vacío "Lolo" hash("lolo") 0 2 Pepe "Pepe" hash("pepe") 2 3 Pedro "Antonio" hash("antonio") 3 Colisión! 4 Vacío Estructuras de Datos 2/11/11 52 Métodos para la resolución de colisiones Métodos: encadenamiento o dispersión abierta por exploración o dispersión cerrada - exploración lineal - exploración cuadrática - otras exploraciones Su eficiencia depende del grado de ocupación de la tabla dispersión abierta: se puede funcionar bien con una ocupación del 100% (pero no conviene que crezca mucho más) dispersión cerrada: conviene que nunca se supere el 75% de ocupación Estructuras de Datos 2/11/11 53 Resolución de colisiones: dispersión abierta Tabla Hash 0 1 2 3 4 5 6 7 8 9 Estructuras de Datos 2/11/11 54

Resolución de colisiones: dispersión abierta (cont.) Cada elemento de la tabla hash es una lista enlazada Cada valor se guarda en la lista correspondiente a su código de dispersión Este método sólo es eficiente cuando la cantidad de colisiones es pequeña, y las listas son cortas Para ello se necesita que la tabla tenga un tamaño mayor o igual que el número de elementos a almacenar y que, además, la función hash sea muy homogénea Estructuras de Datos 2/11/11 55 Dispersión abierta: implementación de las operaciones asignavalor: asigna una llave con un valor - Busca si ya hay un valor para esa llave en la lista correspondiente - Si le hay, sustituye el viejo valor por el nuevo - Si no, añade el nuevo valor a la lista, por ejemplo al principio (ya que es más eficiente en una lista enlazada simple) elimina: elimina el valor asociado a una llave - Busca si hay un valor para esa llave en la lista correspondiente - Si le hay, le elimina de la lista - Si no le hay, informa de que no existe Estructuras de Datos 2/11/11 56 Dispersión abierta: implementación de las operaciones (cont.) obtenvalor: obtiene el valor asociado a una llave - Busca si hay un valor para esa llave en la lista correspondiente - Si le hay, le retorna - Si no, indica que no existe haznulo: elimina todas las asociaciones - Vacía (hace nulas) todas las listas de la tabla Estructuras de Datos 2/11/11 57

Resolución de colisiones: dispersión cerrada La tabla contiene directamente los valores asociados a las llaves Si se detecta una colisión, se intenta calcular un nuevo código de dispersión, hasta que se encuentra una posición vacía hash i ( x) = ( hash( x) + next() i ) mod max La tabla debe ser bastante mayor que el número de relaciones recomendado al menos el 50% de las celdas vacías La función next(i) es la estrategia de exploración: lineal: next(i)=i cuadrática: next(i)=i 2 doble dispersión: next(i)=i*hash alt (x) Estructuras de Datos 2/11/11 58 Exploración lineal hash(x) 3 hash i (X)=(hash(X) + i) mod max ocupado libre 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 X Ocupación de la tabla: λ=celdasocupadas/totalnumceldas Número medio de intentos para encontrar celda libre=1/(1-λ) - si están ocupadas la mitad de las celdas (λ=0.5) en promedio se necesitan 2 intentos - Si la ocupación es mayor, el número de intentos crece mucho Si la función hash no es homogénea la eficiencia empeora Tienden a formarse bloques de celdas ocupadas que degradan la prestaciones Estructuras de Datos 2/11/11 59 Exploración cuadrática hash(x) 3 +2 2 hash i (X)=(hash(X) + i 2 ) mod max ocupado libre +1 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 X 15 16 Evita en gran medida el agrupamiento de celdas ocupadas que ocurría con la exploración lineal Es preciso que la ocupación siempre sea inferior a la mitad El tamaño de la tabla debe ser un número primo Teorema: Dada una tabla de dispersión que utiliza exploración cuadrática, si su tamaño es un número primo siempre podremos insertar un nuevo elemento en la tabla si su ocupación es estrictamente inferior a 0.5. Además, durante el proceso de inserción, no se visita la misma posición más de una vez Estructuras de Datos 2/11/11 60

Exploración por doble dispersión hash i ( x) = ( hash( x) + i hash alt ( x) ) mod max Permite eliminar la agrupación secundaria que se produce en ocasiones con la exploración cuadrática hash alt (x) nunca debe dar cero - ej.: R-(x mod R), siendo R primo Estructuras de Datos 2/11/11 61 Borrado con dispersión cerrada elimina(c) hash(c) 3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A B C D E F ocupado libre borrado 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A B D E F Debe usarse la técnica del borrado perezoso : marcamos la celda como borrada (borrado libre) al buscar, si encontramos una celda marcada como borrada continuamos la búsqueda al añadir, puede ocuparse una celda marcada como borrada A veces será necesario recrear la tabla Estructuras de Datos 2/11/11 62 Dispersión cerrada: implementación de las operaciones asignavalor: asigna una llave con un valor - Utilizando la estrategia de exploración busca una celda libre o marcada como borrada - Asigna el valor a la celda elimina: elimina el valor asociado a una llave - Utilizando la estrategia de exploración busca una celda con el valor de la llave buscado - si encuentra una celda marcada como borrada, continúa la búsqueda - Si la encuentra, la marca como borrada - Si encuentra una celda libre, informa de que no existe ningún elemento con esa llave en la tabla Estructuras de Datos 2/11/11 63

Dispersión cerrada: implementación de las operaciones (cont.) obtenvalor: obtiene el valor asociado a una llave - Utilizando la estrategia de exploración busca una celda con el valor de la llave buscado - si encuentra una celda marcada como borrada, continúa la búsqueda - Si la encuentra, retorna el valor - Si encuentra una celda libre, informa de que no existe ningún elemento con esa llave en la tabla haznulo: elimina todas las asociaciones - Marca como libres todas las celdas de la tabla Estructuras de Datos 2/11/11 64 Eficiencia de las operaciones Eficiencia temporal de las operaciones (tanto con dispersión abierta como con dispersión cerrada): Operación asignavalor elimina obtenvalor Array O( 1) O( 1) O( 1) haznulo O(m) (1) (1) Donde m es el tamaño del array utilizado para implementar la tabla Estructuras de Datos 2/11/11 65