Algorithms & Complexity (CS 601)

Schedule: Monday, 2-3:30 PM. Thursday, 2-3:30 PM.  

Venue: LC002

Pre-requisites: Comfort with abstraction. Basic Run-time analysis, O-notation, Recursion. Basic probability and combinatorics. Basic data structures: array, list, stack, queue. Basic graph algorithms: cycles, trees, depth-first search, breadth-first search, shortest path.

Course Content: 

Algorithms: Basic principles like induction/recursion. Divide and Conquer, Dynamic Programming, Greedy Algorithms, Bipartite Matching, Network Flow, Reductions.

Complexity: Undecidability, Polynomial-time, and the Complexity classes NP, co-NP. NP-hardness and NP-completeness.

Coping with Hardness. 

Learning Objectives: 

This is a moderate level course on Algorithms & Complexity. We will discuss techniques needed in designing and analysing efficient algorithms and data structures for computational problems. Also, we will discuss the limits of computation. After successful completion of this course, students will be able to -


Grading: