Existem duas respostas básicas para sua pergunta:
Há mais na teoria da complexidade do que nas linguagens, por exemplo, classes de funções, complexidade aritmética e as subáreas de algoritmos de aproximação e inadequação.
Razões históricas: um dos artigos básicos da teoria da computabilidade discutia o Entscheidungsproblem de Hilbert (uma forma do problema da parada).
Infelizmente, não sei muito sobre o último, mas deixe-me expandir sobre o primeiro.
Complexidade além das línguas
Toda classe de complexidade computacional vem com uma classe de função associada . Por exemplo, a classe P de todos os problemas decidíveis em tempo polinomial está associada ao FP, a classe de todas as funções computáveis em tempo polinomial. FP é importante, uma vez que é utilizado para definir NP-dureza: uma língua é NP-se difícil para cada idioma em NP existe uma função em FP tais que sse . Outra classe de funções de complexidade, #P , está relacionada à chamada hierarquia polinomial via teorema de Toda .M f M x ∈ M f M ( x ) ∈ LLMfMx∈MfM(x)∈L
A complexidade do circuito aritmético (ou teoria da complexidade algébrica ) lida com a complexidade da computação de vários polinômios. As classes de complexidade importantes aqui são VP e VNP, e a teoria da complexidade geométrica é um projeto importante que tenta separar VP e VNP (e posteriormente P e NP) usando a geometria algébrica e a teoria da representação.
Outro exemplo importante de complexidade algébrica é a multiplicação rápida de matrizes. Aqui a questão básica é com que rapidez podemos multiplicar duas matrizes ? Perguntas semelhantes perguntam com que rapidez podemos multiplicar números inteiros, com que rapidez podemos testar a primalidade de números inteiros (este é um problema de decisão!) E com que rapidez podemos fatorar números inteiros.
A otimização convexa lida com problemas de otimização que podem ser resolvidos (ou quase resolvidos) com eficiência. Exemplos são programação linear e programação semidefinida, ambos com algoritmos eficientes. Aqui estamos interessados tanto na solução ótima quanto na própria solução ideal. Como geralmente há mais de uma solução ótima, o cálculo de uma solução ótima não é bem representado como um problema de decisão.
Aproximabilidade é a área que estuda quão boa podemos obter para um problema de otimização em tempo polinomial. Considere, por exemplo, o problema clássico da cobertura de conjuntos: dada uma coleção de conjuntos, quantos deles precisamos para cobrir todo o universo? Encontrar o número ideal é difícil para o NP, mas talvez seja possível calcular uma aproximação? Algoritmos de aproximação é a subárea que estuda algoritmos para calcular aproximações, enquanto a inadequação estuda os limites dos algoritmos de aproximação. No caso específico de Set Cover, temos um algoritmo que fornece uma aproximação (o algoritmo ganancioso) e é difícil para o NP fazer melhor.lnn