Hay dos respuestas básicas a su pregunta:
Hay más en la teoría de la complejidad que los lenguajes, por ejemplo, clases de funciones, complejidad aritmética y las subáreas de algoritmos de aproximación e inaproximabilidad.
Razones históricas: uno de los documentos básicos en la teoría de la computabilidad fue discutir el problema Entscheidungsproblem de Hilbert (una forma del problema de detención).
Lamentablemente, no sé mucho acerca de lo último, pero permítanme expandirme sobre lo primero.
Complejidad más allá de los idiomas.
Cada clase de complejidad computacional viene con una clase de función asociada . Por ejemplo, la clase P de todos los problemas decidibles en tiempo polinómico está asociada con FP, la clase de todas las funciones computables en tiempo polinómico. FP es importante, ya que se utiliza para definir NP-hard: un lenguaje es NP-difícil si para cada idioma en NP hay una función en FP tal que si y sólo si . Otra clase de complejidad de funciones, #P , está relacionada con la llamada jerarquía polinómica a través del teorema de Toda .M f M x ∈ M f M ( x ) ∈ LLMfMx∈MfM(x)∈L
La complejidad del circuito aritmético (o teoría de la complejidad algebraica ) se ocupa de la complejidad de calcular varios polinomios. Las clases de complejidad importantes aquí son VP y VNP, y la teoría de la complejidad geométrica es un proyecto importante que intenta separar VP y VNP (y más tarde P y NP) utilizando geometría algebraica y teoría de representación.
Otro ejemplo importante de complejidad algebraica es la multiplicación rápida de matrices. Aquí la pregunta básica es ¿qué tan rápido podemos multiplicar dos matrices ? Preguntas similares preguntan qué tan rápido podemos multiplicar enteros, qué tan rápido podemos probar los enteros para primalidad (¡esto es un problema de decisión!) Y qué tan rápido podemos factorizar enteros.
La optimización convexa se ocupa de los problemas de optimización que pueden resolverse (o casi resolverse) de manera eficiente. Ejemplos son la programación lineal y la programación semidefinida, las cuales tienen algoritmos eficientes. Aquí estamos interesados tanto en la solución óptima como en la solución óptima. Como a menudo hay más de una solución óptima, calcular una solución óptima no está bien representado como un problema de decisión.
La aproximabilidad es el área que estudia qué tan buena es la aproximación que podemos obtener para un problema de optimización en tiempo polinómico. Considere, por ejemplo, el problema clásico de Set Cover: dada una colección de sets, ¿cuántos de ellos necesitamos para cubrir todo el universo? Encontrar el número óptimo es NP-hard, pero ¿tal vez sea posible calcular una aproximación? Los algoritmos de aproximación son los algoritmos de estudio de subárea para calcular las aproximaciones, mientras que la inaproximidad estudia los límites de los algoritmos de aproximación. En el caso particular de Set Cover, tenemos un algoritmo que da una aproximación (el algoritmo codicioso), y es NP-difícil mejorarlo.lnn