Diseño y Análisis de Algoritmos. (DAA) 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 y el concepto de programación genérica. Se llevan a cabo actividades y proyectos que se derivan de los contenidos. Objetivos: Al término del curso el alumno podrá 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. Objetivos Mínimos de conocimientos: Cómo factor mínimo de saberes, capacidades o aprendizajes asimilados están: El alumnos deberá ser capaz de medir la eficiencia de algoritmos desde el punto de vista teórico. Proponer, recomendar e implementar algoritmos clásicos usando o aplicando alguna metodología básica. Manejar y aplicar los conceptos de la POO y sus interfaces gráficas de usuario. Mostrar habilidades en el manejo de una herramienta o entornos de productividad, ya sea Eclipse, Netbeans, u otra. 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). 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 y Ejercicios: 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, presentar y preparar un informe, para luego entregarlo de manera didáctica y clara, frente a sus pares. Al mismo tiempo, por el material pedagógico y didáctico que se ha ido generando, se entregaran guías de ejercicios y/o problemas para que los _____________________________________________________________________________ Escuela de Ingeniería en Computación, Universidad de La Serena. 1 Diseño y Análisis de Algoritmos. (DAA) Dr. Eric Jeltsch F. alumnos lo resuelvan y lo expongan. De ahí, la exigencia de exponer algunos temas y al final del semestre presentar un Portafolio con todas las actividades del semestre resueltas y mejoradas. En particular, se promoverá la incorporación del editor de texto LATEX en la presentación y resolución de los ejercicios. Evaluaciones: Teoría ( 3 Pruebas, con el mismo valor ) = 60% Laboratorios ( aprox. 3 evaluaciones + Proyecto Final, con el mismo valor) = 40% 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, por fijarse. Prueba nº 1, 23 de Abril ( Martes ) Prueba nº 2, 28 de Mayo “ Prueba nº 3, 25 de Junio “ Examen: por definir. 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 y pertinencia de la asignatura 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, B-tree, 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. Enfasis en saber su funcionamiento y rendimiento según sea el caso con aplicaciones. Tentativo: Hasta aquí los contenidos para Prueba nº 1. _____________________________________________________________________________ Escuela de Ingeniería en Computación, Universidad de La Serena. 2 Diseño y Análisis de Algoritmos. (DAA) Dr. Eric Jeltsch F. 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. 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. Énfasis en la ejecución y aplicación de los algoritmos en algún contexto. CAPITULO 10 - Programación Greedy Contenidos: Programación Greedy. Énfasis en la ejecución y aplicación de los algoritmos en algún contexto. 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. Introducción a otros métodos, tales como Branch and Bound, Backtracking. Enfasis en ejemplos y aplicaciones, por ejemplo: Skyline, Multiplicación Rápida de Integer- Matriz, y otros. 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. Arboles Expandido Minimal, Algoritmos de Kruskal, Prim y otros. Énfasis en la ejecución y aplicación de los algoritmos en algún contexto. CAPITULO 13 - Aplicaciones Varias de los Grafos Contenidos: Camino Minimal, Algoritmos de Dijkstra, Bellman - Ford, Floyd - Warshall, Flujo Máximo (Ford Fulkenson), y otros. Énfasis en la ejecución y aplicación de los algoritmos en algún contexto. 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. Énfasis en la ejecución y aplicación de los algoritmos en algún contexto. 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. Énfasis en la ejecución y aplicación de los algoritmos en algún contexto. _____________________________________________________________________________ Escuela de Ingeniería en Computación, Universidad de La Serena. 3 Diseño y Análisis de Algoritmos. (DAA) Dr. Eric Jeltsch F. CAPITULO 16 - Computabilidad Contenidos: Problemas NP- Completo, NP- Hard y otras clasificaciones. Énfasis en la importancia del tópico en problemas y aplicación de los mismos. CAPITULO 17 - Y que más..... 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. LABORATORIOS - Contenidos Objetivo: Continuar profundizando el manejo de alguna plataforma o herramientas de desarrollo, por ejemplo, Netbeans, Eclipse u otra. (En especial con la que empezó a trabajar en la asignatura de Programación (Orientada a Objetos). 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, por ejemplo Collections, Generics, y otras. Iniciarse en la programación enfocada a servidor usando la plataforma J2EE (Java 2 Enterprise Edition), JME entre otras. Se concluye el curso con alguna aplicación que convoque la mayoría de los conceptos que se entregaron en teoría, en especial los algoritmos y estructuras de datos. El contexto está abierto. 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. _____________________________________________________________________________ Escuela de Ingeniería en Computación, Universidad de La Serena. 4 Diseño y Análisis de Algoritmos. (DAA) Dr. Eric Jeltsch F. Bruce Eckel, "Thinking in Java", 2Ed. 2000. (Fuentes) 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. 5