Computational complexity theory is an area of mathematics and computer science that is concerned with the resources necessary to solve problems on a computer system. A number of techniques are available to determine the resource requirements of a problem. Some problems might not be feasible on existing computer systems because of their resource demands. Researchers classify problems by difficulty and can divide computations into polynomial (P) versus nonterministic polynomial (NP) problems.
Solving a computation requires resources such as time, storage space and hardware. A computer system might have limitations that make a problem functionally impossible to solve because it does not have the available resources. As computer technology improves, a previously unsolvable problem might become solvable with the help of new technology and research in the field of computational complexity theory. The solvability of a problem is not necessarily determined by its complexity but on the algorithms used to solve it.
In computational complexity theory, a P problem is one that can be solved in polynomial time with a straightforward algorithm. It might still require substantial resources, but it is both solvable and checkable by computer. Such problems could be thought of as quickly solvable as long as a computer has the available resources to handle the necessary computations.
NP problems are more complex. It is not possible to apply a single algorithm, and it might be necessary to use more advanced options, such as parallel Turing machines that can explore several options. The problem might be solvable this way, but it will require substantially more resources. Such problems might be easier for human operators who are capable of advanced logical thinking, because the tipping point is often one of logic rather than sheer computation difficulty. The traveling salesman problem, in which the goal is to find the most efficient route between a number of cities along a route, is a classic example of an NP problem in computational complexity theory.
Classification of P versus NP problems through computational complexity theory can be a complex task, and problems might shift back and forth across the divide. A small set of computational problems do not fit neatly in either category and are sometimes classified as neither in order to reflect this. It might eventually be possible to develop an algorithm to solve an NP problem, and in some cases, it might apply to other problems that have a similar structure. In others, however, it might be problem-specific. The process of exploring such programs and developing approaches to solve them is an important area of mathematics and computer science that contributes to the development of advanced, high-powered computer systems.