Module 1
Basic algorithms: asymptotic notations, recurrences, greedy algorithms, divide-and-conquer algorithms, dynamic programming.
Module 2
Max-flow and min-cut: Flows, graph cuts, algorithms for computing max-flow (and min-cut), applications of max-flow and min-cut.
Module 3
Boundaries of efficient computation: what is beyond efficient computation?, NP hard and NP-completeness, reductions and equivalence of several NP-complete problems.
Module 4
Coping with NP-hardness: approximation algorithms, randomness, exponential time (better-than-brute-force) algorithms.