This document provides an overview of complexity theory, including: - Asymptotic notation like Big-O, Big-Omega, and Big-Theta for analyzing algorithm runtime. - Deterministic algorithms that always produce the same output for a given input. - Non-deterministic algorithms that may produce different outputs for the same input. - The classes P and NP, where P contains problems solvable in polynomial time and NP contains problems verifiable in polynomial time. - NP-complete problems, the hardest problems in NP, like 3-Satisfiability and the Hamiltonian Cycle problem.