Práctica 7. TAD aplicación



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

Centro de Capacitación en Informática

Ampliación de Estructuras de Datos

Cómo?: Resolviendo el sistema lineal homógeneo que satisfacen las componentes de cualquier vector de S. x4 = x 1 x 3 = x 2 x 1

Base de datos en Excel

Resumen. Funcionamiento. Advertencia

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

Ecuaciones de primer grado con dos incógnitas

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Ideas básicas sobre movimiento

MANUAL DE USUARIO CMS- PLONE

Listas, Pilas, Colas y Punteros. Semana 3

TRAMITES ON-LINE MARCAS

SOLUCIÓN CASO GESTIÓN DE PERSONAL I

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

Centro de Capacitación en Informática

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

INTRODUCCION A LA PROGRAMACION DE PLC

Hot Potatoes, aplicaciones educativas

Módulo II - PowerPoint

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

Con esta nueva versión, si un artículo que está incluido dentro de un Paquete de Ventas tiene precio 0,00, significará gratis.

Introducción a la Firma Electrónica en MIDAS

SERVIDOR DNS DINÁMICO EN WINDOWS 2000/2003 SERVER.

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

CAPÍTULO 3 Servidor de Modelo de Usuario

GESTIÓN DOCUMENTAL PARA EL SISTEMA DE CALIDAD

La ventana de Microsoft Excel

Sistemas de numeración

árbol como un conjunto de nodos y líneas

Herramientas Software Unycop Win. Cuándo hay que hacer uso de las Herramientas Software?

BREVE MANUAL DE SOLVER

7. Manejo de Archivos en C.

BASES Y DIMENSIÓN. Propiedades de las bases. Ejemplos de bases.

Introducción a la plataforma Moodle Aníbal de la Torre Plataforma Moodle. Accediendo a los contenidos

Tema 3. Medidas de tendencia central Introducción. Contenido

Tarea 4.2 Memoria Virtual

Capítulo IV. Manejo de Problemas

Resumen del trabajo sobre DNSSEC

V Manual de Portafirmas V.2.3.1

OBTENER DATOS EXTERNOS

Nota 2. Luis Sierra. Marzo del 2010

Capítulo 1 Documentos HTML5

Técnicas de prueba 1. FUNDAMENTOS DE LA PRUEBA DEL SOFTWARE

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Jornada informativa Nueva ISO 9001:2008

PARTE 3 ECUACIONES DE EQUIVALENCIA FINANCIERA T E M A S

Cifras significativas e incertidumbre en las mediciones

GENERACIÓN DE CÓDIGO

Redes de área local: Aplicaciones y servicios WINDOWS

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO

6 M. C. J. A G U S T I N F L O R E S A V I L A

Puertas Lógicas. Contenidos. Objetivos

El proceso de edición digital en Artelope y CTCE

Árboles. Cursos Propedéuticos Dr. René Cumplido M. en C. Luis Rodríguez Flores

Primeros pasos con AutoCAD

Propuesta didáctica: Completar cuadrículas

Funciones en Excel (II)

UTILIZACIÓN DE UNA CUENTA DE CORREO ELECTRÓNICO (NUEVO) Acceso al correo electrónico

Manual Oficina Web de Clubes - Federaciones Autono micas y Delegaciones

Gabinete Jurídico. Informe jurídico 0196/2014

Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas.

Antes de empezar con la resolución de este caso vamos a analizar las funciones financieras que vamos a utilizar.

GUÍA PARA LA CONSULTA EN INTERNET DEL CATÁLOGO DE LA BIBLIOTECA DEL INSTITUTO CERVANTES DE MILÁN

Indicaciones específicas para los análisis estadísticos.

Instalación y mantenimiento de servicios de Internet. U.T.3.- Servicio DNS

Capítulo 6. ÁRBOLES.

Base de datos relacional

Características de funciones que son inversas de otras

MANUAL DE PUBLICACIÓN EN PORTAL UNED

Tema 3. Espacios vectoriales

Práctica 4 Diseño de circuitos con puertas lógicas.

Sistemas de Gestión de Calidad. Control documental

MANUAL DE AYUDA HERRAMIENTA DE APROVISIONAMIENTO

ARQUITECTURA DE DISTRIBUCIÓN DE DATOS

2_trabajar con calc I

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

Departamento CERES Área de Tarjetas Inteligentes Manual de Usuario

Resolución de Problemas

1) Aplicación Inp. Si has llegado hasta aquí poco te podemos decir ya de la misma. Seguimos.

MANUAL DE USUARIO Y EJEMPLO DE UTILIZACIÓN HERRAMIENTA DLP-DELPHI LEARNING PACKAGE

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

OPERACIONES EN RÉGIMEN DE COMPUESTA

Manual SBR. Pero antes de explicar las actividades que principalmente podemos desarrollar vamos a dar una visión global de la aplicación.

GENERALIDADES DE BASES DE DATOS

La pestaña Inicio contiene las operaciones más comunes sobre copiar, cortar y pegar, además de las operaciones de Fuente, Párrafo, Estilo y Edición.

Manual de NVU Capítulo 4: Los enlaces

Apuntes Recuperación ante Fallas - Logging

MÓDULO 2: TRATAMIENTO DE DATOS CON HOJA DE CÁLCULO. Tema 1: Gestión de listas de datos y tablas dinámicas. Leire Aldaz, Begoña Eguía y Leire Urcola

FOCO GESTIÓN DE GRUPOS

La elección de Blogger como la plataforma o lugar donde

Gestión de Retales WhitePaper Noviembre de 2009

Certificados para la exportación de dispositivos médicos por David Racine

PS.Vending Almacén Pocket PC

28 = =

Manual: Gestor de contenidos e-gim cms. 6 abril 2010

TPVFÁCIL. Caja Real. Definiciones.

Sistema de Contabilidad General. Contenido. ACTUALIZACION A PROCONTA 6.0

Transcripción:

bjetivos. Práctica 7. TAD aplicación Se trata de construir el TAD APLICACIN con una implementación acotada. Se introducen la dispersión (hashing) y las cachés como técnicas de implementación para mejorar la eficiencia. Enunciado. Construir el TAD APLICACIN según el siguiente módulo de definición: DEFINITIN MDULE Aplicacion; FRM Dominio IMPRT DMINI; FRM Rango IMPRT RANG; APLICACIN; PRCEDURE Crear(): APLICACIN; PRCEDURE Destruir(AR a: APLICACIN); PRCEDURE Esacia(a: APLICACIN): BLEAN; PRCEDURE Enlazado(a: APLICACIN; d: DMINI): BLEAN; PRCEDURE Extension(a: APLICACIN): CARDINAL; (* Pre: Enlazado(a,d) *) PRCEDURE RangoDe(a: APLICACIN; d: DMINI): RANG; (* Pre: NT Enlazado(a,d) *) PRCEDURE Enlazar(AR a: APLICACIN; d: DMINI; r: RANG); (* Pre: Enlazado(a,d) *) PRCEDURE Desenlazar(AR a: APLICACIN; d: DMINI); PRCEDURE Copiar(AR a1: APLICACIN; a2: APLICACIN); TIP_PERACIN=PRCEDURE(DMINI, RANG); PRCEDURE Aplicar(a: APLICACIN; op: TIP_PERACIN); TIP_ERRR = <<a definir>>; END Aplicacion. PRCEDURE Error(): TIP_ERRR; El TAD Aplicación. Una APLICACIN (o función) es una correspondencia entre dos conjuntos, DMINI y RANG, tal que los elementos de DMINI tienen a lo más una imagen en RANG. tra forma de definir una APLICACIN es como un conjunto de pares ordenados (d,r), tal que d es un elemento de DMINI, r es un elemento de RANG, y no existen dos pares que coincidan en la primera componente. Puesto que el TAD APLICACIN no es más que un conjunto, parece razonable representar sus valores mediante una secuencia de nodos enlazados mediante punteros (implementación no acotada) o bien como un array de nodos (implementación acotada). Tal fue la decisión que tomamos al representar los TADs CNJUNT y BLSA. Este tipo Laboratorio de Programación III. 2.000/2.001 29

de representación secuencial es adecuada cuando se implementan TADs lineales (pilas, colas, listas), pues la abstracción no es más que una secuencia de elementos a la que se accede de acuerdo con cierta disciplina. Sin embargo, en TADs no lineales (conjuntos, bolsas, aplicaciones,...) esta representación puede no resultar ventajosa. Ciertas operaciones requieren recorrer la secuencia para comprobar si un valor dado se encuentra almacenado en la misma, lo que lleva un tiempo proporcional a la longitud de la secuencia (es decir, (n)). Mejora de la eficiencia mediante dispersión. Una forma de reducir el coste de estas operaciones es aplicar una técnica de dispersión (hashing) para reemplazar la secuencia original por varias secuencias de menor longitud, a las que nos referiremos con el nombre de particiones. La idea consiste en definir una función de dispersión que calcule para cada valor del tipo base de la secuencia ITEM otro valor de un tipo SELECTR: PRCEDURE Dispersion(x: ITEM): SELECTR; El valor Dispersion(x) nos permitirá seleccionar la secuencia (i.e. partición) adecuada para almacenar el elemento x. Gráficamente, la dispersión consiste en sustituir la secuencia única: por el conjunto de secuencias: ITEM Dispersion SELECTR Para que la dispersión mejore la eficiencia, deben satisfacerse las siguientes condiciones: la función Dispersion debe ser simple de calcular y, a ser posible, debe distribuir uniformemente los valores del tipo ITEM sobre los valores del tipo SELECTR. un valor del tipo SELECTR debe permitirnos seleccionar la partición adecuada en tiempo constante (1). Típicamente, el tipo SELECTR será el índice de un array, aunque nada impide que se trate de un puntero, o un número de bloque en un dispositivo de almacenamiento secundario. Aplicando dispersión, el coste de acceso a un elemento pasa de ser (n) a ser (Dispersion) + (1) + (n/s), donde s es el número de valores posibles del tipo SELECTR; es decir, el número de particiones en que queda distribuida la secuencia original. Laboratorio de Programación III. 2.000/2.001 30

Cabe destacar que este esquema puede aplicarse para dispersar cualquier estructura de datos. Podríamos, por ejemplo, aplicar dispersión para sustituir un árbol por un conjunto de árboles. Colisiones, Dispersión Abierta y Dispersión Cerrada. Se dice que se produce una colisión entre los valores x1 y x2 cuando Dispersion(x1) = Dispersion(x2) es decir, cuando x1 y x2 deben almacenarse en la misma partición de la estructura dispersa. La función de dispersión debe diseñarse de manera que se minimice el número de colisiones. Se dice que se tiene una dispersión abierta cuando las particiones de la estructura dispersa son estructuras no acotadas. En tal caso, las colisiones se resuelven añadiendo un nuevo nodo a la partición seleccionada por la función Dispersion. Se dice que se tiene una dispersión cerrada cuando las particiones de la estructura dispersa son estructuras acotadas. Si el tamaño de cada partición es N, resulta claro que pueden resolverse sin problemas las primeras N colisiones. Si se produjeran más de N colisiones, éstas pueden resolverse empleando: un área de desbordamiento común el espacio disponible en otras particiones de acuerdo con alguna política de asignación concreta otra función de dispersión En esta práctica implementaremos el TAD APLICACIN mediante dispersión cerrada mínima (es decir, el tamaño de las particiones es N=1), y empleando el espacio disponible de otras particiones cuando se produzcan colisiones, siguiendo para ello una estrategia de asignación lineal. Los detalles de implementación se exponen en el siguiente párrafo. Dispersión cerrada mínima con resolución lineal de colisiones. La implementación más simple (e incorrecta) de una dispersión cerrada mínima emplea un array de tipo ITEM indizado por el tipo SELECTR: TABLA_DISPERSIN = ARRAY SELECTR F ITEM; Un dato x de tipo ITEM se almacenará en la casilla [Dispersion(x)]. Esta representación es incorrecta, pues no tenemos manera de averiguar si una determinada casilla del array está o no en uso. Esto puede solucionarse si en cada casilla del array almacenamos un registro con dos campos: el contenido de tipo ITEM y un valor de tipo ESTAD que nos indique el estado en que se encuentra tal casilla (CUPADA, ACIA). Así obtenemos las declaraciones: ESTAD = (CUPADA, ACIA); ND= RECRD Cont: ITEM; Estado: ESTAD; TABLA_DISPERSIN = ARRAY SELECTR F ND; Laboratorio de Programación III. 2.000/2.001 31

Se produce una colisión cuando la función de dispersión nos devuelve el índice de una casilla que está CUPADA. Esto se resuelve intentando almacenar el elemento en la siguiente posición ACIA del array, recorriendo éste circularmente. A esta estrategia se la denomina resolución lineal de colisiones. La representación anterior no es suficiente aún para implementar adecuadamente la dispersión, pues es necesario distinguir entre celdas vacías (aquéllas que nunca han sido empleadas) y suprimidas (aquéllas que fueron empleadas pero cuyo contenido ha sido eliminado). Para comprender esta necesidad, considérese el siguiente ejemplo: (1) Se inserta un elemento X en la posición que indique la función de dispersión, por ejemplo la 4 (2) se inserta otro elemento Y cuya posición por la función de dispersión también es la 4. Como esta celda está CUPADA, se produce una colisión que se resuelve linealmente, colocándose Y en la primera posición ACIA, en este caso en la 5 (3) posteriormente, se elimina el elemento X, marcando la casilla 4 como SUPRIMIDA, para indicar que quizá hay elementos que deberían ocupar esta posición pero al producirse colisión se han colocado en otra posición 1 2 3 4 5 6 X 1 2 3 4 5 6 X Y 1 2 3 4 5 6 Y S (1) (2) (3) Si no distinguiéramos entre celdas ACIAS y celdas SUPRIMIDAS, habríamos marcado la posición 4 como ACIA. En tal caso, en una posible búsqueda de Y al inspeccionar la posición 4 no se produciría ni una colisión ni se encontraría la Y. Sin embargo, no se puede asegurar que el elemento Y no está en la tabla, lo que nos obligaría a recorrer la tabla completamente. Sin embargo, al distinguir entre los dos estados (ACIA y SUPRIMIDA), si encontramos una celda marcada como ACIA sabemos que podemos detener la búsqueda, mientras que si encontramos una celda SUPRIMIDA hay que continuar la búsqueda circularmente hasta llegar otra vez a la posición inicial, encontrar una celda ACIA o el elemento buscado. Mejora de la eficiencia mediante cachés. tra forma de mejorar el rendimiento de las estructuras de datos es incorporándoles una caché. La caché de una estructura de datos es similar en espíritu a las cachés disponibles en los sistemas de memoria o en los procesadores actuales: almacena el dato más recientemente accedido de la estructura de datos para tratar de acelerar futuras referencias al mismo. Una caché básica está compuesta por dos campos: El dato cacheado propiamente dicho Un campo BLEAN que indica la validez del dato cacheado Laboratorio de Programación III. 2.000/2.001 32

Cuando se incorpora una caché a una estructura de datos debe tenerse especial cuidado en no alterar la semántica del TAD. En particular, es fundamental estudiar con detalle cómo afecta cada operación a la caché y viceversa. Básicamente, un procedimiento puede actuar como lector de la caché, como escritor, o bien no afectar ni verse afectado por la caché. La tabla siguiente muestra la forma en que interactúa cada procedimiento del TAD APLICACIN con la caché: Procedimiento Papel Psedocódigo de la interacción con la caché Crear() Escritor invalidar(caché) Destruir(a) Esacia(a) Enlazado(a, d) Extension(a) RangoDe(a, d) Enlazar(a, d, r) Desenlazar(a, d) Copiar(a1,a2) Aplicar(a, op) Lector Lector/Escritor Lector/Escritor Escritor Escritor si la caché contiene un dato válido entonces devolver FALSE si no inspeccionar(a) si la caché contiene d entonces devuelve TRUE si no buscar(a, d, r) actualizar(caché) si la caché contiene d entonces devolver r si no buscar(d, r) actualizar(caché) insertar(d, r) actualizar(caché) si la caché contiene d entonces invalidar(caché) eliminar(d, r) Como se desprende de la tabla anterior, no todas las operaciones se ven afectadas por la caché en la misma medida. Hay operaciones cuya eficiencia no se ve en absoluto afectada (Crear, Destruir, Copiar,...); mientras que otras operaciones, especialmente los selectores (Enlazado, RangoDe), pueden mejorar considerablemente su rendimiento. Representación del TAD Aplicación. Todos los TADs genéricos que hemos estudiado hasta el momento importaban un solo tipo: el tipo base del TAD al que denominábamos tipo ITEM. El TAD APLICACIN es un TAD genérico que importa dos tipos: DMINI y RANG. Estos tipos son definidos por el usuario del TAD APLICACIN en los módulos de definición Dominio y Rango, respectivamente, que además deben exportar ciertos procedimientos necesarios para la implementación del TAD APLICACIN. En particular, el módulo Rango debe exportar la función alorpordefecto, pues el procedimiento RangoDe devuelve un valor de tipo RANG. Laboratorio de Programación III. 2.000/2.001 33

El TAD APLICACIN se implementará de forma acotada mediante dispersión cerrada mínima, con resolución de colisiones lineal y caché. La dispersión se aplicará al valor de tipo DMINI del par ordenado. Puesto que vamos a aplicar dispersión sobre el tipo DMINI, nos hará falta definir la función: PRCEDURE Dispersion(d: DMINI): SELECTR; Aquí nos encontramos ante una paradoja. El tipo DMINI sólo es conocido por el usuario del TAD, así que debe ser él quien defina la función Dispersion. Por otro lado, el tipo SELECTR es conocido solamente por el implementador del TAD, así que debería ser él quien definiera la función Dispersion. Para resolver este problema, dejaremos que sea el usuario del TAD que defina la función de Dispersion devolviendo un tipo CARDINAL en lugar de SELECTR, por lo que en el módulo de definición Dominio queda como sigue: DEFINITIN MDULE Dominio; END Dominio. DMINI = << a definir >>; PRCEDURE Dispersion(d: DMINI): CARDINAL; La representación de la APLICACIN, sin embargo, se basa en el tipo SELECTR: CNSTMAX_SELECTR = <<a definir>>; SELECTR= [1.. MAX_SELECTR]; ESTAD = (CUPADA, ACIA, SUPRIMIDA); CELDA = RECRD dom: DMINI; rang: RANG; est: ESTAD; TABLA = ARRAY SELECTR F CELDA; CACHE = RECRD dom: DMINI; rang: RANG; valido: BLEAN; APLICACIN = PINTER T ESTRUCTURA; ESTRUCTURA = RECRD mem_tab: TABLA; mem_cache: CACHE; Esto significa que los valores devueltos por la función Dispersion definida en el módulo Dominio deben ser normalizados en la implementación del TAD APLICACIN, aplicando la siguiente conversión: 1 + (Dispersion(d) MD MAX_SELECTR) Laboratorio de Programación III. 2.000/2.001 34

Para facilitar la implementación, resulta conveniente definir un procedimiento interno que permita localizar un enlace en la tabla a partir del valor del dominio d: PRCEDURE Buscar(t: TABLA; d: DMINI): CARDINAL; Si d está enlazado, devuelve su posición en la tabla. Si d no está enlazado y la tabla no está llena, devuelve el índice de la primera celda disponible en la tabla, y si d no está en la tabla y la tabla está llena, devuelve 0. Para efectuar esta búsqueda, se debe comenzar en la posición de la tabla devuelta por Dispersion(d) y continuar circularmente. Finalmente, construir un programa de prueba para este TAD. Práctica Suplementaria Construir el TAD APLICACIN con una implementación acotada, mediante dispersión cerrada con N= k (para k>1), resolución lineal de colisiones y con caché. Laboratorio de Programación III. 2.000/2.001 35