Computabilidad y Complejidad

Información Básica

  • Créditos: 3
  • Horas de Clase: 5 / semana (3 horas de clase, 2 de taller)
  • Horas de trabajo independiente: 4 / semana
  • Prerequisitos: Matemáticas Discretas para la Computación (300MAG031), Lógica en Ciencias de la Computación (300CIG002).
  • Tipo de curso: Núcleo de Formación Fundamental.

Descripción del Curso

Este curso reune temas fundamentales de la informática teórica, que son parte indispensable de la formación de un ingeniero de sistemas.

El curso comienza con un contexto motivador que describe el origen de computación y su relación estrecha con la lógica matemática. El curso cubre tres modelos fundamentales de computación y sus correspondientes lenguajes formales: Máquinas de estado finito y lenguajes regulares, máquinas de pila y lenguajes incontextuales, máquinas de Turing y lenguajes recursivos. Se estudiará la expresividad de estos modelos y sus limitaciones absolutas: En particular, se mostrará formalmente que hay problemas que no pueden ser solucionados (decididos) por ninguna máquina de Turing (el más expresivos de todos los modelos computacionales), lo cual implica que no pueden ser solucionados por ningún algoritmo de acuerdo a la tesis fundamental de Turing (también estudiada en el curso).

Por otro lado también se estudiarán y clasificarán, de acuerdo a su complejidad espacial y temporal inherente, problemas fundamentales que sí pueden ser decididos por una máquina de Turing. Este estudio cubre el análisis de complejidad de algoritmos y estructuras de datos, como también clases fundamentales de problemas que pueden ser solucionadas en tiempo polinomial de una manera determinista (P), no determinista (NP), en tiempo exponencial de manera determinista (EXP), y con espacio polinomial de manera determinista (EXP).

En conclusión, este curso agrupa temas teóricos fundamentales, que enriquecerán la visión del estudiante acerca de las ciencias de la computación y lo llevarán a aplicar esta ciencia en el desempeño de una ingeniería de calidad.

Objetivos

Al finalizar el curso los participantes podrán:

  1. Definir e interpretar modelos computacionales de variado poder expresivo.
    1. Definir qué es un lenguaje regular y representar dicho lenguaje mediante autómatas de estados finitos deterministas, no deterministas o expresiones regulares.
    2. Demostrar que los autómatas deterministas, los no deterministas y las expresiones regulares son modelos equivalentes.
    3. A partir de la descripción de una situación del mundo real o de un sistema, definir un autómata de estados finitos que lo modela.
    4. Definir qué es un lenguaje incontextual.
    5. Calcular la derivación de una cadena en una gramática incontextual.
    6. Dado un lenguaje formal, definir una gramática incontextual que lo genera y dada una gramática incontextual, describir en forma verbal el lenguaje que genera.
    7. Convertir una gramática incontextual a la forma normal de Chomsky.
    8. Dado un lenguaje incontextual, definir un autómata de pila que lo reconoce y dado un autómata de pila, describir verbalmente cuál es el lenguaje que reconoce.
    9. Demostrar que autómatas de pila no deterministas y gramáticas incontextuales son modelos equivalentes.
    10. Definir qué es una máquina de Turing.
    11. Definir una máquina de Turing que reconoce un lenguaje formal dado y describir verbalmente el lenguaje que reconoce una máquina de Turing dada.
    12. Demostrar que la máquina de Turing no determinista tiene el mismo poder expresivo que la determinista.
    13. Definir una máquina de Turing que compute una función dada.
  2. Enunciar y argumentar la veracidad de los conceptos principales de la teoría de la computación.
    1. Enunciar la tesis de Church y Turing y argumentar su importancia.
    2. Definir qué es un lenguaje decidible y uno reconocible.
    3. Demostrar que un lenguaje dado es decidible y/o reconocible.
    4. Enunciar el problema de la parada y demostrar que es indecidible.
    5. Definir qué es una reducción entre lenguajes.
    6. Definir el lenguaje asociado a un problema de decisión.
    7. Definir la clase de Lenguajes P, NP, NP-Completo y PSPACE y demostrar la pertenencia de un lenguaje a alguna de estas categorías.
    8. Construir una jerarquía entre las clases de lenguajes estudiadas y argumentar las equivalencias o contenencias entre diferentes clases de lenguajes.
  3. Analizar la complejidad de una máquina de Turing y de un algoritmo.
    1. Utilizar la definición de las notaciones O, Omega y Theta para mostrar que una función matemática dada está o no acotada por otra mediante cada una de ellas.
    2. Aplicar las reglas de sumas y productos para calcular una cota superior de complejidad temporal a partir del pseudocódigo de un algoritmo.
    3. Estar en capacidad de evaluar la complejidad temporal y espacial de algoritmos que tienen como estructura de datos principal arreglos, árboles o grafos.

Se desarrollan competencias en

  1. Specification, simulation and testing in the JFLAP tool (básico) [3].

Contenido

Capítulo 1: Introducción

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
1-2 3 2 Presentación del curso y nociones básicas de conjuntos y cadenas. Uso [1, Introducción]

Total de Horas: 5.

Sesión Horas de trabajo independiente Temas Bibliografía
1-2 4 Tareas semanales, resolución de problemas en temas vistos [1, Introducción]

Capítulo 2: Lenguajes Regulares y Automatas Finitos

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
3-8 9 6 Autómatas deterministas de estados finitos y lenguajes regulares. Autómatas de estado finito no deterministas y construcción de conjunto potencia. Expresiones regulares y patrones de secuencia. Limitaciones de Autómatas finitos (lema del bombeo) Evaluación [1, cap. 1]

Total de Horas: 15.

Sesión Horas de trabajo independiente Temas Bibliografía
3-8 12 Tareas semanales, resolución de problemas en temas vistos [1, cap. 1]

Capítulo 3: Lenguajes Incontextuales y Autómatas de Pila

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
9-14 9 6 Lenguajes Incontextuales y Formas Normales. Lema de Bombeo para Lenguages Incontextuales. Autómatas de Pila. Sintaxis abstracta y concreta, parsing. Evaluación [1, cap. 2]

Total de Horas: 15.

Sesión Horas de trabajo independiente Temas Bibliografía
9-14 12 Tareas semanales, resolución de problemas en temas vistos [1, cap. 2]

Capítulo 4: Lenguajes Recursivos y Máquinas de Turing

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
15-20 9 6 Máquinas de Turing y Tesis de Church y Turing. Lenguajes Recursivos y Jerarquía de Chomsky. Modelos Equivalentes. Máquinas de Turing Universales y programas que toman otros programas como entrada. Problemas no computables (Indecidibilidad) y Reducibilidad: Problema de la parada. Evaluación [1, cap. 3]

Total de Horas: 15.

Sesión Horas de trabajo independiente Temas Bibliografía
15-20 12 Tareas semanales, resolución de problemas en temas vistos [1, cap. 3]

Capítulo 5: Complejidad Computacional

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
21-32 18 12 Cota superior asintótica (notaciones O, Omega y Theta), ecuaciones de recurrencia y teorema maestro. Análisis espacial y temporal de algoritmos y estructura de datos. Clases de Complejidad. Clases P, NP, EXP y P-Space. Reducción y Completitud. P vs NP y Algunos Problemas de decisión NP-completos: SAT y Knapsack. Evaluación [2, cap. 1, 7, 8]

Total de Horas: 30.

Sesión Horas de trabajo independiente Temas Bibliografía
21-32 24 Tareas semanales, resolución de problemas en temas vistos [2, cap. 1, 7, 8]

Bibliografía

  1. Kozen, Dexter. Automata and Computability. ISBN 978-1-4612-7309-7. Springer, 1997.
  2. Papadimitriou, Christos. Computational Complexity. ISBN 0-201-53082-1. Addison Wesley, 1994.

Instalaciones

Salón de clase con computador y proyector (Sala Linux, PL-3.2). Laboratorio de Ingeniería de Sistemas y Computación.

Material de este semestre

Se distribuye material después de cada clase por medio de lista de correos asignada al curso.