Ejemplo de Diseño. Algoritmos y Estructuras de Datos II. Departamento de Computación FCEyN UBA



Documentos relacionados
Ejemplo de Diseño. Algoritmos y Estructuras de Datos II. Diego Gaustein Gervasio Pérez. Departamento de Computación FCEyN UBA. 3 de Octubre de 2012

Elección de estructuras

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

1. Ejemplo de clase : La clase Cuenta 2. Uso de la clase Cuenta. 3. Métodos y objetos receptores de mensajes (Importante)

Ejemplos de conversión de reales a enteros

Instituto de Computación - Facultad de Ingeniería - Universidad de la República

Euclides extendido y Test de primalidad probabiĺıstico

Programación I: Funciones y módulos

Ampliación de Estructuras de Datos

Grupo Execom CONTENIDO. Soluciones verdaderas

Ejercicio 1 (3 puntos).-

CÓMO HACER UN PEDIDO POR INTERNET EN YOURAVON.COM

Modelos de Software. Ingeniería en Sistemas de Información 2015

Gestión de Subtotales en Documentos de Venta WhitePaper Febrero de 2007

Programación Avanzada SOLUCIÓN EXAMEN FEBRERO 2011

axtpv - Manual del usuario axtpv Profesional

Introducción a la Computación TFA

ARBOLES ARBOLES BINARIOS ORDENADOS. REPRESENTACIÓN Y OPERACIONES

C r e a c i ó n d e R e s p a l d o s e n B l u e F o r m s. P á g i n a 1. La propiedad intelectual de este documento es de BlueMessaging.

Procedimiento Intercompañia

Manual Administrador. Descripción Portal de Administración Servicio Correo Electrónico

Y por último, si se desea que despliegue un mensaje de confirmar al pagar, cada vez que se presione el botón Aceptar cuando se quiera pagar.

Modulo 1 El lenguaje Java

Programación Orientada a Objetos en JAVA

» Manual de ayuda. Contenido

Algoritmos y Estructuras de Datos II

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

COMO COMPRAR EN NUESTRA TIENDA?

MANUAL PUERTA GSM- GPRS BAENASEGURIDAD.COM. 01/02/

Prof. Dr. Paul Bustamante

CURSO INSTALACION E IMPLEMENTACION ALOJA SOFTWARE HOTEL MODULO 02: Datos Adicionales de configuración [1]

Para crear una nueva comparación presionar el botón Agregar y completar los datos solicitados en el formulario.

AG ELECTRÓNICA S.A. DE C.V.

Para poder navegar en Internet debes primeramente elegir el navegador que vas a utilizar, que puede ser:

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

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

CLASE # 5 TÉCNICAS DE CAJA BLANCA

Una breve introducción a Excel c

COLAS. GRUPO # 22 Alumnos: Aguilar Elba Barrios Miguel Camacho Yaquelin Ponce Rodríguez Jhonny

Configuración Y Diseño Del Correo Electrónico Y Web Personal De IESA

Contabilidad General

4. CONTENIDO Cómo Añadir Contactos a tu Webmail

ESPOCH ESCUELA DE MEDICINA HERNANDEZ MAYRA FORMULAS Y DUNCIONES BASICAS ESPOCH

Exportación de cuentas contables del programa Aspel Coi

Es una persona que ayudará a que los derechos de las personas con discapacidad se hagan realidad

Cómo usar Subversion. con Windows XP/2000/2003.

Guía Rápida de Uso del Punto de Venta de SGTaller

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

1 Agencia de viajes: enunciado

Comerciales. Comisiones en Documentos de Venta WhitePaper Enero de 2008

Manual de Usuario para Sistema SOFAAR MODULO DE CONTABILIDAD

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación

COMO COMPRAR EN NUESTRA TIENDA H2OTEK?

Sistemas Distribuidos Junio 2008

Pasos básicos para el uso del programa punto de ventas plus

Ejercicio Guiado de Análisis y Diseño Orientado a Objetos. Ejemplo: CAJERO AUTOMÁTICO

LAS FACTURAS ELECTRÓNICAS.COM

Sistema. de Administración y Ventas. Serviteca -Taller Automotriz- Garage. Sistemas Automatizados. Sys-Automotriz

Conclusiones. Particionado Consciente de los Datos

En nuestro caso para cargar los nuevos artículos pulsaremos sobre el botón nuevo y se abrirá el formulario de alta y modificación de datos.

TEMA 10: Operaciones financieras. El interés

Técnicas Avanzadas de Testing Automatizado

Introducción a la Firma Electrónica en MIDAS

Profr. Efraín Soto Apolinar. La función lineal. y = a 0 + a 1 x. y = m x + b

Tráfico Con Adwords. ConseguirTrafico.com

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

Profesorado de Informática Ciencias de la Computación INET- DFPD Matemática I - Matemática Discreta usando el computador Ing. Prof.

Manual del usuario TakePOS

Creación paso a paso de Formularios con Google (Parte I) (AKA: no corrijo nunca más!)

Lunes a Viernes de 9 a 18 Hs. (011)

Manual PARA EL ADMINISTRADOR DE LA WEB DE PRÁCTICAS PRE PROFESIONALES Y PASANTÍAS

MANUAL CCLEANER. Descarga e Instalación

Programación Genética

Visor de presupuestos en Android

Práctica 7. TAD aplicación

CURSO INSTALACION E IMPLEMENTACION ALOJA SOFTWARE HOTEL MODULO 08- Cobranzas- front Desk [1]

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

Manual de Procedimientos Punto de Venta -SmartBIT POS-

Servicios Educativos Del Estado De Chihuahua Sistema Integral de Presupuestos y Materiales. Indice. Introducción Barra de Herramientas...

ETS Caminos Santander. Curso Ejercicios de introducción a la programación.

Aritmética finita y análisis de error

Índice HERRAMIENTA DE COMPRAS Instalación de la aplicación: Uso de la Aplicación Visor de Transacciones: Ingreso al Sistema...

GUÍA PARA LA FORMULACIÓN PROYECTOS

Universidad de Buenos Aires Facultad De Ingeniería. Operaciones Lógicas. [75.40] Algoritmos y Programación I. 2do Cuatrimestre 2010

Normalización. El diseño que hemos recibido está compuesto de estas dos relaciones:

Manual del visor GeoEuskadi 2013 MANUAL DEL VISOR GEOEUSKADI

Para qué XP_CRYPT y SQL Shield?

Plataforma e-ducativa Aragonesa. Manual de Administración. Bitácora

Caja $ = Capital propio $ Préstamo a largo plazo $

SIIGO WINDOWS. Parámetros Modulo de Seriales. Cartilla

Capitulo 6. Como echarle el muerto a alguien.

Antes de construir tu base de datos es conveniente saber que tipos de datos vas a almacenar y como distribuirlos.

Contabilidad Tabla de Pagos / Cobros.

PROGRAMA PARA LA RECEPCIÓN VALIDACIÓN Y RESGUARDO DE DOCUMENTOS FISCALES VERSIÓN 1.00 MANUAL DE OPERACIÓN

SISTEMA DE APARTADO DE SALAS PARA EVENTOS

LECCIÓN 4ª Operaciones Numéricas

Modelos Telium ICT220 EFT930S EFT930G IWL220

Árboles AVL. Laboratorio de Programación II

Manual de Usuario Software Restaurante

Manual del Usuario Módulo: Recaudación

Transcripción:

Ejemplo de Diseño Algoritmos y Estructuras de Datos II Departamento de Computación FCEyN UBA

Qué significa elegir estructuras de datos? En la etapa de especificación nos ocupamos de describir 'qué' queremos lograr. En la etapa de diseño nos ocupamos del 'cómo' Lo explicamos con módulos de abstracción Lo hicimos bajo el paradigma imperativo Los módulos de abstracción tienen Interfaz pública Estructura de representación algoritmos

Sistema de acceso al subte por tarjetas prepagas multiviajes En las boleterías, se venden tarjetas de 1, 2, 5, 10 y 30 viajes. En la entrada a los andenes, hay molinetes con lectores de tarjetas. Cuando el usuario pasa su tarjeta por el lector: Si la tarjeta está agotada o es inválida, se informa de esto en el visor y no se abre el molinete. Si hay viajes en la tarjeta: Se abre el molinete Se muestra el saldo en el visor Se actualiza en el sistema el nuevo saldo para esa tarjeta Se registra en el sistema el día y la hora del acceso. Se pide tiempo de acceso sublineal en la cantidad total de tarjetas (en caso promedio) para la operación usartarjeta.

Especificación TAD Subite observadores básicos tarjetas : Subite conj(tarjeta) credito : Subite s Tarjeta t nat { t tarjetas(s) } viajes : Subite s Tarjeta t secu(fechahora) { t tarjetas(s) } generadores Crear : Subite IncorporarTarjeta : Subite s tarjeta t nat c Subite { t tarjetas(s) c } UsarTarjeta : Subite s tarjeta t Subite { t tarjetas(s) credito(s, t) > 0 } Fin TAD

Con qué empezamos? Interfaz SUBITE Se explica con: Subite Géneros: Subite Operaciones: Crear() res: Subite Pre: Post: Complejidad: Descripción: Aliasing: NuevaTarjeta(inout s: Subite, in credito: Nat) res: Tarjeta... UsarTarjeta(inout s: Subite, in i: Tarjeta, out credito: Nat) res: Bool... VerViajes(in s: Subite, in i: Tarjeta, out viajes: Secu(FechaHora)) res: Bool...

Pre y postcondiciones Crear() res: Subite { true } { res = Crear } NuevaTarjeta(inout s:subite, in credito: Nat) res: Tarjeta { s = s 0 credito {1,2,5,10,30} } { res Tarjetas(s 0 ) s = IncorporarTarjeta(s 0,res,credito) } UsarTarjeta(inout s: Subite, in i: Tarjeta, out credito: Nat) res: Bool { s = s 0 } { (res (i Tarjetas(s 0 ) Credito(s 0,i) > 0)) (s = if res then UsarTarjeta(s 0,i) else s 0 fi) (res (credito = Credito(UsarTarjeta(s 0,i))) } VerViajes(in s: Subite, in i: Tarjeta, out viajes: Secu(FechaHora)) res: Bool { true } { (res i Tarjetas(s)) (res viajes = Viajes(s,i)) }

Observaciones sobre servicios exportados Observación que vale de ahora en más para toda la clase: n es la cantidad total de tarjetas Función Orden Crear? NuevaTarjeta? UsarTarjeta < O(n) VerViajes?

Estructura de representación Primero descomponemos el problema, usando estructuras de alto nivel y buscando contener toda la info necesaria Subite se representa con Dicc(Tarjeta, DatosTarjeta) Tarjeta es Nat DatosTarjeta es tupla < credito: Nat viajes: Secuencia(FechaHora) >

Estructura de representación Ahora tenemos que pensar estructuras para representar cada componente, teniendo en cuenta la complejidad. Qué hace usartarjeta? Busca la tarjeta Le descuenta el saldo Le agrega un viaje Cuánto cuesta cada cosa? Cómo hacemos esto en tiempo sublineal?

Algoritmos Escribimos el algoritmo para estar seguros iusartarjeta(inout e: estr, in i: Tarjeta, out credito: Nat) resultado: Bool Si definido?(e,i) O(definido? de dicc). devolver false Si no datos obtener(e,i) O(obtener de dicc). Necesitamos que sea con aliasing si datos.credito = 0 devolver false si no agregar_atrás(datos.viajes,fechahora_actual) O(agregar de secu) datos.credito datos.credito 1 O(1) credito datos.credito O(1) devolver true

Algoritmos Escribimos el algoritmo para estar seguros iusartarjeta(inout e: estr, in i: Tarjeta, out credito: Nat) resultado: Bool Si definido?(e,i) O(definido? de dicc). devolver false Si no datos obtener(e,i) O(obtener de dicc). Necesitamos que sea con aliasing si datos.credito = 0 devolver false si no agregar_atrás(datos.viajes,fechahora_actual) O(agregar de secu) datos.credito datos.credito 1 O(1) credito datos.credito O(1) devolver true

Servicios usados Necesitamos un diccionario sublineal en definido? y obtener. Qué pasa con la secuencia? Función Obtener Definido? Orden <O(n) <O(n) Definir?

Estructura de representación Qué estructuras conocen con acceso sublineal?

Estructura de representación Qué estructuras conocen con acceso sublineal? AVL / ABB Tabla de Hash Cuál usamos?

Estructuras sublineales (en caso promedio) Función AVL ABB Hash Buscar O(log n) O(log n)* O(1) ** Borrar O(log n) O(log n)* O(1) ** Agregar O(log n) O(log n)* O(1) *** * Sólo si ** Sólo si *** Sólo si Se agregan con distribución uniforme La función de hash es buena (genera pocas colisiones - uniforme) El tamaño de la tabla es proporcional a la cantidad de elementos

Estructuras auxiliares Dicc(Tarjeta,DatosTarjeta) se representa con AB(Nodo) Nodo es <Tarjeta,DatosTarjeta> Observación: Nodo se iguala y compara por el primer campo. Secu(FechaHora) se representa con ListaEnlazada(FechaHora)

Volvemos a los algoritmos Escribiendo la complejidad correcta iusartarjeta(inout e: estr, in i: Tarjeta, out credito: Nat) resultado: Bool Si definido?(e,i) O(log n) devolver false Si no datos obtener(e,i) O(log n) si datos.credito = 0 devolver false si no agregar_atrás(datos.viajes,fechahora_actual) O(1) (max: 20) datos.credito datos.credito 1 O(1) credito datos.credito O(1) devolver true

Servicios exportados Función Orden Crear? NuevaTarjeta? UsarTarjeta O(log n) VerViajes?

Preguntas?