This course has two main parts:

(1) Algorithm Design: In this part you will learn several classic algorithms and algorithm design ideas, including recursion, dynamic programming, linear programming and maximum flow. We will also introduce many fundemental computer science problems, and learn to design algorithms for solving these problems.

(2) Algorithm Analysis: In this part you will learn how to analyze the complexity and prove the correctness of algorithms. By learning analysis showing how classic algorithms work, you will gain basic knowledge on writing analysis/proofs.

Topics covered in this course includes:
•Complexity, Proofs
•Recursion, Dynamic Programming, Greedy Algorithms
•Linear Programming and Maximum Flow
•Minimum Spanning Tree, Shortest Path,
•Matching, Vertex Cover and Independent Set
•Online Algorithms and Randomized Algorithms

Additionally, we will provide many interview problems that are related to algorithms, via which you can improve your interview skills.