Complexity Class

A complexity class is a set of computational problems that share a bound on the resources needed to solve them. The Stanford Encyclopedia of Philosophy describes how complexity theory groups problems into classes according to how much computation - chiefly time or memory - is required, measured as a function of the size of the input. The class is defined jointly by the resource being measured, the bound placed on it, and the model of computation, usually a Turing machine.

The Stanford Encyclopedia builds the most familiar classes from a base notion such as TIME(t(n)), the set of problems solvable by a machine within time t(n). Taking the union over all polynomial bounds yields P, the class of problems solvable in polynomial time. NP is the class whose solutions can be verified in polynomial time. PSPACE captures problems solvable using a polynomial amount of memory, and EXPTIME captures those needing exponential time. These nest in the chain P inside NP inside PSPACE inside EXPTIME, though almost none of the suspected separations have been proved.

The Complexity Zoo, an authoritative community reference, catalogs hundreds of such classes and the known relationships between them. It exists precisely because the landscape of complexity classes is large and intricate: the same problem can sit in several classes, and the open questions about which classes are truly distinct - most famously whether P equals NP - are among the deepest unsolved problems in the field. Complexity classes are, in effect, the map by which theoretical computer science charts how hard problems are.