CS60007 Algorithm Design and Analysis


Instructor: Swagato Sanyal.

Teaching Assistants: Ayan Chandra, Atrayee Majumder, Subhrangshu Mandal.

Course overview: This is a graduate course in algorithms. Familiarity with asymptotic notations, basic algorithms (eg. various sorting algorithms) and basic data structures will be assumed. The emphasis will be on the use of mathematical formalism and abstraction in the study of algorithms, formally arguing correctness of algorithms and deriving bounds on their runtime. Following is an outline of the syllabus: Classes: Venue: NC334. Timings: Monday (12:00-12:55), Tuesday (10:00-11:55), Thursday (08:00-08:55)

Grading: Assignments - 25%, Midterm - 30%, Final - 45%

Plagiarism policy: In the event of any evidence of plagiarism being detected in the submitted assignment solution or exam script of any student, 0 score will be awarded to the respective assignment or exam, and a 10% penalty will be incurred.

Click here to join the course Google group.

Tutorials

Tutorial 1

Tutorial 2

Tutorial 3

Tutorial 4

Assignments

Assignment 1

Assignment 2

Assignment 3

Assignment 4

Lectures:

Lectures Date Supplemetary Material Reference Reading
1. Greedy algorithms: interval scheduling 18/07/19 -- Chapters on Greedy Algorithms from CLRS and KT books, chapter on Minimum Spanning Trees in CLRS.
2. Principle of mathematical induction 22/07/19 --
3. Mathematical induction (contd.), concluding interval scheduling. 23/07/19 --
4. Prim's algorithm: proof of correctness 25/07/19 Proof of correctness of Prim's algorithm.
5. Prim's algorithm: runtime 29/07/19 --
6. Kruskal's Algorithm, Dijkstra's single source shortest path algorithm 30/07/19 Proof of Correctness of Kruskal's Algorithm(write-up by Prof. Palash Dey).
7. Dijkstra's algorithm 05/08/2019 --
8. Dynamic programming: Weighted Interval Scheduling, Bellman-Ford algorithm 06/08/2019 -- Chapters on Dynamic Programming in CLRS and KT books.
9. Dynamic programming: Bellman-Ford algorithm 08/08/2019 --
10. All pairs shortest paths: Johnson's algorithm, Network flow: Ford-Fulkerson algorithm 13/08/2019 -- Chapter on all pairs shortest paths in CLRS book,
Tim Roughgarden's lecture note 1.
11. Ford-Fulkerson algorithm: termination, optimality. s-t cut and mincut. 19/08/2019 -- Tim Roughgarden's lecture note 2,
An example where Ford-Fulkerson does not terminate.
12. Maxflow mincut theorem, correctness of Ford-Fulkerson algorithm, Edmonds-Karp algorithm. 20/08/2019 --
13&14. The push-relabel algorithm 26/08/2019 and 29/08/2019 -- Tim Roughgarden's lecture note 3
15. Applications of flow: bipartite matching, Hall's theorem 31/08/2019 -- Tim Roughgarden's lecture note 4
16. NP-completeness: decision problems, polynomial time reduction. 02/09/2019 -- Chapter on NP-completeness in CLRS book.
17. NP-completeness: polynomial time verification, classes P and NP, Cook-Levin Theorem, Reduction of 3SAT to vertex cover. 03/09/2019 -- 3SAT to vertex cover reduction
18. Finishing 3SAT to vertex cover reduction. 0-1 integer linear programming. 09/09/2019 --
19. Reduction of subset-sum from 3SAT. 01/10/2019 -- Chapter on NP-completeness in CLRS book.
20. Finishing up subset-sum reduction, Knapsack problem. Randomized algorithms: max-cut 02/10/2019 --
21. Randomized algorithms: Matrix product verification. 04/10/2019 -- Lecture note from cmu
22. Randomized algorithms: min-cut. 14/10/2019 -- Chapter on randomized algorithms in Kleinberg-Tardos
23. Using Karger's algorithm to bound the number of minimum cuts, 2-approximation algorithm of vertex cover. 15/10/2019 -- Chapter on approximation algorithm in CLRS and Kleinberg-Tardos.
24. A 2-approximation algorithm for load-balancing. 17/10/2019 -- Chapter on approximation algorithm in Kleinberg-Tardos book.
25. A 3/2-approximation algorithm for load-balancing. 21/10/2019 --
26. A PTAS for subset-sum 22/10/2019 -- Chapter on approximation algorithms in CLRS book.
27. Inapproximability of general TSP 24/10/2019 --
28. A 2-approximation algorithm for metric TSP 28/10/2019 --
29. Computational geometry: Testing if two line segments intersect, Checking existence of an intersecting pair of line segments in a collection of line segments by the sweeping line method. 29/10/2019 -- Chapter on computational geometry in CLRS book.
30. Graham's scan 04/11/2019 --
31. Finding closest pair in O(n log n) time. 05/11/2019 --

References:

  1. Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein.
  2. Algorithm Design by Jon Kleinberg, Eva Tardos.
  3. Algorithms by Dasgupta, Papadimitriou, and Vazirani.
  4. Approximation Algorithms by Vijay V. Vazirani.
  5. Randomized Algorithms by Rajeev Motwani, Prabhakar Raghavan.
  6. Probability and Computing by Michael Mitzenmacher and Eli Upfal.