This document provides an overview of techniques for solving hard computational problems. It discusses the complexity classes P, NP, and NP-complete, and provides examples of NP-complete problems like the travelling salesman problem. The document then discusses heuristic approaches like approximation and randomized algorithms. It also discusses exploiting additional structure in problem inputs and parameterized/exact analysis. Finally, it provides an example of using vertex cover techniques like degree bounds to solve the vertex cover problem in polynomial time for certain cases.