Algorithms & Complexity
The course contents include graph traversals, greedy algorithms, divide and conquer algorithms, dynamic programming, network flow, bipartite matching, circulation, NP completeness and computational intractability, approximation algorithms. Techniques on algorithm design and analysis will be developed by drawing on problems from across many areas of computer science and related fields.
Algorithms are fundamental to computer science and they lie at the core of any software system. This course will cover fundamental techniques for designing efficient computer algorithms, proving their correctness, and analyzing their performance. It will also cover several application problems that use these techniques. Students will encounter a variety of problems and techniques; the objective is to learn algorithmic foundations of computer science and acquire the ability to design correct algorithms on their own.
Lectures, lab sessions, homework assignments involving algorithmic problem solving.
The course grade is determined by the results of homework assignments, a midterm exam, and a final exam.