Francisco J. Hernández López

Documentos relacionados
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

Alonso Ramirez Manzanares Computación y Algoritmos 03.05

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

TEMA 3 TRANSFORMACIÓN DE CLAVES (HASHING)

Hashing (Funciones de Dispersión)

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

Tablas de Dispersión (Hashing Tables)

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

else ADD(DELET E(t, s), s 1, i)

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

Tablas de dispersión (hash tables)

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

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

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

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

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

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

Diseño de Conjuntos y Diccionarios con Hashing

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

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

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

Esquema básico de una Tabla de Dispersión

Estructuras de datos: Tablas de dispersión

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

Estrategias de pivoteo

Lista Simple con Puntero al Principio y Puntero al Final

UNIVERSIDAD CATÓLICA DEL NORTE PROGRAMA DE ESTUDIOS IDENTIFICACIÓN DE LA ASIGNATURA. Nombre: Estructuras de Datos y Archivos

Tablas (Diccionarios). Modelo matemático

Capítulo 3. Clasificación en Memoria Secundaria

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 Ingeniería en Informática

Algoritmos y Estructuras de Datos Curso 04/05. Ejercicios

Practica 03: Diccionario con hashing abierto

Programación TADs Colecciones Conjuntos, Diccionarios y Tablas

4. TABLAS. Una tabla esta ordenada, si las claves de información de los registros están ordenadas: k j < k j+1 (j=1,2,...)

Descomposición QR. Problemas para examen. Agradezco a Aldo Iván Leal García por varias correcciones importantes.

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

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

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Este método de diseño de algoritmos en etapas, yendo de los conceptos generales a los de detalle, se conoce como método descendente (top-down).

Procesadores de lenguaje Tema 6 La tabla de símbolos

Splines (funciones polinomiales por trozos)

Tema 1: Conceptos generales del Análisis Numérico

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Tablas Hash y árboles binarios

ALN - Curso 2007 Gradiente Conjugado

INVESTIGACION DE OPERACIONES PROGRAMACION LINEAL ENTERA

PROGRAMACIÓN DINÁMICA. Idalia Flores

1. Planteamiento general

Almacenamiento y Recuperación de la Información

Ciencias de la Computación I

Aproximaciones y Error

Procesadores de lenguaje Tema 6 La tabla de símbolos

En los ejercicios 11 a 20, resuelva gráficamente y verifique su respuesta en forma algebraica.

Programa de estudios por competencias Seminario de solución de problemas de Estructura de Datos I

La función CONCATENAR

ESTRUCTURA DE ASIGNACIÓN

Ejercicios Unidad 5 Arreglos Resuelva cada problema a través de Arreglos y usando métodos:

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

Segundo parcial de Programación 2

Teorema Central del Límite (1)

Prerrequisitos de la asignatura Álgebra Lineal Numérica

Indexación y Asociación

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

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Parte de Algoritmos, de la asignatura de Programación Máster de Bioinformática Asociaciones y tablas hash. Asociaciones y tablas hash

Universidad Central Del Este U.C.E. Facultad de Ciencias Administrativas y de Sistemas Departamento de Ingeniería de Sistemas

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

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

Programación con C Intermedio

Francisco J. Hernández López

Catedra de Base de Datos

Carrera: IFM Participantes. Representantes de la academia de sistemas y computación de los Institutos Tecnológicos.

Estructuras Dinámicas de datos.

1. Introducción: Recordatorio Conjunto de elementos del mismo tipo conceptualmente t relacionados. Los elementos están indexados: Se accede a ellos at

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

UNIDAD 10. LAS CONSULTAS DE ACCIÓN

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

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

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

METODO SIMPLEX. Paso 1 Se convierte el modelo matemático de Programación Lineal (PL) a su forma estándar.

Matrices ortogonales y descomposición QR

Ecuaciones lineales con tres incógnitas y ecuaciones no lineales

Usando la sustitución para eliminar una variable

Elementos de Cálculo Numérico / Cálculo Numérico Primer Cuatrimestre 2016

Programación dinámica: un último ejemplo

Benemérita Universidad Autónoma de Puebla Facultad de Ciencias de la Computación Área de Programación

Complejidad de algoritmos recursivos

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

Prácticas de SAGE (caldum) 19 de Enero de 2012

Lección 10. Eliminación Gaussiana

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

Practica 03: Eliminación Gaussiana

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

INSTITUTO POLITÉCNICO NACIONAL SECRETARÍA ACADÉMICA DIRECCIÓN DE ESTUDIOS PROFESIONALES EN INGENIERÍA Y CIENCIAS FÍSICO MATEMÁTICAS PROGRAMA SINTÉTICO

CO5411. Dantzig-Wolfe / Descomposición de Benders. Prof. Bernardo Feijoo. 06 de febrero de 2008

Transcripción:

Francisco J. Hernández López fcoj23@cimat.mx

Contenedores que asocian claves con valores mediante un procedimiento conocido como hash o hashing Clave k A32641 O(1) Índice Clave Valor 0 A12456 Adrián Gordillo 1 B25130 Manuel López Función Hash 2 A32641 Patricia Suriano Índice 2 m-1 D15236 Rosalba López Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 2

Asociar pares de claves y valores usando arreglos mediante operaciones aritméticas, las cuales transforman las claves en los índices de dicho arreglo Si no hay limites de memoria Podríamos utilizar una tabla de grandes dimensiones, de esta forma, utilizaríamos la clave como el índice de la tabla Si no hay restricciones de tiempo Podemos usar un arreglo desordenado y realizar las búsquedas de forma secuencial Lo que hace el hashing es tener un balance entre la cantidad de memoria a utilizar y las restricciones del tiempo al realizar operaciones en los registros (consultas, inserciones, eliminaciones, etc ) Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 3

Cuando una función hash mapea dos o más claves en un mismo índice o registro Clave k A65282 O(1)? Índice Clave Valor 0 A12456 Adrián Gordillo 1 B25130 Manuel López Función Hash 2 A32641 Patricia Suriano Índice m-1 D15236 Rosalba López 2 Colisión, el índice ya esta ocupado por la clave A32641 Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 4

Los algoritmos de búsqueda que usan hashing, consisten en dos partes importantes: Función hash que mapee o transforme la clave en un índice del arreglo o tabla. Idealmente se quiere que diferentes claves se mapeen en diferentes índices Proceso para resolver colisiones Como en la practica lo que sucede es que diferentes claves pueden mapearse al mismo índice, entonces se debe usar algún método que resuelva dicho problema, por ejemplo: Encadenamiento separado Sondeo Lineal Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 5

Asumiendo que tenemos un arreglo o tabla T que puede almacenar M pares de claves-valores Necesitamos una función hash que pueda transformar una clave dada en un índice (un entero en el rango 0, M 1 ) Se busca una función hash que tenga las siguientes características: Que sea consistente, claves iguales deben producir el mismo índice Que sea fácil de calcular Que distribuya las claves de forma uniforme (indep. para cada clave) La función hash va a depender también del tipo de clave que estemos manejando, entonces necesitamos una función hash diferente para cada tipo de clave Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 6

Enteros positivos El método más común es el hashing modular: a) Se elige un arreglo de tamaño M (primo) b) Para cualquier entero positivo k se calcula el residuo de la división de k entre M: h k = (k % M) Número en punto flotante Si las claves son números reales entre 0 y 1: a) Se multiplica por M b) Se redondea al entero más cercano para obtener un índice entre 0 y M Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 7

Cadenas Cuando las claves son cadenas grandes, estas se pueden trabajar como si fueran enteros grandes Ejemplo: Nota: Modificar R y verificar que si usamos un número primo hay menos colisiones Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 8

Claves compuestas Si el tipo de clave tiene múltiples campos enteros, entonces podemos mezclarlos de igual forma que con los caracteres de las cadenas Ejemplo: Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 9

Es un método para resolver colisiones en una tabla hash La idea es construir para cada índice de la tabla, una lista ligada de todos los pares (clave-valor), cuyos hash den el mismo índice Se le llama encadenamiento separado, ya que los hash que colisionan son encadenados por separado en una lista ligada Aquí hay que elegir una M lo suficientemente grande para que el tamaño de las listas sea lo más pequeño posible El orden esperado es: O(1 + α) Con α = N el factor de carga M N Número de pares clave-valor M Tamaño de la tabla hash Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 10

Otra solución a las colisiones es almacenar N pares (clavevalor) en una tabla hash de tamaño M > N Se espera que las entradas vacías ayuden a la resolución de las colisiones Los métodos que usan esta estrategia son llamados: Métodos hashing de direccionamiento abierto El más simple de estos es el Sondeo Lineal: Cuando una colisión, solo se checa la siguiente entrada (o índice) hasta encontrar una desocupada Aquí el orden esperado es: O 1 1 α Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 11

1. La clave que está en la tabla es igual a la clave_k que se intenta buscar 2. Se encuentra una posición vacía: Significa que la clave_k no se encuentra en la tabla 3. La clave no es igual a la clave_k que se intenta buscar, entonces hay que intentar en la siguiente entrada Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 12

Si solamente ponemos NULL en la posición que se obtuvo con la función hash, puede haber un problema Recuerde que cuando insertamos elementos a la tabla, y si existen colisiones: Solo buscamos una posición desocupada avanzando de uno en uno Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 13

Clave A 0 B 8 C 3 D 3 E 1 F 3 G 9 hash() El problema con la eliminación es: Suponemos que en la siguiente tabla hemos almacenado las claves en las posiciones que nos devuelve cierta función hash(): 0 1 2 3 4 5 6 7 8 9 A E C D F B G Note que tanto C, D y F tienen el mismo índice=3 1. Eliminamos a D y solo ponemos un NULL en su respectiva posición 2. Buscar F: Resulta que su hash=3, pero ahí esta la C, entonces al seguir buscando una posición adelante, encontramos un NULL, y daríamos por concluida la búsqueda diciendo que F no está (ERROR) Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 14

Clave A 0 B 8 C 3 D 3 E 1 F 3 G 9 hash() Suponemos que en la siguiente tabla hemos almacenado las claves en las posiciones que nos devuelve cierta función hash(): 0 1 2 3 4 5 6 7 8 9 A E C F B G Note que tanto C, D y F tienen el mismo índice=3 Una solución a dicho problema es: 1. Eliminamos a D y ahora recorremos las claves (cuyo hash coincidan con el hash de la clave a eliminar) una posición antes 2. Buscar F: Resulta que su hash=3, pero ahí esta la C, entonces al seguir buscando una posición adelante, ahora si encontramos F Programación Avanzada, Tablas Hash, Francisco J. Hernández-López Agosto-Diciembre 2014 15