Many computational problems that turn up in industry, operations research, network design, artificial intelligence, simulation of physical systems, logic, number theory, combinatorics, algebra, and computational biology lack a fast or feasible algorithmic solution. The best known algorithms for these problems are horrendously slow. One of the central open problems in computer science is the question of whether this slowness is inherent in these problems or that we simply lack good programming techniques. This question is known as the P versus NP question. The hardest computational problems of the above type are called NP-complete problems. It is widely believed that there does not exist a feasible algorithmic solution for these NP-complete problems.