Computational Complexity Theory
摘要
The computational complexity theory is concerned with computational resources needed for solving the problems on computers. These resources are in the form of time and space (memory), where time is number of elementary steps required in solving the problem, and space is storage consumed in units of words. The important difference between these two resources is that space is reusable in nature while time is not. Despite the fact that there are infinite variety of problems, there are only limited classes of time and space complexity, into which all the known problems can be fitted. In fact, there is canonical hierarchy of complexities, which covers all the classes. The basic classes for time are \(\textsf{P}, \textsf{NP}\) and \(\textsf{EXP}\) , and for space are \(\textsf{L}\) (for log), \(\textsf{PSPACE}\) , \(\textsf{NSPACE}\) , and \(\textsf{EXPSPACE}\) . The complexity classes are defined for deterministic and nondeterministic TMs. The general case of all the type \(\textsf{P}\) is solvable on realistic machines in realistic time, while it is other way for type \(\textsf{NP}\) . An interesting principle, called problem reduction, states that a problem can be reduced from a more complex form to a simpler form. Thus, if an \(\textsf{NP}\) class problem can be reduced into a class \(\textsf{P}\) through a transformation that takes time in \(\textsf{P}\) , the original problem can in fact be solved in time, in \(\textsf{P}\) . The chapter also presents some specific type of problem called PRIMES and COMPOSITS in the \(\textsf{NP}\) class, introduces the classes \(\textsf{NP}\) -complete and \(\textsf{NP}\) -hard, and provides the chapter summary followed with number of exercises for practice.