I had not anticipated that it would take so long to describe the basic elements of complexity theory and therefore was not able to finish all that I had put in the notes for Lecture 5. However, this is of no matter. Next time I will talk about the important question of whether or not P$=$NP.

Computational complexity theory is a very large subject, of which this lecture can only scratch the surface. You should aim to understand the definition of problem classes P, NP, NP-hard and NP-complete. There are other complexity classes, such as PSPACE (problems that can be solved using memory space that is polynomial in the size of the problem) and EXPTIME. It is known that P $\subseteq$ NP $\subseteq $PSPACE $\subseteq $EXPTIME, with at least one of these inclusions being strict, but it is not known which.

I mentioned the famous book, Computers and Intractability: A Guide to the Theory of NP-Completeness by Michael Garey and David S. Johnson. This is perhaps the most cited reference text in all of computer science. For this book they received received the 1979 Lanchester Prize from the Operations Research Society of America.

The following few remarks are certainly non-examinable, but you might find them interesting.

1. In the figure on page 24 of our notes one can see that there are potentially problems which are NP-hard but which are not NP-complete. Optimization problems are in this class. That is, "Does there exist as solution to a given travelling salesman problem with path length $\leq k$" is NP-complete. However, the harder problem: "Find the minimum length travelling salesman path" is NP-hard and not in NP. One reason it is not in NP is that it is not a decision problem. An example of a decision problem that is NP-hard but not in NP is the halting problem: "given a program and an input, does the program terminate when run on this input?"

2. Problems that are in NP but neither in P or NP-complete are designated NPI (the letter I standing for "intermediate"). It has been proved that if P$\neq$NP then NPI problems must exist. But no natural ones are known. It is suspected that graph isomorphism is NPI, since it has not been proved to be either in P, or NP-complete. This is the problem of deciding whether or not two graphs are isomorphic. On the one hand graph isomorphism is in P for many special types of graph (such as planar ones). On the other hand, the subgraph isomorphism problem is known to be NP-complete. This is the problem of deciding whether or not one graph contains a subgraph which is isomorphic to a second graph.

3. Sometimes changing a problem very slightly can change its complexity. For example, 2SAT is the Boolean satisfiability problem in which each clause is restricted to have just two literals. This problem is in P, whereas 3SAT is NP-complete.

4. The question of whether or not it is true that P$=$NP is unlikely to be solved soon. Research success, such as it is, has succeeded only in explaining why certain proof ideas must be incapable of resolving this question. There are thousands of theorems in the research literature which are stated in the form "... is true, unless P$=$NP".

Computational complexity theory is a very large subject, of which this lecture can only scratch the surface. You should aim to understand the definition of problem classes P, NP, NP-hard and NP-complete. There are other complexity classes, such as PSPACE (problems that can be solved using memory space that is polynomial in the size of the problem) and EXPTIME. It is known that P $\subseteq$ NP $\subseteq $PSPACE $\subseteq $EXPTIME, with at least one of these inclusions being strict, but it is not known which.

I mentioned the famous book, Computers and Intractability: A Guide to the Theory of NP-Completeness by Michael Garey and David S. Johnson. This is perhaps the most cited reference text in all of computer science. For this book they received received the 1979 Lanchester Prize from the Operations Research Society of America.

The following few remarks are certainly non-examinable, but you might find them interesting.

1. In the figure on page 24 of our notes one can see that there are potentially problems which are NP-hard but which are not NP-complete. Optimization problems are in this class. That is, "Does there exist as solution to a given travelling salesman problem with path length $\leq k$" is NP-complete. However, the harder problem: "Find the minimum length travelling salesman path" is NP-hard and not in NP. One reason it is not in NP is that it is not a decision problem. An example of a decision problem that is NP-hard but not in NP is the halting problem: "given a program and an input, does the program terminate when run on this input?"

2. Problems that are in NP but neither in P or NP-complete are designated NPI (the letter I standing for "intermediate"). It has been proved that if P$\neq$NP then NPI problems must exist. But no natural ones are known. It is suspected that graph isomorphism is NPI, since it has not been proved to be either in P, or NP-complete. This is the problem of deciding whether or not two graphs are isomorphic. On the one hand graph isomorphism is in P for many special types of graph (such as planar ones). On the other hand, the subgraph isomorphism problem is known to be NP-complete. This is the problem of deciding whether or not one graph contains a subgraph which is isomorphic to a second graph.

3. Sometimes changing a problem very slightly can change its complexity. For example, 2SAT is the Boolean satisfiability problem in which each clause is restricted to have just two literals. This problem is in P, whereas 3SAT is NP-complete.

4. The question of whether or not it is true that P$=$NP is unlikely to be solved soon. Research success, such as it is, has succeeded only in explaining why certain proof ideas must be incapable of resolving this question. There are thousands of theorems in the research literature which are stated in the form "... is true, unless P$=$NP".