View on GitHub

tc2022

Curso de Teoría de la Computación 2022

Teoría de la Computación 2022

Este es un curso introductorio a la teoría de la computación, la cual se ocupa de determinar cuáles problemas pueden ser resueltos computacionalmente y con qué eficiencia, así como de entender el límite entre los problemas computables y los no-computables, y clasificarlos de acuerdo a su simpleza o dificultad.

El curso inicia con el estudio de distintos modelos de cómputo, como los autómatas finitos (que son los más sencillos), y sus diferentes tipos y aplicaciones; las máquinas de Turing (que son las computadoras usuales de hoy en día) y las computadoras cuánticas (cuyo funcionamiento no es digital). Una vez formulado un modelo de computación, nos interesa conocer la cantidad de recursos computacionales que es necesario utilizar para resolver un problema. El primero de estos recursos es el tiempo: cuántos pasos o cuántas acciones debemos realizar para resolver el problema. También son importantes el espacio ocupado, la necesidad de utilizar una fuente de números aleatorios, la posibilidad de resolver subproblemas en paralelo, entre otros.

La formalización de un modelo computacional como objeto matemático permite expresar de manera precisa preguntas sobre problemas o algoritmos. En particular, si L es un problema. ¿Puede L ser resuelto por un algoritmo? ¿Puede ser L resuelto de manera eficiente? ¿Cómo podemos construir un algoritmo eficiente para L? ¿Es L un problema para el cual no existe un algoritmo que lo resuelva? Contestaremos a algunas de estas preguntas, mientras que otras se verán en los cursos de Lógica Matemática y en Análisis de Algoritmos.

Prerrequisitos

Se recomienda que los estudiantes antes del curso estén habituados con los siguientes temas:

Bastará con haber cursado una materia de cálculo y una de mátemática discreta. En el caso de programación, conviene conocer muy bien los temas de estructuas de datos y algoritmos.

El curso tiene una carga fuerte en el tema de matemática y estructuras abstractas. Cuando sea conveniente, dedicaremos una parte del curso a cubrir algunos prerrequisitos necesarios en los temas.

Programa del curso

Programa del curso

Horario

  • Lunes de 19:50 a 21:25, y Miércoes de 19:00 a 21:25.

Office Hours

  • Viernes, de 19:00 a 20:00.

Material del curso

No. Fecha Tópicos Recursos
00 06.07.2022 Introducción. Aspectos generales de la teoría de la computación.
 
01 11.07.2022 Alfabetos, palabras y lenguajes. Autómatas finitos deterministas (AFD).
Aula 01a Aula 01b
Secciones 1.5 y 2.1 Hopcroft.
02 13.07.2022 Expresiones regulares. Formalismo de los AFD.
Aula 02a Aula 02b
Sección 2.1 Hopcroft.
L1 13.07.2022 Lab 01.
Lab 01
03 18.07.2022 Función de transición extendida. Derivaciones. Simulación de un AFD. Aula 03 Capítulo 2 Hopcroft.
04 20.07.2022 Autómatas finitos no-deterministas (AFN). Equivalencia entre AFD y AFN. Aula 04 Capítulo 2 Hopcroft.
L2 20.07.2022 Lab 02.
Lab 02
05 25.07.2022 epsilon-AFN. Conversión de regexp a AFN: Algoritmo de Thompson. Aula 05a Aula 05b Capítulo 3 Hopcroft.
06 27.07.2022 Conversión de AFN a regexp: Algoritmo de reducción. Lema de Arden.
Aula 06 Aula 06_notas
Capítulo 3 Hopcroft.
07 03.08.2022 Repaso de algoritmos en autómatas.
 
L3 03.08.2022 Lab 03.
Lab 03
08 08.08.2022 Propiedades de lenguajes regulares. Pumping Lemma.
Aula 07a
 
09 10.08.2022 Examen Corto 1. Corto 01
10 17.08.2022 Equivalencia de lenguajes regulares. Propiedades de cerradura.
Aula 08
Capítulo 3 Hopcroft.
L4 17.08.2022 Lab 04.
Lab 04
11 22.08.2022 Propiedades de Decisión. Algoritmo de minimización de AFD.
Aula 09
Capítulo 3 Hopcroft.
12 24.08.2022 Repaso de algoritmo de minimización.
Aula 10
Capítulo 3 Hopcroft.
L5 24.08.2022 Lab 05.
Lab 05
13 31.08.2022 Gramáticas libres del contexto (CFG).
Aula 12
 
14 05.09.2022 Árboles sintácticos (parse trees). Ambigüedad.
Aula 13
 
15 07.09.2022 Remoción de Ambigüedad.
Aula 14
 
L6 07.09.2022 Lab 06.
Lab 06
16 21.09.2022 Algoritmo de simplificación de gramáticas.
Aula 15 Ejemplos
 
17 26.09.2022 Autómatas de Pila.
Aula 16 Aula 17
 
18 28.09.2022 Presentación del primer proyecto.
 
19 03.10.2022 Análisis de algoritmos. Notaciones asintóticas.
Aula 18
 
19 05.10.2022 Ejemplos de notación asintótica.
 
L7 05.10.2022 Lab 07.
Lab 07
20 12.10.2022 Máquinas de Turing: motivación.
Aula 20
 
21 17.10.2022 Máquinas de Turing II: formalización, transiciones.
Aula 21
 
22 19.10.2022 Ejemplos de máquinas de Turing.
Aula 22
 
23 24.10.2022 Más ejemplos de máquinas de Turing.
Aula 23
 
L8 26.10.2022 Lab 08.
Lab 08
24 26.10.2022 Examen Corto 2. Corto 02
Fecha de Entrega: lunes 31 de octubre.
25 31.10.2022 Máquinas de Turing III: Extensiones.
Aula 24
 
26 07.11.2022 Computabilidad, Decidibilidad. Modelos computacionales.
Aula 25
 
27 09.11.2022 Cálculo Lambda.
Aula 26
 
28 09.11.2022 Examen Corto 3. Corto 03
Fecha de Entrega: domingo 13 de noviembre.
29 14.11.2022 Resolución de dudas sobre el proyecto.  
30 16.11.2022 Clases de Complejidad. P vs NP.
Máquinas de turing universales.
 
31 23.11.2022 Presentación de proyectos finales.  

Lecturas complementarias

(Autores: T. Gálvez, B. Pojoy, P. Mejía y A. Reyes-Figueroa).

No. Fecha Tópicos Recursos
01 25.07.2022 Lectura 1 - Expresiones regulares y AFNs. Lectura 1
02 08.08.2022 Lectura 2 - Conversión de AFNs a AFDs y construcción directa del AFD. Lectura 2
03 22.08.2022 Lectura 3 - Minimización de AFDs. Lectura 3
04 05.10.2022 Lectura 4 - Notación Asintótica. Lectura 4
05 24.10.2022 Lectura 5 - Máquinas de Turing. Lectura 5
06 07.11.2022 Lectura 6 - Complejidad. Lectura 6

Proyectos

No. Fecha Tópicos Recursos
1 22.08.2022 Proyecto 1 - Algoritmos sobre AFDs, AFNs y regexp. Proyecto 1
. 28.09.2022 Presentación y entrega de informe.  
No. Fecha Tópicos Recursos
2 31.10.2022 Proyecto 2 - Algoritmo CYK y Funciones Lambda. Proyecto 2
. 23.11.2022 Presentación.  
. 26.11.2022 Entrega de informe final.  

Horarios para la presentación del segundo proyecto. (23 de noviembre)

No. Hora Grupo
1 7:00 pm - 7:15pm Equipo 9
2 7:15 pm - 7:30pm Equipo 8
3 7:30 pm - 7:45pm Equipo 1
4 7:45 pm - 8:00pm Equipo 7
5 8:00 pm - 8:15pm Equipo 4
6 8:15 pm - 8:30pm Equipo 2
7 8:30 pm - 8:45pm Equipo 5
8 8:45 pm - 9:00pm Equipo 3
9 9:00 pm - 9:15pm Equipo 10

Referencias