This document provides an introduction to algorithm analysis. It discusses why algorithm analysis is important, as an inefficient program may have poor running time even if it is functionally correct. It introduces different algorithm analysis approaches like empirical, simulational, and analytical. Key concepts in algorithm analysis like worst-case, average-case, and best-case running times are explained. Different asymptotic notations like Big-O, Big-Omega, and Big-Theta that are used to describe the limiting behavior of functions are also introduced along with examples. Common algorithms like linear search and binary search are analyzed to demonstrate how to determine the time complexity of algorithms.