Créditos: 3
Horas de Clase: 3 / semana
Horas de trabajo independiente: 6 / semana
Horas de Laboratorio al semestre:
Prerequisitos: Matemáticas Discretas para la Computación (300MAG031)
Alcance: Pregrado (??)
2011-1: 10
2010-2: 10
2010-1: 10
2009-2: 10
Este curso reune temas fundamentales de la informática teórica, que son parte indispensable de la
formación de un ingeniero de sistemas. En lo referente al estudio de los lenguajes formales, el
conocer y aprender a utilizar modelos como las expresiones regulares o los autómatas de estados
finitos brinda la posibilidad de ampliar el conjunto de modelos que permiten una representación fiel de
diversos aspectos del mundo real. De otro lado, conocer las limitaciones inherentes al concepto de
computabilidad descubre una realidad a veces desconocida: que no todos los problemas son
susceptibles de ser resueltos algorítmicamente, de hecho, que existe un sinfín de problemas que no
pueden ser resueltos mediante un computador. Finalmente, este curso vuelve sobre un elemento
muy importante para la práctica de la buena programación, que es el cálculo de complejidades
temporales y espaciales de los algoritmos.
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.
Al finalizar el curso los participantes podrán:
Definir qué es un lenguaje regular y representar dicho lenguaje mediante autómatas de estados finitos deterministas, no deterministas o expresiones regulares.
Minimizar un autómata determinista.
Demostrar que los autómatas deterministas, los no deterministas y las expresiones regulares son modelos equivalentes.
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.
Definir qué es un lenguaje incontextual.
Calcular la derivación de una cadena en una gramática incontextual.
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.
Convertir una gramática incontextual a la forma normal de Chomsky.
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.
Demostrar que autómatas de pila no deterministas y gramáticas incontextuales son modelos equivalentes.
Definir qué es una máquina de Turing.
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.
Demostrar que la máquina de Turing no determinista tiene el mismo poder expresivo que la determinista.
Enunciar la tesis de Church y Turing y argumentar su importancia.
Definir qué es un lenguaje decidible, reconocible.
Demostrar que un lenguaje dado es decidible y/o reconocible.
Enunciar el problema de la parada y demostrar que es indecidible.
Definir qué es una reducción entre lenguajes.
Definir el lenguaje asociado a un problema de decisión.
Definir la clase de Lenguajes P, NP, NP-Completo y PSPACE y demostrar la pertenencia de un lenguaje a alguna de estas categorías.
Construir una jerarquía entre las clases de lenguajes estudiadas y argumentar las equivalencias o contenencias entre diferentes clases de lenguajes.
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.
Aplicar las reglas de sumas y productos para calcular una cota superior de complejidad temporal a partir del pseudocódigo de un algoritmo.
Estar en capacidad de evaluar la complejidad temporal y espacial de algoritmos que tienen como estructura de datos principal arreglos, árboles o grafos.
Temas | Sesión | Bibliografía |
Presentación del curso e Introducción | 1 | [1,cap 0] |
Lenguajes Regulares | 2-5 | [1,cap 1] |
Lenguajes Incontextuales | 6-9 | [1,cap 2] |
Máquinas de Turing | 10-12 | [1,cap 3] |
Decidibilidad | 13-15 | [1,cap 4] |
Reducibilidad | 16-17 | [1,cap 5] |
Clases P, NP y NP-completo | 18-20 | [1,cap 7] |
Notaciones de orden de magnitud | 21-23 | [1,cap 7] |
Complejidad en espacio | 24 | [1,cap 8] |
Complejidad de algoritmos sobre árboles | 25-27 | [5,cap 6,12] |
Complejidad de algoritmos sobre grafos | 28-30 | [5,cap 22,23,24] |
Sipser M. Introduction to the Theory of Computation. Segunda Edición. Thompson Course Technology. 2006.
Linz P. An Introduction to Formal Languages and Automata. Jones and Bartlett Publishers. 4a.Edición. 2006.
Hopcroft John E., Motwani Rajeev, Ullman, Jeffrey D. Introduction to Automata Theory, Languajes and Computation. 3a Edición. Addison Wesley. 2007.
Harel D. Computers Ltd. What they really can't do. Oxford University Press. 2000.
Cormen T. et. al. Introduction to algorithms. Segunda Edición.
MIT Press. 2001.
Aho A., Sethi R., Ullman J. Compilers: principles, techniques and tools. Tercera Edición. Addison-Wesley. 2007.
Garey M. Johnson D. Computers and intractability A guide to the theory of NP-completeness. W.H.Freeman and Company. 1979.
Skiena S. The algorithm design manual. Springer-verlag. 1998.
-
El curso es presencial y se impartirá mediante clases magistrales y talleres principalmente. Cada
sesión se imparte una temática y se asignan actividades que deben ser realizadas
por el estudiante. Antes de iniciar cada tema, se recomendará la lectura de la bibliografía
relacionada, de modo que el estudiante tenga una base de conocimiento que le permita participar en
el desarrollo del tema durante la clase. También se realizarán clases tipo taller y se ejercitará la
expresión oral y escrita mediante actividades dentro y fuera de la clase.
| Porcentaje |
Tareas,talleres y quices primer parcial | 10 % |
Primer parcial | 20 % |
Tareas,talleres y quices segundo parcial | 10 % |
Segundo parcial | 20 % |
Tareas,talleres y quices examen final | 5 % |
Examen final | 20 % |
Proyecto | 15% |
INFORMACION DETALLADA DE OBJETIVOS Y CONTENIDO.
Resultados de Programa |
| a | b | c | d | e | f | g | h | i | j | k |
Relevancia | 2 | 3 | 2 | 3 | 1 | 0 | 3 | 2 | 3 | 2 | 1 |
Objetivos del Programa |
| 1 | 2 | 3 | 4 | 5 |
Relevancia | 0.25 | 0.25 | 0.25 | 0.25 | 0.25 |
Habilidades específicas: Uso del sistema operativo Linux, programación en Python, Latex.
Conceptos Fundamentales de Computación: Fases de la traducción entre lenguajes: análisis léxico, sintáctico, generación de código, optimización. Árboles y grafos: recorridos, árboles de recubrimiento. Análisis asintótico de complejidad de los limites superior y promedio. Notaciones de orden de complejidad. Máquinas de estados finitos, gramáticas incontextuales, funciones no computables. Definición de clases P y NP, NP-completitud, técnicas de reducción. Autómatas de estados finitos deterministas y no deterministas, expresiones regulares, autómatas de pila. Máquinas de Turing, la jerarquía de Chomsky, la tesis de Church y Turing.