UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO LICENCIADO EN CIENCIAS DE LA COMPUTACIÓN Programa de la asignatura: Análisis de Algoritmos I Clave: Semestre: Campo de conocimiento: Área de formación: * 5 Ciencias de la Computación Computación teórica Linea terminal: Horas por Horas Total de horas Diploma semana Créditos: Teo T/P Prác 10 3 4 0 7 112 Tipo: Modalidad: Carácter: Teórica Curso Obligatoria Seriación indicativa antecedente: Modelado y Programación, Gráficas y Juegos, Probabilidad I y Álbegra Lineal I. Seriación obligatoria antecedente: Gráficas y Juegos, Álgebra Superior II, Estructuras de Datos, Matemáticas para las Ciencias de la Tierra I. Seriación indicativa subsecuente: Complejidad Computacional, Compiladores, Inteligencia Artificial y Sistemas Operativos. Objetivo General: El alumno conocerá los conceptos de complejidad, justificación, análisis y diseño de algoritmos. Para desarrollar estos temas se revisan algoritmos de búsqueda, ordenamiento y algoritmos que involucran gráficas. Contenido temático Unidad 1 2 3 4 5 Tema Conceptos básicos Justificación y diseño de algoritmos Algoritmos que involucran secuencias y conjuntos Algoritmos para teorı́a de gráficas Temas selectos Total de Semanas Semanas 1.5 3.5 5.0 3.0 3.0 16.0 Desarrollo temático 1. Conceptos básicos En este apartado se presentan la notación para presentar los algoritmos y se definen los conceptos y notación básicos para su representación y análisis. Ası́ mismo se introducen estrategias importantes de diseño, como divide y vencerás. 1.1. Problemas y algoritmos 1.2. Tipos de problemas 1.3. Complejidad 1.4. Modelos de cómputo 1 2. Justificación y diseño de algoritmos En esta sección se presentan los fundamentos matemáticos necesarios para realizar análisis de algoritmos, además de técnicas de diseño como divide y vencerás o programación dinámica. Es importante aclarar que el estudiante debe poder mostrar que un algoritmo resuelve un problema y cuál algoritmo de entre varios es mejor con respecto a una medida. 2.1. Notación asintótica 2.2. Algoritmos iterativos 2.3. Algoritmos recursivos 2.4. Diseño de algoritmos 3. Algoritmos que involucran secuencias y conjuntos En este apartado trabajamos con el concepto de conjunto, pero desde la visión del computólogo, como una entidad que puede ser manipulada por algoritmos, que puede crecer o encogerse, que es dinámico. Abordamos además otros algoritmos y conceptos importantes para secuencias de datos. 3.1. Diccionarios 3.2. Árboles binarios 3.3. Búsquedas 3.4. Ordenamientos 3.5. Cota mı́nima de ordenamiento 4. Algoritmos para gráficas Al igual que en el apartado anterior, en este atacamos otro concepto matemático desde la visión del computólogo, en este caso la gráfica, como una estructura de datos fundamental. Revisamos los algoritmos más significativos sobre gráficas y redes. 4.1. Árboles generadores 4.2. Árboles generadores de peso mı́nimo 4.3. La ruta más corta 4.4. Teorı́a de redes 5. Temas selectos En la última sección del curso presentamos diversos algoritmos de propósito especı́fico, ası́ como áreas de computación relacionadas con el análisis de algoritmos. Dependiendo del tiempo disponible se presentan con distintos niveles de profundidad. 5.1. Algoritmos determinı́sticos y no-determı́sticos 5.2. Algoritmos para apareamiento de cadenas 5.3. Geometrı́a computacional 5.4. Algoritmos de aproximación 5.5. Calendarización 2 Sugerencias didácticas: Exposición oral Exposición audiovisual Ejercicios dentro de clase Ejercicios fuera del aula Seminarios Lecturas obligatorias Trabajo de investigación Prácticas de taller o laboratorio √ ( ) (√) ( ) ( ) ( ) ( ) (√) ( ) Otras: ( ) Mecanismos de evaluación del aprendizaje: √ Exámenes parciales ( ) Examen final escrito (√) Trabajos y tareas fuera del aula (√ ) Prácticas de laboratorio ( ) Exposición de seminarios por los ( ) alumnos √ Participación en clase ( ) Asistencia ( √) Proyectos de programación ( ) Proyecto Final ( ) Otras: ( ) BIBLIOGRAFÍA BÁSICA: 1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein “Introduction to Algorithms”, MIT Press, Third Edition, 2009. 2. Jon Kleinberg y Éva Tardos “Algorithm Design”, Addison Wesley, 2005. BIBLIOGRAFÍA COMPLEMENTARIA: 1. Steven S. Skiena “The Algorithm Design Manual ”, Springer, 2nd Edition, 2008. 2. Sanjoy Dasgupta, Christos Papadimitriou y Umesh Vazirani “Algorithms”, McGraw-Hill, 2006. 3. Henry S. Warren “Hacker’s Delight”, Addison-Wesley Professional, 2002. 4. Ronald L. Graham, Donald E. Knuth y Oren Patashnik “Concrete Mathematics: A Foundation for Computer Science”, Addison-Wesley Professional, 2nd Edition, 1994. 3