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 central to computer science as they lie at the core of any software system. This course will cover fundamental techniques for designing efficient computer algorithms, analysing their performance, and proving their correctness. It will also cover various application instances that use these techniques. The objective is that students learn the principles of algorithm design in computer science in order to acquire the ability to design efficient 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.