Many complexity classes contain ``complete problems,'' problems that are
hardest in the class. If the complexity of one complete problem is known, that
of all complete problems is known. Thus, it is very useful to know that a
problem is complete for a particular complexity class. For example, the class
of NP-complete problems, the hardest problems in NP, contains many
hundreds of important combinatorial problems such as the Traveling Salesperson
Problem. It is known that each NP-complete problem can be solved in
time exponential in the size of the problem, but it is not known whether they
can be solved in polynomial time. Whether P and NP are equal or
not is known as the P
NP question. Decades of
research have been devoted to this question without success. As a
consequence, knowing that a problem is NP-complete is good evidence that
it is an exponential-time problem. On the other hand, if one such problem
were shown to be in P, all such problems would be been shown to be in
P, a result that would be most important.
In this chapter we classify problems by the resources they use on serial and parallel machines. The serial models are the Turing and random-access machines. The parallel models are the circuit and the parallel random-access machine (PRAM). We begin with a discussion of tasks, machine models, and resource measures, after which we examine serial complexity classes and relationships among them. Complete problems are defined and the P-complete, NP-complete, and PSPACE-complete problems are examined. We then turn to the PRAM and circuit models and conclude by identifying important circuit complexity classes such as NC and P/poly.