This document discusses algorithms and their analysis. It begins by defining an algorithm as a sequence of unambiguous instructions to solve a problem in a finite amount of time. Key aspects of algorithms that are analyzed include correctness, time efficiency, space efficiency, and optimality. Common approaches to analysis involve theoretical analysis to determine asymptotic runtime, and empirical analysis. Methods for analyzing time efficiency include identifying the basic operation, determining costs for best, average, and worst cases, and deriving formulas for the number of times the basic operation is performed. Asymptotic analysis focuses on identifying the growth rate or order of an algorithm's runtime. Examples are provided to demonstrate analyzing simple algorithms using summation formulas. The document also discusses analyzing recursive algorithms.