This document provides an introduction to analyzing algorithms. It discusses that algorithm analysis involves assessing correctness, time efficiency, space efficiency, and optimality. Theoretical analysis determines time efficiency by calculating the number of basic operations as a function of input size, while empirical analysis involves measuring actual runtimes. Algorithms can be analyzed in terms of their best-case, worst-case, and average-case time efficiencies. Asymptotic analysis compares algorithms' growth rates to determine asymptotic time complexity. Common complexity classes and examples of analyzing non-recursive algorithms are also presented.