This book is a thorough overview of the primary techniques and models used in the mathematical analysis of algorithms. The first half of the book draws upon classical mathematical material from discrete mathematics, elementary real analysis, and combinatorics; the second half discusses properties of discrete structures and covers the analysis of a variety of classical sorting, searching, and string processing algorithms.