Los problemas matemáticos se pueden dividir en primera instancia en dos grupos:
- Problemas indecidibles: aquellos que no se pueden resolver mediante un algoritmo.
- Problemas decidibles: aquellos que cuentan al menos con un algoritmo para su cómputo.
Sin embargo, que un problema sea decidible no implica que se pueda encontrar su solución, pues muchos problemas que disponen de algoritmos para su resolución son inabordables para un computador por el elevado número de operaciones que hay que realizar para resolverlos. Esto permite separar los problemas decidibles en dos:
- Intratables: aquellos para los que no es factible obtener su solución.
- Tratables: aquellos para los que existe al menos un algoritmo capaz de resolverlo en un tiempo razonable.
Los problemas pueden clasificarse también atendiendo a su complejidad. Aquellos problemas para los que se conoce un algoritmo polinómico que los resuelve se denominan clase P. Los algoritmos que los resuelven son deterministas. Para otros problemas, sus mejores algoritmos conocidos son no deterministas. Esta clase de problemas se denomina clase NP. Por tanto, los problemas de la clase P son un subconjunto de los de la clase NP, pues sólo cuentan con una alternativa en cada paso.