This document provides an overview of algorithms and complexity analysis. It discusses algorithmic complexity, big-O and small-o notation, and recurrence relations. Algorithmic complexity measures the number of steps required by an algorithm to solve a problem as a function of input size. Big-O notation represents asymptotic upper bounds, while small-o ensures the bound is not tight. Recurrence relations describe functions in terms of smaller inputs, and can be solved using substitution, iteration, recursion trees, or the master method.