2015-2
Información general
Profesores Francisco Chaves (francisco.chaves *at* escuelaing.edu.co) y Camilo Rocha (camilo.rocha *at* escuelaing.edu.co)
- Grupo 1: Lunes (D-205) 16:00 - 17:30, Martes (C1-204) 16:00 - 17:30, Martes (LAB) 17:30 - 19:00
- Grupo 2: Lunes (D-205) 16:00 - 17:30, Miércoles (C1-204) 10:00 - 11:30, Miércoles (LAB) 11:30 - 13:00
Horas de oficina Por acordar
Horario de atención de monitores Por definir
Material
Ambientes virtuales
- DomJudge (Tareas)
- DomJudge (Proyecto)
- Moodle
- Grupo 1
- Grupo 2
- Insertion Sort (insertionsort.py)
- Merge Sort (mergesort.py)
Conferencias y ejercicios resueltos
- Semana 1: Introducción al análisis y diseño de algoritmos
- Semana 2: Análisis asintótico de funciones; el Teorema Maestro
- Notación O (5 videos)
- El Teorema Maestro (3 videos)
- Semana 3: Programación dinámica
- Introducción (ver desde 13:43)
- Knapsack
- Rod cutting
- Longest palindromic subsequence
- Semana 4: Idem
- Semana 5: Repaso y parcial tercio 1
- Semana 6: Estructuras de datos
- introducción
- montones binarios
- introducción
- operaciones
- aplicación: colas de prioridad
- aplicación: heapsort
- Semana 7: Listas
- Semana 8: Conjuntos, multiconjuntos y diccionarios (tablas de hashing)
- Semana 9: Conjuntos disyuntos; árboles, árboles binarios de búsqueda y árboles de búsqueda balanceados
- conjuntos disyuntos
- árboles y recorridos
- árboles binarios de búsqueda (opcional)
- árboles balanceados (opcional)
- Semana 10: Repaso y parcial tercio 2
- Semana 11: Grafos
- Semana 12: Búsqueda en grafos
- Semana 13: Órden topológico y reintento
- Semana 14: Árboles mínimos de cubrimiento (MST)
- Semana 15: Caminos más cortos (SSSP/ASSP)
- Semana 16: Flujo en redes
Notas
- Tercio 1
- Tercio 2
- Tercio 3
Notas de clase
- How do you add?: formulación de una solucion recurrente
- 2-Partition: formulación de una solución recurrente y diseño de una programación dinámica usando tabulación; incluye reducción del espacio de la memoria adicional
Parciales prácticos
- Tercio 1
- Hasta el sábado 5 de septiembre a las 9pm
Proyecto
Emacs Plugin: enunciado | arena | casos de prueba
- Entrega 0 (10%): viernes 23 de octubre (4pm en Decanatura)
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 (30%):
viernes 6domingo 8 de noviembre (11:59pm en la arena)
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.
- Contar con 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 (60%): miércoles 18 de noviembre (11:59pm en la arena) y viernes 20 de noviembre (sustentación)
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 (B), medios (C) y difíciles (D). Los casos de prueba en el enunciado del problema corresponden al problema (A). 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 B, C y 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á máximo 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:
- Implementación de requerimientos no funcionales: 10
- A: 0 (1 segundo)
- B: 5 (1 segundo)
- C: 10 (2 segundos)
- D: 15 (8 segundos)
- E: +20 (7 segundos)
- Sustentación: 20
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 20 puntos.
Tareas
- Semanas 1 y 2 (para entregar 08/14 y 08/16)
- Semanas 3 y 4 (para entregar 08/28 y 08/30)
- enunciado
- casos de prueba
- ayuda: para el problema D puede ser útil usar expresiones regulares
- Semanas 6 y 7 (para entregar 09/18 y 09/20)
- Semanas 8 y 9 (para entregar 10/05 y 10/06)
- Semanas 11 y 12 (para entregar 10/30 y 11/01)
- enunciado
- casos de prueba
- Enunciado y casos de prueba actualizados con nuevo problema E; el problema C es opcional.
- Semanas 13 y 14 (para entregar 11/13 y 11/16)
- Semanas 15 y 16 (para entregar 12/03 y 12/01)
Otros recursos
- ¿Cómo usar Python en PIMO?
- Parciales conceptuales
- 2014-1: tercio 1, tercio 2, examen final
- 2014-2: tercio 1, tercio 2, examen final
- 2015-1: tercio 1, tercio 2, examen final
- Documentación de Python