Análisis y Diseño de Algoritmos 2020-2
Profesores
- Camilo Rocha (camilo.rocha *at* javerianacali.edu.co)
- Carlos Ramírez (carlosalbertoramirez *at* javerianacali.edu.co)
Horario
- Martes (
Palmas - 3.2Zoom) 09:00 - 11:00 - Jueves (
Palmas - 3.1Zoom) 09:00 - 11:00
Atención a estudiantes
- Lunes 15:00 - 16:00 (Carlos)
- Lunes: 16:00 - 17:00 (Camilo)
- Jueves: 11:00 - 12:00 (Camilo)
- Jueves: 16:00 - 18:00 (Juan David)
Monitor
- Juan David Rengifo (juanrengifo912 *at* javerianacali.edu.co)
Enlaces
Exámenes pasados
- 2016-1: parcial 1, parcial 2, examen final
- 2016-2: parcial 1, parcial 2, examen final
- 2017-1: parcial 1, parcial 2, examen final
- 2017-2: parcial 1, parcial 2, examen final
- 2018-1: parcial 1, parcial 2, examen final
- 2018-2: parcial 1, parcial 2, examen final
- 2019-1: parcial 1, parcial 2, examen final
- 2019-2: parcial 1, parcial 2, examen final
- 2020-1: parcial 1, parcial 2, examen final
Notas de clase
- Nociones básicas
- Dividir, conquistar y combinar
- Notación asintótica
- Programación dinámica (complementar con notas de sesiones)
- Algoritmos voraces (borrador
incompleto)
Proyecto
Design New Capital (UVa 1733) : enunciado original | enunciado extendido | arena | casos de prueba
Entrega 0 (10%)
Esta entrega consta de un documento que describe la naturaleza de la solución del problema. En este documento se debe reflejar qué tanto entiende del problema, cuál es su estrategia de solución y la cantidad de trabajo que ha hecho para el proyecto. En esta entrega no es necesario tener una solución del problema pero sí tener claro cómo se puede resolver.
El documento para esta entrega no tendrá más de 3 páginas y, como mínimo, deberá contener la siguiente información:
- Especificación del problema (entrada y salida)
- Algoritmos y estructuras de datos que usará su solución (cada decisión debe ser justificada)
- Estrategia de solución
- Análisis (alto nivel) de complejidad temporal y espacial de su solución
- De ser necesario, citas bibliográficas del material consultado y que será usado en la solución del proyecto
Recuerde que el proyecto es individual.
Entrega 1 (20%)
Esta entrega consta de un único archivo fuente en el lenguaje de programación Python que debe ser aceptado en la arena como correcto en la arena disponible para el proyecto.
El contenido del archivo debe contar con:
- Un encabezado que declare de forma unívoca la autoría del código: (i) nombre del autor (estudiante quien entrega el proyecto), (ii) su código de estudiante y (iii) la frase de compromiso del código de honor del curso.
- Documentación de cada una de las funciones usando el estándar de Python.
Cualquier archivo entregado sin seguir los lineamientos anteriores será ignorado para efecto de la calificación del proyecto.
Entrega 2 (70%)
Esta entrega consta de dos partes: (i) solución de casos de prueba y (ii) sustentación.
Los casos de prueba están clasificados como fáciles (PR-B), medios (PR-C) y difíciles (PR-D). Para obtener una puntación perfecta en esta entrega es indispensable que una solución resuelva correctamente todos los casos de prueba disponibles en la arena para PR-B, PR-C y PR-D. Para que una solución sea considerada para puntuar es necesario que el archivo cumpla con las condiciones de la Entrega 1. Tenga en cuenta también que los casos de prueba deben ser resueltos por la misma solución, es decir, no es posible usar dos soluciones distintas para los casos de prueba.
Adicionalmente, para esta entrega se evaluarán durante la sustentación los siguientes requisitos no funcionales:
- Diseño y uso clases para abstraer elementos de la solución
- Nombres de variables, funciones/metodos, etc. en inglés
- Elegancia del código
La sustentación de cada proyecto tomará alrededor de 10 minutos y para ello se abirará una lista de turnos. Para la sustentación es importante estar en capacidad de explicar la estrategia de solución, explicar los algoritmos utilizados (de memoria), describir las estructuras de datos utilizadas, y complejidades temporal y espacial de la solución. Una sustentación insatisfactoria del proyecto puede anular cualquier puntación otrogable por resolver satisfactoriamente casos de prueba.
A continuación se discrimina la puntuación para esta entrega:
PR-B: 5 (1 segundos)
PR-C: 10 (2 segundos)
PR-D: 20 (7 segundos)
PR-E: +10 (8 segundos)
PR-E corresponde a casos de prueba muy díficiles (en inglés evil) y su solución correcta en la arena otorga un bono de 10 puntos.
La sustentación es un factor entre 0 y 1 que pondera la puntuación enumerada anteriormente: entre mejor sea la sustentación, mayor será este factor.
Sesiones
- Bienvenida (08/11) [grabación]
- Administrativia
- Introducción
- Dividir, conquistar y combinar (08/13) [grabación]
- Ordenamiento de arreglos con algoritmo cuadrático
- Análisis asintótico (08/18) [grabación]
- Notación O
- Propiedades de O
- El Teorema Maestro (por Carlos Ramírez)
- Dividir, conquistar y combinar (08/20) [grabación]
- Ordenamiento con MergeSort
- Búsqueda binaria
- Programacion dinámica (08/25) [grabación]
- Máxima longitud de una subsecuencia común (en inglés, Longest Common Subsequence - LCS)
- Repaso
- Máxima longitud de una subsecuencia común (en inglés, Longest Common Subsequence - LCS)
- Programación dinámica (08/27) [grabación]
- Conceptos básicos
- principio de optimalidad
- memorización y tabulación
- cálculo de Fibonacci
- metodología
- Repaso de LCS usando la metodología propuesta con reducción de espacio (notas, código)
- Conceptos básicos
- Programación dinámica (09/01) [grabación]
- El Problema del Morral (en inglés, Knapsack)
- diseño del algoritmo
- código (sin y con optimización) (por Carlos Ramírez)
- El Problema del Morral (en inglés, Knapsack)
- Programación dinámica (09/03) [grabación]
- LIS (en inglés, longest increasing subsequence)
- notas de clase (sin anotaciones, con anotaciones)
- código
- UVa 10154-Weights and Measures
- UVa 10690-Expression Again
- LIS (en inglés, longest increasing subsequence)
- Programación dinámica (09/08) [grabación]
- The City of Zion (Tarea 2, conceptual) [estrategia de solución]
- Interleaving (Tarea 2, conceptual) [estrategia de solución]
- UVa 11552 - Fewest Flops [estrategia de solución]
- UVa 12317 - Document Compression [estrategia de solucion]
- Conversatorio con César Muñoz (NASA Langley)
- Algoritmos voraces (09/15) [grabación]
- Introducción
- El problema de agendamiento de actividades [transparencias, tablero, código] (por Carlos Ramírez)
- Algoritmos voraces (09/17) [grabación]
- Algoritmos voraces (09/23) [grabación]
- Cubrimiento mínimo de intervalos [transparencias] (por Carlos Ramírez)
- Árboles de cubrimiento mínimo
- Los algoritmos de Kruskal y Prim [vídeo] (por Carlos Ramírez)
- Algoritmos voraces (09/25) [grabación]
- Repaso de demostraciones voraces
- Cubrimiento mínimo de intervalos [notas de clase]
- Algoritmos voraces (09/29) [grabación]
- Single-source shortest path(s) y el Algoritmo de Dijkstra [transparencias, código] (por Carlos Ramírez)
- El Algoritmo de Dijkstra [vídeo] (por Carlos Ramírez)
- Reintento (10/01) [grabación: parte1, parte2]
- Búsqueda y enumeración exhaustivas: el problema de las 8 reinas
- Reintento (10/06) [grabación]
- Reintento (10/08) [grabación, monitoría]
- Segmentación de texto: diseño y corrección de un algoritmo [notas de clase]
- Receso (10/13)
- día de receso
- Reintento (10/15) [
grabación]- Generación de todas las subsecuencias ascendentes de longitud máxima [notas de clase, código]
- Scheduling to minimize average completion time - parte (a) (Tarea 3, conceptual) [solución]
- Reintento (10/20) [grabación]
- Sudoku [código]
- Teoría de números computacional (10/22) [grabación]
- Criba de Eratóstenes y extensiones (notas de clase, código)
- Sesión de monitoría 10/19 [notas]
- Sesión de monitoría 10/22 [notas]
- Teoría de números computacional (10/27) [grabación]
- no hubo clase
- Teoría de números computacional (10/29) [grabación]
- Teoría de números computacional (11/03) [grabación]
- Teoría de números computacional (11/05) [grabación]
- Funciones multiplicativas [notas] (por Carlos Ramírez)
- Clases polinomiales determinística (P) y no determinística (NP) (11/10) [grabación]
- Conceptos básicos de problemas de decisión
- Decidibilidad vs indecidibilidad
- Tratabilidad vs intratabilidad
- Clases polinomiales determinística (P) y no determinística (NP) (11/12) [grabación]
- Introducción a la clase P [notas de clase]
- Clases polinomiales determinística (P) y no determinística (NP) (11/17) [grabación]
- Introducción a la clase NP [notas de clase]
- Clases polinomiales determinística (P) y no determinística (NP) (11/19) [grabación]
- Repaso de las clases P, NP, NP-hard y NP-complete; reducciones [notas de clase]
- Problemas NP-Completos (11/24) [grabación]
- CIRCUIT-SAT, SAT y 3-CNF-SAT son NP-Completos
- Problemas NP-Completos (11/26) [grabación]
- Reducción polinomial de 3-CNF-SAT a CLIQUE [notas de clase]
Tareas
- Tarea 1: para entregar 08/21 y 08/23
- Tarea 2: para entregar 09/04 y 09/06
- enunciado
- casos de prueba (A, B, C y E; D es bono en UVa)
- Tarea 3: para entregar
09/25 y 09/2709/29 - Tarea 4: para entregar 10/16 y 10/18
- enunciado
- casos de prueba (A, B, C, E)
- Tarea 5: para entregar 11/27