This document provides an overview of NP-completeness and polynomial time reductions. It defines the classes P and NP, and explains that the core question is whether P=NP. NP-complete problems are the hardest problems in NP, and to prove a problem is NP-complete it must be shown to be in NP and there must be a polynomial time reduction from a known NP-complete problem like 3-SAT. Examples of NP-complete problems discussed include Clique, Independent Set, and Minesweeper. The document outlines the method for proving a problem is NP-complete using a reduction from 3-SAT.