This course will be about algorithm design and analysis.

In this course we will (1) introduce a few techniques regarding how to design and analyze algorithms; (2) introduce several classic algorithms for graph problems and prove their correctness; (3) introduce approximation algorithms for NP-hard optimization problems; (4) give an introduction of online algorithms and dynamic algorithms.

Many examples will be provided throughout the course to help understand how these algorithms work and how to prove their correctness and complexity.

We will also review and provide answers to many interesting interview problems, e.g., by Google and Facebook that are related to algorithms design and analysis.