This document discusses P, NP, NP-hard and NP-complete problems. It begins by defining tractable problems that can be solved in polynomial time as class P problems. Intractable problems that cannot be solved in reasonable time with increasing input size are also introduced. NP is the class of problems that can be solved by a non-deterministic machine in polynomial time. NP-hard problems are those that are at least as hard as the hardest problems in NP, and NP-complete problems are NP-hard problems that are also in NP. Common NP-complete problems like 3-SAT and the clique problem are reduced to each other to demonstrate their equivalence. Prior questions related to complexity classes are also addressed.