For this penultimate chapter, we turn from techniques for designing good approximation algorithms to techniques for proving that problems are hard to approximate within certain factors. Our coverage of this topic will be relatively brief: indeed, another book could be written on this subject alone.
We will look at several ways in which these results are proven. First, we start with reductions from NP-complete problems. We have already seen a few examples of such reductions in this book; for example, in Theorem 2.4, we showed that there is no α-approximation algorithm for the k-center problem for α < 2 unless P = NP, and in Theorem 2.9 we argued that there is no O(2n)-approximation algorithm for the general case of the traveling salesman problem unless P = NP. Second, we will look at reductions that preserve approximation; these are reductions from a problem Π to another problem Π′ such that if there is an approximation algorithm with performance guarantee α for problem Π′, then there is an approximation algorithm with performance guarantee f(α) for problem Π, where f is some function. These results yield hardness theorems via the contrapositive: if there is no f(α)-approximation algorithm for problem Π unless P = NP, then there is no α-approximation algorithm for problem Π′ unless P = NP. Third, we will turn to a definition of NP in terms of probabilistically checkable proofs, or PCPs. These PCPs allow us to prove hardness of approximation results for a number of particular constraint satisfaction problems.