This document provides an overview of complexity theory concepts including:
- Asymptotic notation like Big-O, Big-Omega, and Big-Theta for analyzing algorithm runtime.
- The difference between deterministic and non-deterministic algorithms, with deterministic algorithms always providing the same output for a given input, and non-deterministic algorithms possibly providing different outputs.
- The classes P and NP, with P containing problems solvable in polynomial time by a deterministic algorithm, and NP containing problems verifiable in polynomial time by a non-deterministic algorithm.
- NP-complete problems being the hardest problems in NP, with examples like the knapsack problem, Hamiltonian path problem, and Boolean satisfiability problem.