Covers ideas surrounding approximation algorithms including a rigorous mathematical analysis of the approximation guarantees provided by these algorithms. Teaches the use of linear/integer programming formulations for common algorithmic problems and the relation between integer optimization problems and their linear programming relaxations. Introduces key mathematical concepts needed to analyze these algorithms and explores the application of algorithmic concepts to real-world problems.