View on GitHub

tc2023

Curso de Teoría de la Computación 2023

Teoría de la Computación 2023

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:00 a 21:25 CIT-503, y Miércoles de 19:00 a 20:35 CIT-301.

Office Hours

  • Viernes de 18:00 a 19:00.

Material del curso

No. Fecha Tópicos Recursos
01 05.07.2023 Introducción al curso. Aspectos generales de la teoría de la computación.
Aula 01
Hopcroft-Ullman, Sección 1.1
02 10.07.2023 Autómatas Finitos Deterministas (AFD). Tabla de transiciones.
Aula 02a Aula 02b
Hopcroft-Ullman, Secciones 2.1, 2.2
03 12.07.2023 Expresiones regulares. Árboles sintáctivos para regexp. Notación infix y postfix.
Aula 03a Aula 03b
Hopcroft-Ullman, Sección 3.1
L1 17.07.2023   Lab 01
04 19.07.2023 Función de transición extendida. Implementación de AFDs. Aula 04 Hopcroft-Ullman, Sección 2.2
05 19.07.2023 Autómatas Finitos No Deterministas (AFN). Aula 05 Hopcroft-Ullman, Sección 2.3
06 24.07.2023 Conversión de AFN a AFD.
Cerradura y épsilon-transiciones.
Hopcroft-Ullman, Sección 2.5
L2 26.07.2023   Lab 02
07 31.07.2023 Conversión de Regexp a AFN. Algoritmo de Thompson. Algoritmo de Glushkov. Aula 06a Aula 06b Hopcroft-Ullman, Sección 3.2
08 07.08.2023 Conversión de AFN a Regexp. Algoritmo de Reducción. Método de Arden. Aula 07 Hopcroft-Ullman, Sección 3.4
L3 09.08.2023   Lab 03
09 14.08.2023 Propiedades de lenguajes regulares: vacuidad, finitud, Pumping Lemma. Aula 08 Hopcroft-Ullman, Sección 3.4
10 16.08.2023 Producto de autómatas. Algoritmo de equivalencia. Algoritmo de minimización. Aula 09a Hopcroft-Ullman, Sección 3.4
11 16.08.2023 Propiedades de cerradura. Algoritmos para unión, intersección, diferencia. Aula 09b Hopcroft-Ullman, Sección 3.4
L4 21.08.2023   Lab 04
L5 23.08.2023   Lab 05
12 28.08.2023 Gramáticas libres del contexto.
Aula 12
Hopcroft-Ullman, Sección 4.2
13 30.08.2023 Examen Corto 1.
Corto 1
14 18.09.2023 Árboles sintácticos. Derivaciones leftmost y rightmost. Aula 13 Hopcroft-Ullman, Sección 4.3
15 20.09.2023 Ambigüedad en gramáticas.
Aula 14
 
16 25.09.2023 Algoritmo de simplificación de gramáticas.
Aula 15
 
17 27.09.2023 Entrega del proyecto 1.  
18 02.10.2023 Forma Normal de Chomsky (CNF). Conversión a la CNF.
Aula 16
 
19 04.10.2023 Ejemplos de reducción y conversión a CNF.
Ejemplo Reducción Ejemplo Binarización
Ejemplo CNF
 
20 09.10.2023 Autómatas de pila (PDA). Ejemplos.
Aula 17 Aula 18
 
L6 11.10.2023   Lab 06
21 16.10.2023 Ejemplos. Conversión entre PDA y CFG. Pumping Lemma para PDA. Aula 19 Aula 20  
L7 18.10.2023   Lab 07
22 23.10.2023 Máquinas de Turing.
Aula 21 Aula 22
 
23 25.10.2023 Ejemplos de máquinas de Turing.
Aula 23
 
24 30.10.2023 Entrega del proyecto 2.  
25 06.11.2023 Análisis de algoritmos.
Aula 24
 
L8 08.11.2023   Lab 08
26 13.11.2023 Extensiones de máquinas de Turing: Multi-tracks y multi-cinta. Aula 25  
27 13.11.2023 Complejidad y computabilidad.
Aula 26
 
28 15.11.2023 Cálculo Lambda: Axiomas, ejemplos, Números de Church. Aula 27  
29 15.11.2023 Clases de complejidad. P vs NP. Ejemplo del TSP. Aula 28  
30 20.11.2023 Máquinas de Turing Universales (UTM). Dispositivos Turing-completos.  
31 22.11.2023 Entrega del Proyecto 3.  

Lecturas complementarias

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

No. Fecha Tópicos Recursos
01 31.07.2023 Lectura 1 - Expresiones regulares y AFNs. Lectura 1
02 07.08.2023 Lectura 2 - Conversión de AFNs a AFDs y construcción directa del AFD. Lectura 2
03 21.08.2023 Lectura 3 - Minimización de AFDs. Lectura 3
04 23.10.2023 Lectura 4 - Máquinas de Turing. Lectura 4
05 08.11.2023 Lectura 5 - Análisis de Algoritmos y notación asintótica. Lectura 5

Proyectos

En el curso se desarrollarán tres proyectos.

No. Fecha Tópicos Recursos
1 21.08.2023 Proyecto 1 - Algoritmos sobre AFDs, AFNs y regexp. Proyecto 1
Fecha de Entrega: 25-29 septiembre.
2 27.09.2023 Presentación y revisión del proyecto.  
3 29.09.2023 Entrega del reporte final.  
No. Fecha Tópicos Recursos
1 01.10.2023 Proyecto 2 - Algoritmo CYK para gramáticas. Proyecto 2
Fecha de Entrega: lunes 30 de octubre.
2 30.10.2023 Presentación y revisión del proyecto.  
3 02.11.2023 Entrega del reporte final.  
No. Fecha Tópicos Recursos
1 05.11.2023 Proyecto 3 - Máquinas de Turing. Proyecto 3
Fecha de Entrega: miércoles 22 de noviembre.
2 22.11.2023 Presentación y revisión del proyecto.  
3 24.11.2023 Entrega del reporte final.  

Referencias