Tablas de Hash.

Slides:



Advertisements
Presentaciones similares
ÍNDICES.
Advertisements

IMPLEMENTACION CONTIGUA Y NO CONTIGUA
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Organizaciones Directas
IBD Clase 7.
Generación de Números Seudo-Aleatorios
EQUIPO ·# 3 SISTEMAS OPERATIVOS
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
Ordenamiento Interno y Búsqueda Binaria
Tema: Técnicas Básicas Excel (III) Trucos, opciones y personalización de Excel Índice: 1 Vínculos absolutos y relativos, conectando datos de Excel con.
Método para resolver colisiones
PROGRAMACION DE ESTRUCTURAS DE DATOS
Objetos de un programa Datos: Se denomina dato a toda aquella información característica de una entidad y que es susceptible de tratamiento en un programa.
Algoritmos Aleatorizados
Windows XP sp3.
Teoría de lenguajes y compiladores
Johanna Lizeth Rodríguez Lorena Fda. Chávarro Ramos
ORGANIZACIÓN RELATIVA ACCESO DIRECTO
METODO DE ORDENAMIENTO POR SELECCIÓN.
M.I.A Daniel Alejandro García López.  Primer componente: Arreglo de cubetas.- Es una arreglo A de tamaño N, en el que se puede considerar que cada celda.
Almacenamiento y Recuperacion de Información TAD_ABB Ana Lilia Laureano Cruces Universidad Autónoma Metroplotiana.
COLAS, IMPLEMENTACIÓN A PARTIR DE LISTAS Y PARA PILAS
HILOS Y COMUNICACIÓN ENTRE PROCESOS
EXPONENTES Y RADICALES
Resolución de Problemas Método Simplex
Universidad de los Andes-CODENSA
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Índice. Revisando conceptos acerca de la memoria.
Inteligencia artificial
Diseño y análisis de algoritmos
Estructuras de Datos Arreglos.
Clase 10: Estructuras de datos y arreglos.
Métodos de búsqueda Unidad 6.
Estructura de Datos II Equipo 4 Equipo 7 Acosta Montiel Miguel A.
Computación Aplicada Facultad de Ingeniería Universidad Autónoma de Querétaro Ma. Teresa García Ramírez 1.
Sistema de archivos Sistemas operativos.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
(Organización y Manejo de Archivos)
ELO3201 Contenedores Biblioteca Estándar de Templates Agustín J. González ELO320 Contenido Contenedores: Vector, List, Deque, Stack, Queue, Priority Queue,
Asignación de Espacio No Contiguo
Administración de Memoria
Aplicación de estructuras de datos
GRÁFICOS ESTADÍSTICOS
Datos a considerar: Las lectoras tiene memoria cache. Lo que significa que pueden almacenar datos aun estando fuera de línea. El programa se conecta a.
Agustín J. González ELO320: Estructura de Datos y Algoritmos
Programación en C para electrónicos
Teoría de Sistemas Operativos Administración de Archivos.
1 Tablas HASH Agustín J. González ELO320: Estructura de Datos y Algoritmos.
Parte I. Estructuras de Datos.
1. 2 Problema Telemóviles, una gran companía de telefonía, requiere mejorar la capacidad de identificación del usuario que llama: –dado un número de usuario,
Indexación M. Andrea Rodríguez Tastets DIIC - Universidad de Concepción
ELEMENTOS DE COMPUTACIÓN Profesor: Guillermo Figueroa
Sistemas de Archivos Sistemas Operativos.  Se debe proporcionar un almacenamiento secundario que respalda a la memoria principal  El Sistema de archivos.
Teoría de lenguajes y compiladores
Teoría de Sistemas Operativos Memoria Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Presente un cuestionario con los aspectos mas importantes sobre los
“CURSO PROPEDÉUTICO PARA EL MEJORAMIENTO DEL PENSAMIENTO MATEMÁTICO”
MIA - Grupo 5 Unidad 2.
CONCEPTOS BASICOS EXCEL 2007

M.C. Meliza Contreras González
Programación II Concepto de Archivos.
Programación de Sistemas
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
José Luis Vergara Soberanis..   Una tabla hash requiere mucho menos espacio de almacenamiento si el conjunto K es mucho menos pequeño que el universo.
Programación SISTEMAS NUMERICOS PROGRAMACION I INFO 012.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
1 Tablas HASH Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem
1 Tablas HASH Agustín J. González ELO320: Estructura de Datos y Algoritmos.
Transcripción de la presentación:

Tablas de Hash

Tablas de Hash Muchas aplicaciones requieren un conjunto dinámico que soporte las operaciones de un diccionario: Inserción, Búsqueda, Eliminación. Es posible hacer uso de una lista enlazada con un tiempo O(n). Otra alternativa es el uso de arreglos que nos permiten acceso a sus elementos en orden O(1). (Tablas de Direccionamiento Directo). Una opción sería usar un arreglo tan grande como el rango de posibles claves, de tal manera que la clave del elemento determinara su posición en la tabla. La desventaja es el espacio de memoria requerido en tal estrategia.

Claves Almacenadas (K) Tablas de Hash Tablas de Direccionamiento Directo 9 8 7 6 5 4 3 2 1 Universo de Claves U 2 5 8 6 3 4 7 9 Claves Almacenadas (K) 1 1 3 5 7 9

Tablas de Hash Tablas de Direccionamiento Directo Estructura de Datos y Operaciones: onstante MAXCLAVES = |U|; tipo RangoClaves = 0..MAXCLAVES-1; TipoClave = Entero; TipoInfo = ?; TipoElem = registro clave: TipoClave; info: TipoInfo; fregistro;   PTR_TipoElem = apuntador a TipoElem; TDD = arreglo [RangoClaves] de PTR_TipoElem; proc insertarTDD(var T: TDD; x: TipoClave; e: TipoInfo); proc eliminarTDD(var T: TDD; x: TipoClave); func buscarTDD(T: TDD; x: TipoClave): TipoElem;

Mal uso del espacio de almacenamiento Tablas de Hash ¿Qué ocurre si el conjunto de las posibles claves es mucho más grande que las claves efectivamente almacenadas? Se requeriría una estructura muy grande para almacenar un un número relativamente pequeño de elementos Mal uso del espacio de almacenamiento

Tablas de Hash Tablas de Hash ¿Alternativa de solución? Otra opción es usar un arreglo menor, y convertir las claves en uso en índices de la tabla a través de una función. Esta función de mapeo es la función hash. La tabla así organizada es la tabla hash. h(k) = i h: Función de hash k: Clave i: Dirección o índice en la tabla

Claves Almacenadas (K) Función de hash o función de mapeo Tablas de Hash Tablas de Hash Universo de Claves U 2 5 8 6 3 4 7 9 Claves Almacenadas (K) 1 Función de hash o función de mapeo Tabla de Hash

Colisión: k1  k2 ; h(k1) = h (k2) Tablas de Hash Tablas de Hash Como es posible que dos claves conduzcan al mismo mapeo, es decir, que la función de hash produzca el mismo resultado para dos claves diferentes (colisión). Colisión: k1  k2 ; h(k1) = h (k2) Es necesario buscar formas para resolver esta situación. Hay básicamente dos estrategias: Hashing Abierto: Cada entrada de la tabla contiene una lista enlazada en la cual se almacenan todos elementos que, de acuerdo a la función de hash, correspondan a dicha posición arreglo. Hashing Cerrado: Cada entrada de la tabla contiene un solo elemento. Cuando ocurre una colisión, ésta se soluciona buscando celdas alternativas hasta encontrar una vacía (dentro de la misma tabla)

h(k)  i; k  {1, 2, . . ., |U| }; i  {1, 2, . . ., |MAX_TABLA| – 1} Tablas de Hash Funciones de Hash Una función hash (h) convierte una clave en una dirección (índice) dentro del arreglo:   h(k)  i; k  {1, 2, . . ., |U| }; i  {1, 2, . . ., |MAX_TABLA| – 1} La función h debe cumplir en lo posible las siguientes condiciones: Producir tan pocas colisiones como sea posible. Distribuir las claves de manera uniforme en la tabla de hash (hash uniforme). Ser fácil y rápida de calcular.

Tablas de Hash Funciones de Hash Como el rango de la función de hash es un número natural, en el conjunto {1, 2, . . ., |MAX_TABLA| – 1}, esta debe transformar la clave en un número natural en ese rango. Si se trata de claves enteras, el problema está más o menos resuelto. Si se trata de secuencia de caracteres o strings, se puede interpretar cada caracter como un número en base 128 (los números ASCII van del 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 *1281 + 116 * 1280) = 14452. (ASCII(p)=112 y ASCII(t)=116)

Tablas de Hash Funciones de Hash Método de la división: Este método consiste en tomar el resto de la división por el número de entradas de la tabla. MAX_TABLA. Así h(k) = k mod MAX_TABLA No se recomienda que MAX_TABLA sea una potencia de 2. Lo más recomendable es que MAX_TABLA sea un número primo inferior al número total de elementos y no muy cercano a una potencia de dos. Ventaja: Fácil de calcular.

h(k) =  MAX_TABLA *(k*A mod 1) Tablas de Hash Funciones de Hash Método de la multiplicación: Este método opera en dos pasos: Se multiplica la clave por una constante A en el rango 0 < A < 1 y se extrae la parte fraccionaria de k*A. Se multiplica este valor por el número de entradas de la tabla y se toma el piso o se trunca el resultado. h(k) =  MAX_TABLA *(k*A mod 1) donde mod 1 debe ser interpretado como k*A - k*A Una ventaja de este método es que el valor de MAX_TABLA no es crítico. El método trabaja bien con cualquier valor de A, pero se recomienda A ~ (sqrt(5)-1)/2 ~ 0,6180339887

Claves Almacenadas (K) Función de hash o función de mapeo Tablas de Hash Hash Abierto Universo de Claves U 2 5 8 6 3 4 7 9 Claves Almacenadas (K) 1 Función de hash o función de mapeo Tabla de Hash

Tablas de Hash Hash Abierto La hash abierto, también llamada encadenamiento separado, consiste en tener en cada posición de la tabla, una lista de los elementos que, de acuerdo a la función de hash, correspondan a dicha posición. El peor caso de hashing abierto nos conduce a una lista con todas las claves en una única lista. El peor caso para búsqueda es así O(n).

Tablas de Hash Hash Abierto Estructura de Datos y Operaciones: onstante MAX_TABLA = ?; tipo RangoClaves = 0.. MAX_TABLA - 1; TipoClave = Entero; TipoInfo = ?; TipoElem = registro clave: TipoClave; info: TipoInfo; fregistro;   THAbr = arreglo [RangoClaves] de Lista[TipoElem]; proc iniciaTHAbr(var T: THAbr); func estaTHAbr (T: THAbr; x: TipoClave): booleano; proc insertarTHAbr(var T: THAbr; x: TipoClave; e: TipoInfo); proc eliminarTHAbr(var T: THAbr; x: TipoClave); func buscarTHAbr(T: THAbr; x: TipoClave): TipoElem;

Función de hash o función de mapeo Tablas de Hash Hash Cerrado Tabla de Hash Cerrado 9 8 7 6 5 4 3 2 1 Universo de Claves U Función de hash o función de mapeo K0 K5 K4 K8 K2 K7 K6 K1 Claves Almacenadas (K) K3 K9

Tablas de Hash Hash Cerrado El hash cerrado soluciona las colisiones buscando celdas alternativas hasta encontrar una vacía (dentro de la misma tabla). Se va buscando en las celdas: d0(k), d1(k), d2(k), ..., donde di(k) = (h(k) + f(i)) mod MAX_TABLA h(k, i) = (h’(k) + f(i)) mod MAX_TABLA Cuando se busca una clave, se examinan varias celdas de la tabla hasta que se encuentra la clave buscada, o es claro que esta no está almacenada. La inserción se efectúa probando la tabla hasta encontrar un espacio vacío.

Tablas de Hash Hash Cerrado Ventaja: Elimina totalmente los apuntadores. Se libera así espacio de memoria, el que puede ser usado en más entradas de la tabla. Desventaja: Si la aplicación realiza eliminaciones frecuentes, puede degradarse el rendimiento de la misma. Se requiere una tabla más grande. Para garantizar el funcionamiento correcto, se requiere que la tabla de hash tenga, por lo menos, el 50% del espacio disponible. Dentro de la dispersión cerrada hay tres estrategias distintas para localizar posiciones alternativas en la tabla: la exploración lineal, la exploración cuadrática y la dispersión doble. Cada una de ellas implica una función f(i) diferente.

Tablas de Hash Hash Cerrado Estrategias de Exploración de la Tabla Prueba lineal En este tipo de estrategia se utiliza la función f(i), la cual es una función lineal de i, por ejemplo: f(i) = i. La función de hash quedaría de la siguiente manera: h(k,i) = (h’(k) +i) mod MAX_TABLA Una desventaja de este método es la tendencia a crear largas secuencias de entradas ocupadas, incrementando el tiempo de inserción y búsqueda. Exploración cuadrática Este método de resolución de colisiones elimina el problema del agrupamiento primario. La función de colisiones es cuadrática: f(i) = c1i + c2i2. La función de hashing es:  h(k,i) = (h’(k) + c1i + c2i2.) mod MAX_TABLA

(k,i) = ( h1(k) + i*h2(k) ) mod MAX_TABLA Tablas de Hash Hash Cerrado Estrategias de Exploración de la Tabla Dispersión Doble Esuno de los mejores métodos disponibles para resolver colisiones en una tabla de hashing cerrado. La función de resolución de colisiones es de la forma de la forma f (i) = i * h2 (x).  La función h(k, i) queda definida como: (k,i) = ( h1(k) + i*h2(k) ) mod MAX_TABLA La función h1(k) es la función de dispersión original. Lo que se hace es aplicar una segunda función de dispersión h2 a k, y luego se prueba a distancias h2(k), 2h2(k). La función h2(x), nunca debe ser cero. En términos generales, la función:  h2(k) = R - (k MOD R) con R un número primo menor que MAX_TABLA, da buenos resultados.

Tablas de Hash Ejercicios 1. Considere el siguiente conjunto de datos: D = {(5, y1), (28, y2), (19, y3), (15, y4), (20, y5), (33, y6), (12, y7), (17, y8), (10, y9)}donde yi (1< i < 9) es la información asociada con cada clave. Muestre el proceso de inserción de las claves en una tabla de hash abierto de tamaño m = 9, utilizando como función de hash el método de la división (h(k) = k mod m). 2. Considere el siguiente conjunto de datos: D = {(61, y1), (62, y2), (63, y3), (64, y4), (65, y5)} donde yi (1< i < 5) es la información asociada con cada clave. Muestre el proceso de inserción de las claves en una tabla de hash abierto de tamaño m = 1000, utilizando como función de hash el método de la multiplicación