What it is about
You will learn fundamental techniques for the development and analysis of efficient algorithms (e.g., Divide-and-Conquer, dynamic programming, randomization, Greedy methods, amortized analysis) and apply them to central problems such as sorting, graph problems, string and sequence algorithms, as well as data structures. In the end you will be able to understand, analyze, and use classical algorithmic procedures to solve fundamental tasks.