An encoding of a problem is a mapping from problem instances to symbol strings over some alphabet , where .

Typically, = {0, 1}.

Problems represented as binary strings are called concrete problems.

An algorithm solves a concrete problem in time O(T(n)) if, when provided any problem instance i of length n = i, the algorithm can produce the solution in at most O(T(n)) time.

A concrete problem is polynomial-time solvable if there exists an
algorithm to solve it in time O(*n*^{k}) for some constant k.

The complexity class P is the set of concrete decision problems solvable
in polynomial time.