Teoría de la Computación

Este curso es una introducción al análisis matemático de algoritmos y a los fundamentos de la Teoría de Complejidad Computacional. Primero discutiremos como se mide la cantidad de recursos necesarios para resolver un problema algorítmico y luego nos concentraremos en dos extremos: por un lado problemas algorítmicos que admiten soluciones muy eficientes (algoritmos de divide and conquer y probabilísticos) y por otro lado problemas que creemos que no pueden resolverse de manera eficiente mediante ningún método, los problemas NP completos. Distinguir entre unos y otros es el objetivo principal de la teoría de complejidad computacional, y el problema abierto más importante de la teoría de la computación, conocido como P vs NP, que introduciremos como tema final del curso.

Textos: La referencia principal seran las notas clase a clase del instructor. Estas se basarán en los siguientes libros de referencia (altamente recomendados y complementarios entre si):

  • [KT] Kleinberg Jon y Tardos Eva: Algorithms Design, Pearson Education (2006).
  • [R2] Roughgarden Tim: Algorithms Illuminated Part 2: Graph Algorithms and Data Structures, Soundlikeyourself Publishing, LLC (2019).
  • [R3] Roughgarden Tim: Algorithms Illuminated Part 3: Greedy Algorithms and Dynamic Programming, Soundlikeyourself Publishing, LLC (2019).
  • [C] Cormen Thomas, Leiserson Charles, Rivest Ronald y Stein Clifford: Introduction to Algorithms, The MIT press (2003).

Metodología y Evaluación:

La mayor parte de lo que aprenderán en este curso será el resultado de su propio trabajo en dos aspectos de igual importancia: Reflexión posterior a cada clase sobre los resultados discutidos en ella y trabajo en los talleres Prácticos asignados clase a clase.

Los criterios de evaluación del curso son:

  • El 50% de la nota será determinado por talleres prácticos a ser realizados en grupos de a lo más tres estudiantes (ver fechas de entrega de los prácticos abajo, marcados con la letra [P]). Todos los prácticos tienen una participación igual en el 50%.
  • El 50% restante de la nota será determinado por dos exámenes parciales individuales (25% cada uno) a ser realizados en clase en las fechas marcadas abajo.
  • La nota final se decidirá calculando el promedio ponderado de las notas como en los párrafos anteriores, redondeando al entero más cercano y convirtiéndolo a la escala oficial: S: 96-100 MB: 91-95, BMB: 83-90, B: 75-82, R: 41-74, D: 0-40.

Instructor:

PLAN DEL CURSO:

Semana Tema Notas Clase Prácticos Evaluaciones (con *)
1 Introducción [pdf] [P1]
2 Divide y Conquista [pdf] [P2]
3 Estimación recursiva [pdf] Entrega [P1] (Agosto 23 en clase)
4 Fundamentos de probabilidad [pdf] [P3] Entrega [P2] (Agosto 30 en clase)
5 Algoritmos Probabilísticos [pdf]
6 Algoritmos en grafos [pdf],[pdf] Entrega [P3] (Septiembre 13 en clase)
7 REPASO
8 EXAMEN Examen Parcial I (Septiembre 27 en clase)
SEMANA UCU
9 Complejidad computacional NP1 [pdf] [P4]
10 Complejidad computacional NP2 [pdf]
11 Complejidad computacional NP3 [pdf]
12 Complejidad computacional NP4 [pdf][M] Entrega [P4] (Noviembre 1 en clase)
13 Complejidad computacional NP4
14 Qué son las Máquinas de Turing? [pdf] [P5]
15 Máquinas de Turing y lenguajes [pdf]
16 Máquinas Universales y Problemas indecidibles Entrega [P5] (Noviembre 22 en clase)
17 EXAMEN Examen Parcial II (Noviembre 29 en clase)