En informática teórica y matemáticas , la teoría de la computación es la rama que estudia qué problemas se pueden resolver en un modelo de computación, utilizando un algoritmo , con qué eficiencia se pueden resolver o en qué grado (por ejemplo, soluciones aproximadas frente a soluciones precisas). El campo se divide en tres ramas principales: teoría de autómatas y lenguajes formales , teoría de la computabilidad y teoría de la complejidad computacional , que están vinculadas por la pregunta: "¿Cuáles son las capacidades y limitaciones fundamentales de las computadoras?". [1]
Para realizar un estudio riguroso de la computación, los científicos informáticos trabajan con una abstracción matemática de las computadoras llamada modelo de computación . Hay varios modelos en uso, pero el más comúnmente examinado es la máquina de Turing . [2] Los científicos informáticos estudian la máquina de Turing porque es fácil de formular, se puede analizar y utilizar para demostrar resultados, y porque representa lo que muchos consideran el modelo "razonable" más poderoso posible de computación (véase la tesis de Church-Turing ). [3] Puede parecer que la capacidad de memoria potencialmente infinita es un atributo irrealizable, pero cualquier problema decidible [4] resuelto por una máquina de Turing siempre requerirá solo una cantidad finita de memoria. Entonces, en principio, cualquier problema que pueda ser resuelto (decidido) por una máquina de Turing puede ser resuelto por una computadora que tenga una cantidad finita de memoria.
La teoría de la computación puede considerarse la creación de modelos de todo tipo en el campo de la informática. Por ello, se utilizan las matemáticas y la lógica . En el siglo pasado, se separó de las matemáticas y se convirtió en una disciplina académica independiente con sus propias conferencias como la FOCS en 1960 y la STOC en 1969, y sus propios premios como la Medalla Ábaco de la IMU (establecida en 1981 como Premio Rolf Nevanlinna), el Premio Gödel , establecido en 1993, y el Premio Knuth , establecido en 1996.
Algunos pioneros de la teoría de la computación fueron Ramon Llull , Alonzo Church , Kurt Gödel , Alan Turing , Stephen Kleene , Rózsa Péter , John von Neumann y Claude Shannon .
La teoría de autómatas es el estudio de las máquinas abstractas (o, más apropiadamente, de máquinas o sistemas "matemáticos" abstractos) y de los problemas computacionales que pueden resolverse utilizando estas máquinas. Estas máquinas abstractas se denominan autómatas. Autómata proviene de la palabra griega (Αυτόματα) que significa que algo está haciendo algo por sí mismo. La teoría de autómatas también está estrechamente relacionada con la teoría del lenguaje formal , [5] ya que los autómatas a menudo se clasifican por la clase de lenguajes formales que pueden reconocer. Un autómata puede ser una representación finita de un lenguaje formal que puede ser un conjunto infinito. Los autómatas se utilizan como modelos teóricos para las máquinas de computación y se utilizan para pruebas sobre computabilidad.
La teoría del lenguaje es una rama de las matemáticas que se ocupa de describir los lenguajes como un conjunto de operaciones sobre un alfabeto . Está estrechamente vinculada con la teoría de autómatas, ya que los autómatas se utilizan para generar y reconocer lenguajes formales. Hay varias clases de lenguajes formales, cada una de las cuales permite una especificación del lenguaje más compleja que la anterior, es decir, la jerarquía de Chomsky [6] , y cada una corresponde a una clase de autómatas que la reconoce. Debido a que los autómatas se utilizan como modelos para la computación, los lenguajes formales son el modo preferido de especificación para cualquier problema que deba calcularse.
La teoría de la computabilidad se ocupa principalmente de la cuestión de hasta qué punto un problema es solucionable en un ordenador. La afirmación de que el problema de la detención no puede resolverse con una máquina de Turing [7] es uno de los resultados más importantes de la teoría de la computabilidad, ya que es un ejemplo de un problema concreto que es fácil de formular e imposible de resolver utilizando una máquina de Turing. Gran parte de la teoría de la computabilidad se basa en el resultado del problema de la detención.
Otro paso importante en la teoría de la computabilidad fue el teorema de Rice , que establece que para todas las propiedades no triviales de las funciones parciales, es indecidible si una máquina de Turing calcula una función parcial con esa propiedad. [8]
La teoría de la computabilidad está estrechamente relacionada con la rama de la lógica matemática llamada teoría de la recursión , que elimina la restricción de estudiar solo modelos de computación que sean reducibles al modelo de Turing. [9] Muchos matemáticos y teóricos computacionales que estudian la teoría de la recursión se referirán a ella como teoría de la computabilidad.
La teoría de la complejidad no solo considera si un problema se puede resolver en una computadora, sino también con qué eficiencia se puede resolver. Se consideran dos aspectos principales: la complejidad temporal y la complejidad espacial, que son respectivamente cuántos pasos se necesitan para realizar un cálculo y cuánta memoria se requiere para realizar ese cálculo.
Para analizar cuánto tiempo y espacio requiere un algoritmo dado , los científicos informáticos expresan el tiempo o el espacio necesarios para resolver el problema como una función del tamaño del problema de entrada. Por ejemplo, encontrar un número particular en una lista larga de números se vuelve más difícil a medida que la lista de números se hace más grande. Si decimos que hay n números en la lista, entonces si la lista no está ordenada o indexada de ninguna manera, es posible que tengamos que mirar cada número para encontrar el número que estamos buscando. Por lo tanto, decimos que para resolver este problema, la computadora necesita realizar una cantidad de pasos que crece linealmente en el tamaño del problema.
Para simplificar este problema, los científicos informáticos han adoptado la notación Big O , que permite comparar funciones de una manera que garantiza que no sea necesario considerar aspectos particulares de la construcción de una máquina, sino solo el comportamiento asintótico a medida que los problemas se hacen más grandes. Por lo tanto, en nuestro ejemplo anterior, podríamos decir que el problema requiere pasos para resolverse.
Tal vez el problema abierto más importante en toda la ciencia informática es la cuestión de si una cierta clase amplia de problemas denominados NP se pueden resolver de manera eficiente. Esto se analiza con más detalle en Clases de complejidad P y NP , y el problema P versus NP es uno de los siete problemas del Premio del Milenio establecidos por el Instituto de Matemáticas Clay en 2000. La descripción oficial del problema fue proporcionada por el ganador del premio Turing Stephen Cook .
Aparte de la máquina de Turing , se utilizan otros modelos de computación equivalentes (véase: tesis de Church-Turing ).
Además de los modelos computacionales generales, algunos modelos computacionales más simples son útiles para aplicaciones especiales y restringidas. Las expresiones regulares , por ejemplo, especifican patrones de cadenas en muchos contextos, desde software de productividad de oficina hasta lenguajes de programación . Otro formalismo matemáticamente equivalente a las expresiones regulares, los autómatas finitos se utilizan en el diseño de circuitos y en algunos tipos de resolución de problemas. Las gramáticas libres de contexto especifican la sintaxis del lenguaje de programación. Los autómatas de inserción no deterministas son otro formalismo equivalente a las gramáticas libres de contexto. Las funciones recursivas primitivas son una subclase definida de las funciones recursivas.
Los distintos modelos de computación tienen la capacidad de realizar distintas tareas. Una forma de medir la potencia de un modelo computacional es estudiar la clase de lenguajes formales que el modelo puede generar; de esta forma se llega a la jerarquía de lenguajes de Chomsky .
áreas centrales de la teoría de la computación: autómatas, computabilidad y complejidad. (Página 1)
(Hay muchos libros de texto en esta área; esta lista es necesariamente incompleta).