This document outlines topics related to NP-hard and NP-complete problems. It begins by defining optimization and decision problems, and the complexity classes P, NP, and NP-hard. It then discusses non-deterministic algorithms and provides examples. The document also covers Cook's theorem, which states that any NP problem can be converted to the satisfiability problem (SAT) in polynomial time. Finally, it gives examples of NP-hard graph problems like the clique and Hamiltonian cycle problems.