Title: Estructuras de datos y Algoritmos usando Programacin Orientada a Objetos
1Estructuras de datos y Algoritmos usando
Programación Orientada a Objetos
Dpto. Matemática Aplicada y Ciencias de la
Computación
2Temas generales del Curso
- Algoritmos
- Estructuras de datos
- Uso de programación orientada a objetos (Java,
C)
3Temas 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
4Temas 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
5Aplicaciones
- Simulación
- Optimización
- Inteligencia artificial
- Geometría computacional
- Técnicas para Internet
- etc.
6Bibliografí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
7Bibliografí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
/
8Bibliografí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.
9Bibliografí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.
11Introducció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
12Introducció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)
13Definició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.
14Definició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.
15Definició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.
16Definició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.
17Aná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.
18Aná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.
19Heurí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.
20Heurí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.
21Principios 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
22Estructuras 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.
23Objetivos 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.
24Objetivos 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.
25Principios 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.
26Principios 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.
27Té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.
28Té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.