l'insieme di problemi che, se esiste la soluzione, possono essere risolti da una macchina astratta M usando della risorsa R, con dimensione dell'input
Ad esempio, la classe NP è l'insieme dei problemi di decisione che possono essere risolti da una macchina di Turing non deterministica in tempo polinomiale, mentre la classe P è l'insieme dei problemi di decisione che possono essere risolti da una macchina di Turing deterministica in tempo polinomiale. Alcune classi di complessità sono insiemi di problemi costruttivi (cioè che richiedono di calcolare una funzione, e non di rispondere SÌ o NO), come ad esempio FP.
La seguente tabella mostra alcune classi di problemi (o di linguaggi) che sono considerate nella teoria della complessità. Se la classe X è un sottoinsieme stretto di Y, allora X è rappresentata sotto ad Y, con una linea continua che li connette. Se X è un sottoinsieme, ma non si sa se X e Y sono insiemi uguali, allora la linea è tratteggiata. Tecnicamente, la suddivisione tra problemi solubili e insolubili appartiene più alla teoria della calcolabilità, ma aiuta a vedere in prospettiva le classi di complessità.
The Complexity Zoo: una lista di classi di complessità, come riferimento per gli esperti.
Diagram by Neil Immerman mostra la gerarchia delle classi di complessità e come queste si combinano tra di loro.
Michael Garey, and David S. Johnson: Computers and Intractability: A Guide to the Theory of NP-Completeness. New York: W. H. Freeman & Co., 1979. Il riferimento standard per i problemi NP-Completi.