Download Diseño y Análisis de Algoritmos

Document related concepts
no text concepts found
Transcript
Diseño y Análisis de Algoritmos. (DAA-2008)
Programa de la asignatura Diseño y Análisis de Algoritmos
Dr. Eric Jeltsch F.
TEL: 4-0-2
Requisitos Informales: Se espera que el alumno tenga sólida base en Programación Orientada a
Objetos, así como el manejo para abordar problemas de análisis y desarrollos matemáticos.
Requisitos Formales: Aprobadas las asignaturas de Programación y Fundamentos de
Informática Teórica.
Descripción de la Asignatura:
Es un curso del Ciclo Superior, teórico- práctico, que entrega las herramientas para reconocer,
evaluar, recomendar y diseñar estructuras de datos apropiadas para enfrentar diversas aplicaciones o
requerimientos. Al mismo tiempo en los Laboratorios, se utiliza el lenguaje Java como lenguaje de
programación y la Programación Orientada a Objeto como paradigma para implementar los
diversos algoritmos, así como proyectos que se deriven de los contenidos.
Objetivos:
Al término del curso el alumno podrá comparar, proponer, reconocer y diseñar algoritmos según
metodologías apropiadas, tales como Dividir para Reinar, Heurística Greedy y Programación
Dinámica. Podrá comparar, construir y evaluar algoritmos, esto último, desde el punto de vista de
complejidad y costo asintótico, así como conocer las restricciones de los mismos. Podrá también
analizar, recomendar y aplicar una diversidad de estructuras abstractas de datos y algoritmos en
diversos ámbitos, de acuerdo a parámetros teóricos y prácticos. Además el alumno en los
Laboratorios seguirá desarrollando habilidades en la programación en Java, realizando aplicaciones
propias en el ámbito de los contenidos.
Metodología:
Para cumplir con los objetivos se utiliza una metodología de tipo Teórico - Práctico. La Teoría se
realiza mediante la presentación de los contenidos, fundamentos y algoritmos con ejemplos típicos
de los temas, utilizando transparencias y link apropiados. Se mantendrá un sitio Web con secciones
de ejercicios, problemas y pruebas de años anteriores. Para la sección de Práctica se entrega un
material de apoyo (Libro Guía Web) que es donde se basan las actividades a realizar durante los
laboratorios. Las actividades se realizan en forma semanal con una duración de 1 bloque (2 horas).
Están programadas en total aprox. 14 sesiones de Laboratorios, frente al PC, además de 3
evaluaciones, y un Proyecto Final, que debe resumir (o contener) los temas abordados en los
Laboratorios y/o Teoría. La disposición y participación de los alumnos en clases y laboratorios es
fundamental. Por tal motivo, Se recomienda que se consideren 12 horas a la semana (extra a las
6 horas correspondientes al TEL), para el estudio y practicas personales de la asignatura.
Suponiendo que un alumno debe realizar en total 40 hrs. a la semana, como actividad
académica.
Exposiciones:
Otra forma de evaluar el desempeño del alumno es la de exponer o presentar una idea. Creo que es
una tarea fundamental el saber redactar y preparar un informe, para luego entregarlo de manera
didáctica y clara, frente a sus pares. De ahí, la exigencia de presentar un Portafolio con todas las
actividades del semestre resueltas y mejoradas.
Evaluaciones:
Teoría (3 Pruebas, con el mismo valor ) = 70%
_____________________________________________________________________________
Escuela de Ingeniería en Computación, Universidad de La Serena.
1
Diseño y Análisis de Algoritmos. (DAA-2008)
Dr. Eric Jeltsch F.
Laboratorios (aprox. 3 evaluaciones + Proyecto Final, con el mismo valor) = 30% .
Observación: Como una forma de retroalimentación y marcar un estándar de lo que se espera de los
alumnos, es que se mantienen las Pautas de Corrección de pruebas anteriores, en la Secretaría de la
Escuela de Ingeniería en Computación.
Fechas de Pruebas y Examen:
Prueba nº1, (Martes) 29 Abril,
Prueba nº2,
“
3 Junio,
Prueba nº3,
“
8 Julio.
Examen 14 Julio.
TEORIA - Contenidos
CAPITULO 1 - Introducción a la asignatura
Contenidos: Se entrega una introducción al curso y como el programa sustenta otras asignaturas del
plan de estudio de la carrera, así mismo se
aborda el estado del arte de la asignatura, sus
prerrequisitos. Enfatizar en la relevancia, pertinencia y oportunidad en el contexto del plan de
estudio de la carrera y de su futuro profesional.
CAPITULO 2 - Introducción al Análisis de Algoritmos
Contenidos: Introducción al Análisis de Algoritmos. Algoritmos, Análisis de Algoritmos, Diseño de
Algoritmos, Notación Asintótica. Cálculos asintóticos. Repasos fundamentales de Matemática en el
contexto de los temas. Repasos fundamentales de Probabilidades y Estadística en el contexto de los
temas. Enfasis en medir la eficiencia de un algoritmo, ya sea Tiempo y Espacio, considerando peor
caso, mejor caso y caso promedio.
CAPITULO 3 - Métodos de Resolución de Recurrencias
Contenidos: Métodos de Resolución de Recurrencias. Método de Sustitución, Iteración, Arboles
Recursivos, Teorema Maestro. Introducción a la metodología Dividir para Reinar. Enfasis en la
aplicación de los métodos.
CAPITULO 4 – Estructuras de datos
Contenidos: Arboles. Torneos, Arboles ABB, Heap, AVL, Arboles 2-3, 2-3-4, Red-Black, Btree,Arboles Splay y otros. Enfasis en transformaciones, rotaciones, buscar, insertar y borrar con sus
costos asociados y aplicaciones.
CAPITULO 5 - Algoritmos de Ordenamiento
Contenidos: Algoritmos de Ordenamiento y su análisis. HeapSort, ShellSort, QuickSort,
StoogeSort y otros. Estabilidad, Ordenamiento en Tiempo Lineal. CountingSort, RadixSort,
BucketSort.
Tentativo: Hasta aquí los contenidos para Prueba nº 1.
CAPITULO 6 - Estructuras de Datos Avanzadas
Contenidos: Estructura de Datos Avanzadas. SkipList, Trie, Arboles Sufijo, Arboles Búsqueda
Digital, Arboles Trie y Patricia, Algoritmos de Selección, Arboles Min –Max, y otros. Enfasis en
transformaciones, rotaciones, buscar, insertar y borrar con sus costos asociados y aplicaciones.
_____________________________________________________________________________
Escuela de Ingeniería en Computación, Universidad de La Serena.
2
Diseño y Análisis de Algoritmos. (DAA-2008)
Dr. Eric Jeltsch F.
CAPITULO 7 - Estructuras de Datos Avanzadas (Heaps)
Contenidos: Heaps. Heaps Binomial, Heaps Fibonacci. Enfasis en transformaciones, rotaciones,
buscar, insertar y borrar con sus costos asociados y aplicaciones.
CAPITULO 8 - Hashing
Contenidos: Hashing. Tablas de Hashing, Resolución de Colisiones, Análisis Asintótico con y sin
Probabilidad. Enfasis en la aplicación a diccionarios.
CAPITULO 9 - Programación Dinámica
Contenidos: Fuerza Bruta. Programación Dinámica. Enfasis en ejemplos y aplicaciones, por
ejemplo: Multiplicación Optima de Matrices, Formas de Parentizar, Memoization, Subsecuencia
Común, Arboles de Búsqueda Binaria Optimales, Triangulación del Polígono y otros.
CAPITULO 10 - Programación Greedy
Contenidos: Programación Greedy. Enfasis en ejemplos y aplicaciones, por ejemplo: Problema de la
Mochila (0-1), Código de Huffman, y otros.
CAPITULO 11 - Programación Dividir para Conquistar
Contenidos: Programación Dividir para Reina. Enfasis en ejemplos y aplicaciones, por ejemplo:
Skyline, Multiplicación Rápida de Integer- Matriz, y otros. Introducción a otros métodos, tales
como Branch and Bound, Backtracking.
Tentativo: Hasta aquí los contenidos para Prueba nº 2.
CAPITULO 12 - Algoritmos de Grafos
Contenidos: Algoritmos de Grafos. Grafos Dirigidos, no-dirigidos, lectura en grafos, por ejemplo:
Búsqueda a lo ancho, Búsqueda en Profundidad, Orden Topológico. Enfasis en Arboles Expandido
Minimal, Algoritmos de Kruskal, Prim y otros.
CAPITULO 13 - Aplicaciones Varias de los Grafos
Contenidos: Camino Minimal, Algoritmos de Dijkstra, Bellman - Ford, Floyd - Warshall, Flujo
Máximo (Ford Fulkenson), y otros.
CAPITULO 14 - String Matching
Contenidos:String Matching. Búsqueda de strings: autómata finito, algoritmos de Knuth-MorrisPratt, Boyer-Moore, Rabin-Karp, Shift-Or, y otros.
CAPITULO 15 - Introducción a la Geometría Computacional
Contenidos:Geometría Computacional. Aplicaciones: Cáscara Convexa, Graham's Scan, y otros.
Aritmética Modular. Criptografía.
CAPITULO 16 - Computabilidad
Contenidos:Problemas NP- Completo, NP- Hard y otras clasificaciones.
CAPITULO 17 - Y que más.....
_____________________________________________________________________________
Escuela de Ingeniería en Computación, Universidad de La Serena.
3
Diseño y Análisis de Algoritmos. (DAA-2008)
Dr. Eric Jeltsch F.
Contenidos:Se entrega una visión de futuro en el contexto de la asignatura y como ella sustenta
otras materias. Enfasis en orientar al alumno en otros temas, tales como Bioinformática,
Computación Gráfica, Estructuras de datos Bidimensionales, etc.
Tentativo: Hasta aquí los contenidos para Prueba nº 3.
Bibliografía: (*) texto guía, es decir 80% del curso está basado en él.












Aho, Hopcroft, Ullman. "The Design and Analysis of Computer Algorithms", AddisonWesley 1974.
Aho, Hopcroft, Ullman. "Data Structures and Algorithms", Addison-Wesley 1983.
Gonnet, Baeza-Yates "Handbook of Algorithms and Data Structures", Addison_Wesley,
1991.
Shimon Even, "Graph Algorithms", Computer Science Press, Inc.1979.
Horowitz, Sanhi, "Fundamentals of Data Structures", Computer Science Press, Inc.1982.
Robert Kruse, "Estructura de Datos y Diseños de Programas", Prentice Hall, 1988.
(*) Cormen, Leiserson, Rivest, "Introduction to algorithms", McGraw-Hill, 1990 y otros.
Sara Baase, " Computer Algorithms: Introduction to Design and Analysis, 2Ed."
Addison_Wesley, 1988.
Mark Allen Weiss , "Data Structures and Algorithm Analysis (in Java)", Addison_Wesley,
1999.
Standish, "Data Structures, Algorithms, and Software Principles", Addison_Wesley, 1998.
Sedgewick, "Algorithms" , Addison_Wesley, 1996.
Goodrich, Tamassia, "Data Structures and Algorithms in Java", John Wiley & Sons,
Inc.1998.
_____________________________________________________________________________
Escuela de Ingeniería en Computación, Universidad de La Serena.
4
Diseño y Análisis de Algoritmos. (DAA-2008)
Dr. Eric Jeltsch F.
LABORATORIOS - Contenidos
Objetivo: Manejo de alguna plataforma o herramientas de desarrollo, por ejemplo, Netbeans,
Eclipse u otra. Preparar al alumno en el aprendizaje y aplicación de algunas API’s de Java, que en el
transcurso de la carrera le serán de gran utilidad. Iniciarse en la programación enfocada a servidor
usando la plataforma J2EE (Java 2 Enterprise Edition), una de las formas de programar en Java más
ampliamente extendida a nivel empresarial.
Cap. 1 Conocer el manejo de IDE (Integrated Development Environment) apropiado para la
asignatura. Por ejemplo, JBuilder, Eclipse, NetBeans IDE entre otros. Entregar un manual de
Usuario con el uso del IDE correspondiente con la construcción de alguna aplicación.
Cap. 2 Estudio de la API Collection. En este tema se estudia un conjunto de clases e interfaces
de Java que forman el Java Collections Framework (JCF) que constituyen un conjunto de
herramientas que aumentan las capacidades del lenguaje a la hora de trabajar con estructuras de
datos. Construir un sistema de software, con la implementación de las herramientas de Collections.
Cap. 3 Estudio de la API Collection/Generics. Generics agrega estabilidad a su código, al hacer
más fácil, detectar los errores en tiempo de compilación. Atención: Este capitulo cubre JavaTM 2 Platform
Standard Edition version 5.0. Visite la J2SE 5.0 download page. Construir un sistema de software, con la
implementación de las herramientas de Collections/Generics.
Cap. 4 Estudio de la API JDBC. JDBC Database Access. JDBC es una API para trabajar la
conectividad entre las aplicaciones Java y un amplio rango de bases de dato y data sources.
Construir un sistema de software, con la implementación de las herramientas de JDBC.
Cap. 5 Swing. Implementación de alguna GUI, en donde aplique las diversas componentes,
además de lo visto hasta ahora. Construir un sistema de software, en donde se incluyan
componentes Swing y bases de datos construidas ya sea en Access, MySQL, o alguna otra, así
como la aplicación de clases genéricas. La propuesta debería incluir la salida de alguna información
que pueda ser impresa a través de algún modulo de impresión para tal efecto.
Cap. 6 Desarrollar una aplicación en el contexto de alguna API, por ejemplo. Java TV
application programming interface provides an ideal development and deployment platform for the
emerging class of interactive television services. http://java.sun.com/products/javatv/index.jsp
The Java Telephony API (JTAPI) supports telephony call control. It is an extensible API designed
to scale for use in a range of domains, from first-party call control in a consumer device to thirdparty call control in large distributed call centers. http://java.sun.com/products/jtapi/index.jsp
Java Servlet technology provides Web developers with a simple, consistent mechanism for
extending the functionality of a Web server and for accessing existing business systems. A servlet
can almost be thought of as an applet that runs on the server side--without a face. Java servlets
make many Web applications possible. http://java.sun.com/products/servlet/index.jsp
Java™ security technology includes a large set of APIs, tools, and implementations of commonlyused security algorithms, mechanisms, and protocols. The Java security APIs span a wide range of
areas, including cryptography, public key infrastructure, secure communication, authentication,
and access control. Java security technology provides the developer with a comprehensive security
_____________________________________________________________________________
Escuela de Ingeniería en Computación, Universidad de La Serena.
5
Diseño y Análisis de Algoritmos. (DAA-2008)
Dr. Eric Jeltsch F.
framework for writing applications, and also provides the user or administrator with a a set of tools
to securely manage applications. http://java.sun.com/docs/books/tutorial/security/index.html
Bibliografía y enlaces Web de utilidad:

http://java.sun.com/downloads/

Horstmann, Cornell, "Core Java Vol I-Fundamentals", JavaSeries, 1999.

Deitel & Deitel, " How to program Java2", 3 Ed., Prentice Hall, 2000.

Bruce Eckel, "Thinking in Java", 2Ed. 2000. (Fuentes)

Chan, Griffith, Iasi, "1001 Tips para programar con Java", McGrawHill, 1998.

Naughton, Schildt, "Java Manual de Referencia", McGrawHill, 1998.

Mark Allen Weiss , "Data Structures and Algorithm Analysis in Java" Addison_Wesley,
1999.

Goodrich, Tamassia, "Data Structures and Algorithms in Java", Addison_Wesley, 1998.
_____________________________________________________________________________
Escuela de Ingeniería en Computación, Universidad de La Serena.
6