Week 1:
Jan 7: Introduction, Order notation, Growth of functions:
Introduction to Running time analysis [Sec 2.2]
Asymptotic notation (Big oh, Theta, Omega) and the
limit method for determining O/Theta/Omega [Sec 3.1]
Summations of arithmetic and geometric series [Appendix A]
Approximation by integrals [Appendix A]
Jan 9: Recurrences and Solution techniques
Iteration method, Substitution method, Recursion tree method,
Master method, Applications of Master method [Chapter 4].
Bounding summations: upper bound by bounding each term, and lower
bound by splitting the sum and bouding the upper half [Appendix A.2].
Week 2:
Jan 14 Divide-and-conquer method:
Merge sort and Quick sort algorithms,
Loop invariants to prove correctness of Merge and Partition functions,
Finding Min and Max of an array using 1.5n-2 comparisons,
Multiplication of two n-bit numbers: trivial method: O(n^2).
Obvious divide-and-conquer algorithm also takes O(n^2).
Next class: a better DAC algorithm.
Jan 16 O(n^{log 3}) algorithm for multiplication
of two n-bit numbers. More examples of divide-and-conquer:
Sorting networks (Ch 27), 0/1 principle, bitonic sequences,
bitonic half-cleaner, bitonic sorter, merger, sorting network.
Polynomial multiplication and FFT algorithm (Ch 30).
Week 3:
Jan 23 Selection problem of finding the k-th
smallest element of a given array, O(n) randomized algorithm for Select,
O(n) deterministic algorithm for Select, Quick overview of
linear-time sorting algorithms (Counting, Radix, Bucket).
Week 4:
Jan 28 Dynamic programming (Dr. Chandrasekaran)
Jan 30 Dynamic programming (Dr. Chandrasekaran)
Week 5:
Feb 04 Dynamic programming (Dr. Chandrasekaran)
Feb 6 Discussion of Assignment 1, Omega(n log n) lower bound for comparison-based sorting.
Week 6:
Feb 11: Review.
Feb 13: Exam 1.
Week 7:
Feb 18 Dynamic programming: knapsack problem. Activity selection problem: DP and greedy algorithm.
Feb 20 Proof techniques: induction, contradiction.
Week 8:
Feb 25 Loop invariants for proving correctness of loops.
Correctness of linear search, binary search, partition procedure.
Feb 27 Introduction to graphs. Depth-first search (DFS),
Sample run to find topological ordering of a DAG, Properties of DFS.
Week 9:
Mar 3 Correctness of topological sorting algorithm, Strongly connected components.
Mar 5 Correctness of Strongly connected components algorithm, finding bridges and cut vertices using DFS.
Week 10:
Mar 17: Review
Mar 19: Exam 2
Week 11:
Mar 24 Shortest path problem; optimal substructure property of shortest paths.
Recurrences and DP algorithms for all-pairs shortest paths.
Mar 26 Floyd-Warshall's algorithm for APSP. Sample execution.
Week 12:
Mar 31 Single source shortest paths: Bellman-Ford algorithm, proofs of correctness, DAG-shortest paths.
Apr 2 Single source shortest paths: Dijkstra's algorithm, Breadth-first search (BFS).
Week 13:
Apr 7 Minimum spanning trees; generic MST algorithm and its correctness. Implementation of Prim's and Kruskal's algorithms.
Apr 9 Union/Find Analysis, Maximum flow problem: Ford-Fulkerson's algorithm.
Week 14:
Apr 14 Proof of max-flow min-cut theorem, Extensions and applications of max-flow problem.
Apr 16 Bipartite matching problem, NP-completeness.
Week 15:
Apr 21 NP-completeness proofs: Clique, Independent set, Vertex cover,
Apr 23 Hamiltonian cycle, TSP, Subset sum (from book). Approximation algorithms for VC and TSP.
Week 16:
Apr 28 Final exam review.