Lecture schedule
| Date | Lecture | References | Misc | 
|---|---|---|---|
| Lecture #1 Mon 16/01 | Introduction to the course; administrative details; algorithms for integer multiplication - what constitutes a good algorithm? [slides] | 
 | PS0 released | 
| Lecture #2 Tue 17/01 | Stable marriage problem; Gale-Shapley algorithm and examples [slides] | 
 | |
| Lecture #3 Wed 18/01 | Gale-Shapley algorithm - proof of correctness; properties of the solution and proof of optimality [slides] | 
 | |
| Tutorial #1 Fri 20/01 | Based on Problem set 0 |  | |
| Lecture #4 Mon 23/01 | Recall of asymptotic analysis; Divide-and-conquer - Karatsuba's algorithm, recurrence relations, recurrence trees, master theorem [slides] | 
 | PS1 released | 
| Lecture #5 Tue 24/01 | Order statistics - finding the \(k^{th}\) smallest element; median-of-medians - recursive solution, analyzing the recurrence using recursion trees [slides] | 
 | |
| Lecture #6 Wed 25/01 | Convolution of vectors; equivalence with polynomial multiplication; evaluating polynomials on mulitple points; FFT algorithm [slides] | 
 | |
| Lecture #7 Mon 30/01 | FFT algorithm (contd.); Closest pair of points in 2D [slides] | 
 | PS2 released | 
| Lecture #8 Tue 31/01 | Basic graph algorithms; adjacency matrices and lists; graph traversals - DFS [slides] | 
 | |
| Tutorial #2 Wed 01/02 | Discussion of Problem Sets 1 and 2 |  | |
| Mini-quiz #1 Fri 03/02 | Based on material covered in Problem sets 0, 1, 2 |  | |
| Lecture #9 Mon 06/02 | BFS; finding connected components in graphs; digraphs - classification of edges [slides] | 
 | PS3 released | 
| Lecture #10 Tue 07/02 | DFS with clocks - classification of edges; Topological ordering of DAGs [slides] | 
 | |
| Lecture #11 Wed 08/02 | Digraphs and their strongly connected components; Finding and labelling the strongly connected components of a digraph [slides] | 
 | |
| Tutorial #3 Fri 10/02 | Discussion of Problem set 3 |  | |
| Lecture #12 Mon 13/02 | Finding and labelling strongly connected components - Kosaraju-Sharir algorithm; Shortest paths in graphs - BFS [slides] | 
 | PS4 released | 
| Lecture #13 Tue 14/02 | Shortest path in unweighed graphs - BFS (contd); Shortest paths in DAGs [slides] | 
 | |
| Lecture #14 Wed 15/02 | Shortest path in graphs - Dijkstra's algorithm [slides] | 
 | |
| Tutorial #4 Fri 17/02 | Discussion of Problem set 4 |  | |
| Lecture #15 Mon 20/02 | Shortest path in graphs - Dijkstra's algorithm (contd), Bellman-Ford algorithm [slides] | 
 | |
| Quiz #1 Tue 21/02 | Based on material covered till Mon Feb 13 |  | |
| Lecture #16 Wed 22/02 | Bellman-Ford algorithm (contd) [notes] | 
 | |
| Lecture #17 Fri 24/02 | Greedy algorithms - interval scheduling [notes] | 
 | |
| Lecture #18 Mon 27/02 | Greedy algorithms - scheduling jobs to minimize delays; exchange arguments | 
 | PS5 released | 
| Lecture #19 Tue 28/02 | Greedy algorithms - scheduling jobs to minimize delays; exchange arguments; greedy vertex cover [notes] | 
 | |
| Lecture #20 Wed 01/03 | Huffman coding - optimal prefix codes and binary trees [notes] | 
 | |
| Tutorial #5 Fri 03/03 | Discussion of Problem set 5 |  | |
| Lecture #21 Mon 06/03 | Huffman coding - algorithm and proof of correctness [notes] | 
 | PS6 released | 
| Lecture #22 Tue 07/03 | Huffman coding - implementation details; Minimum spanning trees - cut property [notes] | 
 | |
| Mini-quiz #2 Fri 10/03 | Based on Problem sets 5 and 6 |  | |
| Lecture #23 Mon 13/03 | Minimum spanning trees - proof of the cut property; Boruvka's algorithm [notes] | 
 | PS7 released | 
| Lecture #24 Tue 14/03 | Prim's and Kruskal's algorithms - examples, implementation details, running time [notes] | 
 | |
| Lecture #25 Wed 15/03 | Kruskal's algorithm - amortized analysis; data structures for disjoint sets [notes] | 
 | |
| Tutorial #6 Fri 17/03 | Discussion of Problem set 7 |  | |
| Quiz #2 Tue 21/03 | Based on material covered through Problems sets 5,6,7 |  | |
| Lecture #26 Fri 24/03 | Union-by-rank with path compression; Amortized analysis - accounting method [notes] | 
 | |
| Lecture #27 Mon 27/03 | Union-by-rank with path compression - amortized analysis [notes] | 
 | |
| Lecture #28 Tue 28/03 | Dynamic programming - text segmentation [notes] | 
 | |
| Lecture #29 Wed 29/03 | Dynamic programming - text justification, edit distance [notes] | 
 | PS8 released | 
| Tutorial #7 Fri 31/03 | Discussion of Problem set 8 |  | |
| Lecture #30 Mon 03/04 | Dynamic programming - edit distance; saving space using divide-and-conquer [notes] | 
 | |
| Lecture #31 Wed 05/04 | Dynamic programming - edit distane (contd.); 0-1 Knapsack - pseudopolynomial-time algorithm [notes] | 
 | Online lecture - video link on Zulip | 
| Lecture #32 Mon 10/04 | 0-1 Knapsack - pseudopolynomial-time algorithm (contd.); Dynamic programming on trees - independent sets [notes] | 
 | |
| Lecture #33 Tue 11/04 | All Pairs Shortest Paths (APSP) - Johnson's algorithm; Dynamic programming based algorithms [notes] | 
 | |
| Lecture #34 Wed 12/04 | Floyd-Warshall algorithm; APSP and matrix multiplication [notes] | 
 | |
| Lecture #35 Mon 17/04 | APSP and matrix multiplication - Seidel's algorithm; Introduction to computational intractability [notes] | 
 | PS9 released | 
| Lecture #36 Tue 18/04 | Introduction to intractability - P and NP; poly-time solving versus poly-time verification [notes] | 
 | |
| Lecture #37 Wed 19/04 | Polynomial-time reductions - NP completeness, examples of reductions [notes] | 
 | |
| Mini-quiz #3 Fri 21/04 | Based on Problem set 8 |  | |
| Lecture #38 Mon 24/04 | NP-completeness - examples of reductions [notes] | 
 | PS10 released | 
| Lecture #39 Tue 25/04 | Beyond NP-completeness - brief overview; Wrap-up of the course |  | |
| Mini-quiz #4 Wed 26/04 | Based on Problem set 9 |  |