CC40A: Diseño y Análisis de Algoritmos

Prof: Gonzalo Navarro

Motivación

Analizar la eficiencia de diversos algoritmos para resolver una variedad de problemas, principalmente no numéricos. Enseñar al alumno a diseñar y analizar nuevos algoritmos.

Reglas del Juego

Programa

Introducción (3 horas)

Algoritmos y su complejidad. Cómo se mide la eficiencia de un algoritmo? Tiempo y Espacio. Peor caso, caso promedio. Modelo de un computador y sus medidas de complejidad.

Fundamentos Matemáticos (6 horas)

Notación. Medidas de Orden. Solución de Recurrencias. Funciones Generatrices. Cálculos asintóticos. Manipulación de big-O.

Paradigmas (9 horas)

Técnicas para el diseño de algoritmos: Búsqueda exhaustiva, heurísticas, algoritmos probabilísticos, algoritmos aproximados, avaricia (greedy), dividir para reinar, programación dinámica, inducción. En cada caso, revisión de problemas característicos y de un mismo problema resuelto con cada técnica.

Manipulación de Conjuntos (9 horas)

Breve repaso de técnicas básicas de ordenación (quicksort, mergesort, etc.) y de estructuras de datos para manipulación de conjuntos (árboles binarios, AVL, árboles 2-3, hashing). Algoritmos de selección: Max-Min, k-ésimo. Colas de Prioridad: heaps. Heapsort. Memoria secundaria: árboles B, hashing extendible. Union-find.

Algoritmos Paralelos (4.5 horas)

Modelos de máquinas paralelas: memoria compartida, pasaje de mensajes. El modelo PRAM: EREW, CREW, CRCW. Ejemplos de algoritmos para cada modelo. El modelo BSP para pasaje de mensajes. Ejemplos.

Algoritmos en Grafos (4.5 horas)

Definiciones. Propiedades básicas. Arboles cobertores de costo mínimo. Búsqueda en grafos. Caminos mínimos. Clausura transitiva.

Búsqueda en Texto (4.5 horas)

Búsqueda de strings: autómata finito, algoritmos de Knuth-Morris-Pratt, Boyer-Moore, Rabin-Karp, Shift-Or, BDM. Arboles digitales: tries, Patricia. Arboles de sufijos. Búsqueda aproximada.

Problemas NP-completos (4.5 horas)

Máquinas de Turing no determinísticas. Las clases P y NP. El problema de la satisfactibilidad (SAT). Otros problemas NP-Completos.

Bibliografía

"*" indica los textos más recomendados, "+" los recomendados como referencia pero no para aprender, "-" otros.

  1. [+] A.V. Aho, J.E. Hopcroft y J.D. Ullman, "The Design and Analysis of Computer Algorithms", Addison-Wesley, 1974.
  2. [+] A.V. Aho, J.E. Hopcroft y J.D. Ullman, "Data Structures and Algorithms", Addison-Wesley, 1982.
  3. [-] S. Baase, "Computer Algorithms: Introduction to Design and Analysis", Addison-Wesley 1988.
  4. [-] Brassard, G. and Bratley, P., "Algorithmics: Theory and Practice", Prentice Hall, 1988. 1988.
  5. [*] Cormen, Leiserson, Rivest, "Introduction to Algorithms", MIT Press, 1991.
  6. [+] Gonnet, G. y Baeza-Yates, R., "Handbook of Algorithms and Data Structures", Addison-Wesley, 2ed, 1991.
  7. [-] Harel, D. Algorithmics, the spirit of computing, Addison Wesley 1987.
  8. [+] D.E. Knuth, "The Art of Computer Programing", vol. 1, "Fundamental Algorithms", Addison-Wesley, segunda edición, 1973.
  9. [+] D.E. Knuth, "The Art of Computer Programming", Vol. 3, "Sorting and Searching", Addison-Wesley, 1973.
  10. [*] Manber, U., "Introduction to Algorithms: A Creative approach", Addison Wesley, 1989.
  11. [*] Rawlins, G., "Compared to What? An Introduction to Analysis of Algorithms", Computer Science Press, 1991.
  12. [+] R. Sedgewick y P. Flajolet, "An Introduction to the Analysis of Algorithms", Addison-Wesley, 1996.
  13. [*] R. Sedgewick, "Algorithms", Addison Wesley, 1987.