This document discusses asymptotic notations that are used to characterize an algorithm's efficiency. It introduces Big-Oh, Big-Omega, and Theta notations. Big-Oh gives an upper bound on running time. Big-Omega gives a lower bound. Theta gives both upper and lower bounds, representing an algorithm's exact running time. Examples are provided for each notation. Time complexity is also introduced, which describes how the time to solve a problem changes with problem size. Worst-case time analysis provides an upper bound on runtime.