## TL;DR

Big O describes upper bound of algorithm complexity as input size n grows. Common classes: O(1) constant, O(log n) logarithmic, O(n) linear, O(n log n) linearithmic, O(n²) quadratic, O(2ⁿ) exponential.

## Core Explanation

Related: Ω (lower bound), Θ (tight bound). Amortized analysis: average over sequence of operations (e.g., dynamic array append is amortized O(1)). Master theorem solves divide-and-conquer recurrences T(n)=aT(n/b)+f(n). Space complexity matters too — quicksort is O(log n) space (recursion stack), mergesort is O(n) (auxiliary array).

## Further Reading

- [Introduction to Algorithms (CLRS)](undefined)