The analysis of algorithms through the main algorithm design paradigms. Asymptotic notation; Sums and Recurrences; Divide and Conquer; Dynamic Programming; Greedy Algorithms; Graph Algorithms; Computational Geometry; Advanced Data Structures; NP Completeness.