Algorithms and Complexity
General information
Course Number : CS 601
Instructor : Mrinal Kumar
Email : first name AT cse DOT iitb DOT ac DOT in
Lectures: Monday and Thursday 2pm-3:30pm
Office hours: Monday 1pm-2pm, CC 308
Teaching assistants
-
Roshan Raj (194054001@iitb.ac.in)
-
Kaartik Bhushan (194050006@iitb.ac.in)
-
Ayush Tripathi (213050040@iitb.ac.in)
-
Subodh Latkar (subodhlatkar@cse.iitb.ac.in)
-
Sourabh Patidar (213050055@iitb.ac.in)
Office hours for TAs: Thursdays 1pm-2pm, in Meeting Room 321 in CC Building.
Logistics
The lectures/office hours will be in person, and we will use Moodle for announcements and discussions. An MS Teams page has been set up by the TAs and details shared on Moodle. The page can be used for discussions.
Grading
Grades will be based on a mid-sem (25%), a final (40%), two in-class quizzes (30%) and class participation (5%).
There will be a few problem sets through the course that will not be graded (but are highly recommended).
Description
This is a fairly standard first course aimed at studying the basic principles of algorithm design and a short introduction to computational complexity. The course is open for CS Masters/PhD students, and is NOT recommended for anybody who has done or will do CS218/CS213/CS218 minor/CS213 minor due to significant overlap.
I will assume some familiarity with the material in a typical undergraduate class on data structures and algorithms. The course would be largely mathematical, and will involve design of algorithms as well as formal proofs of correctness and bounds on performance of such algorithms.
We will see some of the algorithm design paradigms/techniques and their applications to design algorithms for various computational problems. We will also discuss the notion of computational hardness and see some of the strategies for coping with computational hardness. We will also spend a few lectures looking at the role of randomness in algorithm design.
References
We will follow the textbooks by Kleinberg and Tardos and the one by Cormen et al. for a large part of the course. Both these books contain a fairly large number of exercises and I highly encourage you to check them out.
Schedule
-
Jul 28 (Lec 01): Administrivia and getting started.
-
Aug 01 (Lec 02): Binary search, square root of an integer, fast integer multiplication.
-
Aug 04 (Lec 03): Fast integer multiplication contd, fast polynomial multiplication (FFT).
-
Aug 08 (Lec 04): Fast polynomial multiplication (FFT) contd.
-
Aug 11 (Lec 05): Dynamic programming intro, subset sum.
-
Aug 15 : No lecture (Independence day).
-
Aug 18 (Lec 06): Knapsack, graphs intro, Dijkstra's single source shortest path algorithm.
-
Aug 22 (Lec 07): Discussion of problem sets 1 and 2
-
Aug 25 (Lec 08): Bellman-Ford's algorithm.
-
Aug 29 (Lec 09): Quiz 1, Bellman-Ford's algorithm contd.
-
Sep 01 (Lec 10): Greedy algorithms: minimum spanning tree.
-
Sep 05 (Lec 11): Interval scheduling.
-
Sep 08 (Lec 12): Flows and cuts.
-
Sep 12 (Lec 13): Flows and cuts contd.
-
Sep 15: No lecture (midsem week)
-
Sep 19: No lecture (midsem week)
-
Sep 22 (Lec 14): Flows and cuts contd.
-
Sep 26 : Class cancelled.
-
Sep 29 (Lec 15): Flows and cuts contd, applications of max-flow, min-cut theorem.
-
Oct 03 (Lec 16): Applications of max-flow min-cut contd, Finger printing.
-
Oct 06 (Lec 17): Polynomial identity testing., Randomized quick sort.
-
Oct 10 (Lec 18): Computational hardness.
-
Oct 13 (Lec 19): Computational hardness contd.
-
Oct 17 (Lec 20): More reductions.
-
Oct 20 (Lec 21): Quiz 2 and discussions.
-
Oct 24 : No lecture (Institute Holiday) .
-
Oct 27 (Lec 22): Coping with NP hardness - 1.
-
Oct 31 (Lec 23): Coping with NP hardness - 2.
-
Nov 03 (Lec 24): Linear Programming (guest lecture by Prof. Rohit Gurjar).
-
Nov 07 (Lec 25): Linear Programming (guest lecture by Prof. Rohit Gurjar).