Estructuras de datos y Algoritmos usando Programacin Orientada a Objetos - PowerPoint PPT Presentation

1 / 28
About This Presentation
Title:

Estructuras de datos y Algoritmos usando Programacin Orientada a Objetos

Description:

Ramificaci n y acotaci n (branch and bound) Precondicionamiento y reconocimiento de patrones ... http://www.nist.gov/dads/ K. Rosen. ... – PowerPoint PPT presentation

Number of Views:300
Avg rating:3.0/5.0
Slides: 29
Provided by: pedroco7
Category:

less

Transcript and Presenter's Notes

Title: Estructuras de datos y Algoritmos usando Programacin Orientada a Objetos


1
Estructuras de datos y Algoritmos usando
Programación Orientada a Objetos
Dpto. Matemática Aplicada y Ciencias de la
Computación
  • Pedro Corcuera

2
Temas generales del Curso
  • Algoritmos
  • Estructuras de datos
  • Uso de programación orientada a objetos (Java,
    C)

3
Temas específicos de Algoritmos
  • Introducción a la algoritmia
  • Análisis de algoritmos
  • Algoritmos de ordenación y búsqueda
  • Algoritmos voraces
  • Divide y vencerás
  • Programación dinámica
  • Búsqueda con retroceso (backtracking)
  • Ramificación y acotación (branch and bound)
  • Precondicionamiento y reconocimiento de patrones
  • Algoritmos probabilistas
  • Algoritmos genéticos

4
Temas específicos de Estructuras de Datos
  • Tipos de datos abstractos
  • Estructuras de datos básicas
  • Arrays y matrices
  • Pilas
  • Listas
  • Colas
  • Diccionarios
  • Árboles
  • Colas de prioridad
  • Arboles AVL y Rojinegros
  • Grafos

5
Aplicaciones
  • Simulación
  • Optimización
  • Inteligencia artificial
  • Geometría computacional
  • Técnicas para Internet
  • etc.

6
Bibliografía
  • A. Aho, J. Hopcroft y J. Ullman. Data Structures
    and Algorithms. Addison-Wesley, 1983.
  • T. Cormen, C. Leiserson y R. Rivest. Introduction
    to Algorithms. 2ª ed. MIT Press, 2000.
  • G. Brassard y P. Bratley. Fundamentos de
    Algoritmia. Prentice-Hall , 1997.
  • M. Goodrich y R. Tamassia. Data Structures and
    Algorithms in Java, John Wiley Sons, 1998.
    http//www.wiley.com/college/goodrich

7
Bibliografía
  • M. Goodrich y R. Tamassia. Algorithm Design, John
    Wiley Sons, 2002. http//www.wiley.com/college/g
    oodrich
  • S. Sahni. Data Structures, Algorithms, and
    Applications in Java, Mc-Graw Hill, 2000.
    http//www.mhhe.com/engcs/compsci/sahnijava/
  • S. Skiena. The Algorithm Design Manual.
    Springer-Verlag, 1997. The Algorithm Design
    Manual http//www.cs.sunysb.edu/algorith
  • M. Weiss. Estructuras de datos en Java,
    Addison-Wesley, 2000. http//www.cs.fiu.edu/weiss
    /

8
Bibliografía
  • R. Sedgewick, P. Flajolet. An Introduction to the
    Analysis of Algorithms, Addison Wesley, 1996.
  • Dictionary of Algorithms, Data Structures, and
    Problems
  • http//www.nist.gov/dads/
  • K. Rosen. Handbook of Discrete and Combinatorial
    Mathematics, CRC Press, 2000.
  • M. Atallah. Algorithms and Theory of Computation
    Handbook, CRC Press, 1999.

9
Bibliografía y referencias
  • LEDA (Library of Efficient Data types and
    Algorithms), AGD, CGAL
  • http//www.algorithmic-solutions.com/as_html/rese
    arch/research.html
  • JGL http//www.recursionsw.com/products/voyager/
  • Java Collections Sun
  • http//java.sun.com/docs/books/tutorial/collectio
    ns/

10

ALGORITMIA
  • Introducción
  • Definición y propiedades.
  • Análisis y diseño de algoritmos.
  • Heurísticas para una buena programación.

11
Introducción
  • Computadores cada vez más rápidos y a más bajo
    precio
  • Se resuelven problemas de cálculo antes
    impensables.
  • Inconscientemente se tiende a restar importancia
    al concepto de eficiencia.
  • Existen problemas que seguirán siendo intratables
    si se aplican ciertos algoritmos por mucho que se
    aceleren los computadores
  • importancia de nuevas soluciones eficientes

12
Introducción
  • Ejemplo
  • En Agosto de 1977, Scientific American proponía
    a sus lectores el reto consistente en descifrar
    un mensaje secreto, para así ganar cien dólares.
    Parecía algo seguro se estimaba en aquel momento
    que el ordenador más rápido existente, empleando
    el algoritmo más eficiente de los conocidos, no
    podría ganar la apuesta salvo funcionando sin
    interrupción durante un tiempo equivalente a
    millones de veces la edad del Universo. Sin
    embargo, ocho meses de cálculo que comenzaron
    dieciséis años después bastaron para la tarea.
    Qué había pasado?
  • G. Brassard y P. Bratley
  • Fundamentos de Algoritmia (Prólogo)

13
Definición y propiedades
  • Algoritmo Conjunto de reglas para resolver un
    problema.
  • Propiedades
  • Definibilidad El conjunto debe estar bien
    definido, sin dejar dudas en su interpretación.
  • Finitud Debe tener un número finito de pasos que
    se ejecuten en un tiempo finito.

14
Definición y propiedades
  • Algoritmos deterministas Para los mismos datos
    de entrada se producen los mismos datos de
    salida.
  • Algoritmos no deterministas Para los mismos
    datos de entrada pueden producirse diferentes de
    salida.
  • ALGORITMIA tratamiento sistemático de técnicas
    fundamentales para el diseño y análisis de
    algoritmos eficientes.
  • Objetivo Dado un problema concreto encontrar la
    mejor forma de resolverlo.

15
Definición y propiedades
  • Proceso clásico de desarrollo de programas
    (cascada).
  • Especificación de requisitos del problema.
  • Análisis del problema.
  • Diseño de la solución.
  • Implementación del diseño.
  • Pruebas.
  • Refinamiento por pasos sucesivos.
  • Escribir la estructura de la solución en
    pseudocódigo, de manera muy genérica.
  • Especificar los pasos de forma cada vez más
    detallada, y precisa.
  • Repetimos el refinamiento hasta llegar a un
    detalle suficiente para una implementación.

16
Definición y propiedades
  • Diseño mediante abstracciones.
  • Identificar los subproblemas.
  • Especificación abstracta de cada uno de ellos.
  • Implementar cada abstracción.
  • Verificación del programa.
  • Proceso de resolución propuesto por Aho.

17
Análisis y diseño de algoritmos
  • Análisis de algoritmos Estudio de los recursos
    (tiempo y memoria) que necesita la ejecución de
    un algoritmo.
  • Normalmente estamos interesados en el estudio del
    tiempo de ejecución.
  • No confundir con análisis de un problema.
  • Diseño de algoritmos Técnicas generales para la
    construcción de algoritmos.
  • Por ejemplo, divide y vencerás dado un problema,
    divídelo, resuelve los subproblemas y luego junta
    las soluciones.

18
Análisis y diseño de algoritmos
  • Análisis de algoritmos. Análisis del tiempo de
    ejecución.
  • Dado un algoritmo, usaremos las siguientes
    notaciones
  • t(..) Tiempo de ejecución del algoritmo.
  • O(..) Orden de complejidad.
  • o(..) O pequeña del tiempo de ejecución.
  • ? (..) Cota inferior de complejidad.
  • ? (..) Orden exacto de complejidad.

19
Heurísticas para una buena programación
  • Planificar el diseño de un programa Mediante
    refinamientos sucesivos, análisis/diseño,
    especificaciones formales...
  • Encapsular Extraer y agrupar funciones
    relacionadas. Todas las operaciones sobre un
    mismo TDA deben agruparse en un mismo paquete.
  • Ocultamiento de la implementación Los aspectos
    de implementación no son visibles fuera del
    paquete. El que usa el paquete sólo debe saber
    qué hace, no cómo lo hace.

20
Heurísticas para una buena programación
  • Reutilizar programas existentes Un nuevo
    programa no debe partir desde cero. Reutilizar
    librerías, implementaciones de TDAs, esquemas de
    programas, patrones de programas,...
  • No resolver casos concretos, sino el problema en
    general Si no se requiere un esfuerzo adicional,
    el algoritmo debe resolver un caso genérico.
  • Repartir bien la funcionalidad Repartir la
    complejidad del problema de forma uniforme, sin
    crear módulos muy largos. Uso de herramientas de
    autodocumentación para mejorar la legibilidad del
    código.

21
Principios de diseño
  • Estructuras de datos y algoritmos
  • Objetivos de diseño de alto nivel
  • Objetivos de implementación
  • Principios de diseño orientado a objeto
  • Técnicas de diseño orientado a objeto

22
Estructuras de datos y algoritmos
  • Estructura de dato forma sistemática de
    organizar y acceder a los datos.
  • Algoritmo procedimiento paso a paso para
    realizar alguna tarea en una cantidad de tiempo
    finito.

23
Objetivos de diseño de alto nivel
  • Correctitud una estructura de datos o algoritmo
    es diseñada, en un alto nivel, para trabajar
    correctamente para todas las posibles entradas
    que se pueden encontrar dentro de un dominio de
    interés.
  • Eficiencia Las soluciones deben ser rápidas y no
    usar mas recursos del ordenador, como la memoria,
    que la necesaria.

24
Objetivos de implementación
  • Robustez un programa produce la respuesta
    correcta para todas las entradas y cuando se
    ejecuta en todas las plataformas hardware.
  • Adaptabilidad los programas deben ser capaces de
    evolucionar en el tiempo en respuesta a
    condiciones cambiantes en el entorno. Añgunos
    cambios son esperados, otros son inesperados.
  • Reusabilidad el mismo código se puede usar en
    diferentes sistemas en varios dominios de
    aplicación.

25
Principios de diseño orientado a objeto
  • Abstracción un sistema complejo se resume en sus
    partes más fundamentales y se describen con un
    lenguaje simple y preciso.
  • Tipo de dato abstracto (TDA) modelo matemático
    de una estructura de dato que especifica el tipo
    de dato almacenado, las operaciones soportadas en
    los mismos y los tipos de parámetros de las
    operaciones.
  • Un TDA especifica qué operaciones realiza, pero
    no cómo. En Java se expresan por una interface.
  • Un TDA se realiza por una estructura de dato
    concreta, que se modela en Java con una class. En
    ella se especifica cómo se realizan las
    operaciones.

26
Principios de diseño orientado a objeto
  • Encapsulación (ocultación de información) los
    diferentes componentes de un programa deben
    implementar una abstracción, sin revelar los
    detalles internos de la implementación.
  • Modularidad se refiere a la estructura
    organizativa, en la que diferentes componentes de
    un programa se dividen en unidades funcionales
    separadas. Normalmente la organización derivada
    corresponde a una jerarquía entre los módulos.

27
Técnicas de diseño orientado a objeto
  • Clases y objetos
  • Los objetos representan instancias de una clase.
    Una clase es una especificación de los campos de
    dato y las operaciones que se pueden ejecutar por
    los objetos.
  • API o interface las clases deben especificar la
    interface que sus objetos presentan a otros
    objetos. Los tipos de los parámetros que se pasan
    en los métodos deben concordar con los tipos
    especificados en la interface.

28
Técnicas de diseño orientado a objeto
  • Herencia y polimorfismo
  • Con la herencia se permite el diseño de clases
    genericas que se pueden especializar en otras
    clases particulares.
  • El polimorfismo se refiere a a la habilidad de un
    objeto de tomar diferentes formas.
Write a Comment
User Comments (0)
About PowerShow.com