Profesor | José David Flores Peñaloza | lu mi vi | 12 a 13 | T1 |
Ayudante | Kyle Elbjorn Flores | ma ju | 12 a 13 | T1 |
En este curso aprenderemos a analizar pero sobre todo a diseñar algoritmos. El enfoque particular del curso se centra en dos aspectos:
nos enfocaremos en los paradigmas de diseño, en lugar de la alternativa usual que suele ser agrupar los algoritmos por objeto de aplicación (gráficas, cadenas, números, p. ej.). En particular ilustraremos los paradigmas resolviendo problemas sobre objetos discretos.
Haremos énfasis en el papel de la recursión como técnica fundamental de diseño.
Introducción
Qué es el análisis y qué es el diseño de algoritmos.
Primeros problema de ejemplo: recurrencias lineales; máximo común divisor
Propiedad de corrección
Recursión e inducción
Algoritmos secuenciales e invariantes
Propiedad de complejidad
Árboles de recursión
Acumulación de iteraciones
Notación asintótica
Divide y vencerás: reduce un problema grande a problemas más chicos
Definición intuitiva
Caso de estudio 1. MergeSort
Caso de estudio 2. QuickSort
Caso de estudio 3. Pareja de puntos más cercana
Caso de estudio 4. Dominación vectorial
Caso de estudio 5. Transformada rápida de Fourier
FFT y convolución: aplicaciones.
Paralelismo inherente en algoritmos divide y vencerás
Algoritmos greedy: argumento de intercambio
Definición intuitiva
Caso de estudio 1. Calendarización de intervalos.
Caso de estudio 2. Rutas más cortas en gráficas.
Caso de estudio 3. Árboles generadores de peso mínimo.
Caso de estudio 4. Ordenación de enteros en tiempo lineal.
Notas sobre problemas de optimización en gráficas perfectas.
Matroides y algoritmos greedy*.
Programación dinámica: recursión optimizada
Árboles de recursión con tareas repetidas.
Memorización como primera optimización.
Programación dinámica como segunda optimización.
Caso de estudio 1. Multiplicación de cadenas de matrices.
Caso de estudio 2. Rutas más cortas en gráficas con pesos negativos.
Caso de estudio 3. Distancia de edición, alineación de secuencias, y problemas similares.
Caso de estudio 4. Subsucesión común más larga.
Paralelismo inherente en la programación dinámica.
Flujo en redes: flujo máximo = corte mínimo
Definición
Lema de flujo máximo/corte mínimo
Algoritmo de Ford/Fulkenson.
Caso de estudio 1. Emparejamiento bipartito.
Caso de estudio 2. Conectividad de gráficas y trayectorias disjuntas.
Caso de estudio 3. Segmentación de imágenes.
Caso de estudio 4. Selección de proyectos.
Más allá de algoritmos secuenciales (opcional).
NP-Dureza y reducciones
Heurísticas de aproximación
Algoritmos paralelos
Algoritmos probabilistas.
El libro principal será
Algorithm Design. John Kleinberg y Eva Tardos.
También utilizarémos los libros de algoritmos de Skienna y de Cormen et. al.
El profesor David Flores se puede contactar en la oficina 118 del Departamento de Matemáticas de la Facultad de Ciencias, previa cita.