Even before the 1970s a distinction was made between problems that could be solved efficiently (polynomial time) from those that did not seem to have such algorithms. Among the early researchers that made this distinction were von Neumann, Cobham, and Edmonds. At that time, all the problems that could not be solved efficiently (or computational difficult problems) seemed for the most part different from each other. In the early 1970s a class of (apparently) intractable (or computationally difficult) problems called NP-Complete was formally introduced. Cook established this class of problems, and satisfiability (SAT) was the first problem to be proven to be NP-Complete. He also showed that 3-SAT and subgraph isomorphism belong to this class of problems, and conjectured that there were other problems that shared this property. A year later Karp redefined this class of problems and showed that several well-known problems were also NP-Complete. These problems were decision version of classical optimization problems from several research areas. From then on problems in virtually all (quantitative) research areas have been shown to be NP-Complete and Karp’s definition became the standard. Working independently in the Soviet Union, Levin established around the same time a practically equivalent class of problems. He showed that many combinatorial problems can be proven to be as hard as the tiling problem which, he had known for a some time, was universal, i.e. at least as hard as any search problem.

@inproceedings{GonzalezProspectusNT,
title={Prospectus NP-Completeness: Theory and Applications},
author={Teofilo F. Gonzalez}
}