CS 401 / MCS 401 - Computer Algorithms I
University of Illinois - Chicago
Spring 2017

This course will cover the important principles behind the design and analysis of computer algorithms. We will study techniques such as divide-and-conquer, dynamic programming, and greedy methods, as well as algorithms for sorting, searching, graph computations, and pattern matching. We will also discuss the theory of NP-completeness.

Basic Information

Syllabus: pdf
Time and Location: M-W-F 11:00–11:50 a.m., 007 Lecture Center Building A (LCA) 317 Burnham Hall (BH)
Instructor Contact Information: Lev Reyzin, SEO 418, (312)-413-3745
TA/Grader Contact Information: Alex Cameron, SEO 633
Textbook: J. Kleinberg and É. Tardos, Algorithm Design, 1st edition
Instructor's Office Hours: W 10:00 a.m. – 10:50 a.m., F 2:00 p.m. – 2:50 p.m.
TA's Office Hours: W 12:00 p.m. – 3:00 p.m. (in MSLC, SEO 430)

Exam Dates

Midterm Exam: Wednesday March 15, 11:00 a.m. – 11:50 a.m. (in class)
Final Exam: Thursday May 4, 10:30 a.m. – 12:30 p.m.

Problem Sets

problem set 1 (pdf), due 2/3/17
problem set 2 (pdf), due 2/24/17
problem set 3 (pdf), due 3/6/17
problem set 4 (pdf), due 3/13/17
problem set 5 (pdf), due 4/17/17
problem set 6 (pdf), due 4/28/17

Lectures and Readings

Note: lectures will have material not covered in the readings.

Lecture 1 (1/9/17)
covered material: intro to the course, overview of covered material, introduction to stable marriage problem
reading: begin chapter 1

Lecture 2 (1/11/17)
covered material: the Gale-Shapley stable marriage algorithm
reading: finish chapter 1.1

Lecture 3 (1/13/17)
covered material: finishing Gale-Shapley discussion, beginning of measuring algorithm complexity
reading: chapter 2.1

Lecture 4 (1/18/17)
covered material: asymptotic notation, properties of big-O, big-Omega, and big-Theta
reading: chapter 2.2

Lecture 5 (1/20/17)
covered material: implementing and analyzing the Gale-Shapley algorithm, common running times of algorithms
reading: chapters 2.3 and 2.4
other: problem set 1 assigned

Lecture 6 (1/23/17)
covered material: intro to graphs and graph algorithms, graph representations, graph connectivity and trees
reading: chapter 3.1, begin chapter 3.2

Lecture 7 (1/25/17)
covered material: implementing BFS and DFS with queues and stacks
reading: finish chapter 3.2 and 3.3

Lecture 8 (1/27/17)
covered material: connectivity and bipartiteness testing, digraphs
reading: chapters 3.4 - 3.6

Lecture 9 (1/30/17)
covered material: priority queues and heaps
reading: chapter 2.5

Lecture 10 (2/1/17)
covered material: introduction to greedy algorithms, interval scheduling
reading: chapter 4.1

Lecture 11 (2/3/17)
covered material: scheduling to minimize lateness, exchange arguments
reading: chapter 4.2

Lecture 12 (2/6/17)
covered material: shortest path trees and Dijkstra's algorithm, implementing with priority queues
reading: chapter 4.4

Lecture 12 (2/8/17)
covered material: the minimum spanning tree problem, Prim's and Kruskal's algorithms
reading: begin chapter 4.5

Lecture 13 (2/10/17)
covered material: Union-Find and proof of correctness and the cycle property
reading: finish chapter 4.5, chapter 4.6

Lecture 14 (2/13/17)
covered material: Huffman codes (guest lecture by Ben Fish)
reading: chapter 4.8

Lecture 15 (2/15/17)
covered material: introduction to divide and conquer via Mergesort, recurrences and the Master theorem
reading: chapters 5.1 and 5.2 and these notes on the Master theorem
other: problem set 2 assigned

Lecture 16 (2/17/17)
covered material: counting inversions
reading: chapters 5.3

Lecture 17 (2/20/17)
covered material: multiplying integers in subquadratic time, finding the closest pair of points in the plane
reading: chapters 5.4 and 5.5

Lecture 18 (2/22/17)
covered material: Strassen's algorithm for multiplying matrices, vector convolution and polynomial multiplication
reading: notes on Strassen's algorithm, begin chapter 5.6

Lecture 19 (2/24/17)
covered material: strategy for the Fast Discrete Fourier Transform, the complex roots of unity
reading: continue chapter 5.6
other: problem set 3 assigned

Lecture 20 (2/27/17)
covered material: recursive polynomial evaluation and the Fast (Discrete) Fourier Transform (FFT)
reading: finish chapter 5.6

Lecture 21 (3/1/17)
covered material: intro to dynamic programming via the Fibonacci sequence, memoization, and bottom-up recursion
reading: chapter 6.2

Lecture 22 (3/3/17)
covered material: weighted interval partitioning, introduction to least squares
reading: chapters 6.1, begin chapter 6.3

Lecture 23 (3/6/17)
covered material: segmented least squares, sequence alignment and multidimensional tables
reading: finish chapter 6.3, chapter 6.6

Lecture 24 (3/8/17)
covered material: the Bellman-Ford dynamic programming algorithm for shortest paths in graphs with negative edges
reading: chapter 6.8

Lecture 25 (3/10/17)
covered material: midterm review

Lecture 26 (3/13/17)
covered material: discussion of divide and conquer vs dynamic programming, more midterm review
other: midterm Wednesday!

Lecture 27 (3/15/17)
midterm exam: no lecture

Lecture 28 (3/17/17)
covered material: the dynamic program for subset sum
reading: chapter 6.4

Lecture 29 (3/27/17)
covered material: the max-flow problem, the Ford Fulkerson algorithm
reading: chapter 7.1

Lecture 30 (3/29/17)
covered material: the min-cut problem, proof of Ford Fulkerson via min-cut duality
reading: chapter 7.2

Lecture 31 (3/31/17)
covered material: scaling max-flow, application of max-flow to matchings
reading: chapter 7.3, begin chapter 7.5

Lecture 32 (4/3/17)
covered material: Hall's theorem via min-cut/max-flow, disjoint paths in directed graphs
reading: finish chapter 7.5, chapter 7.6

Lecture 33 (4/5/17)
covered material: circulation problems with demands
reading: chapter 7.6, chapter 7.7
other: problem set 5 assigned

Lecture 34 (4/7/17)
covered material: using circulations to solve survey design and airline scheduling problems
reading: chapter 7.8, chapter 7.9

Lecture 35 (4/10/17)
covered material: introduction to computational complexity and polynomial-time reductions
reading: chapter 8.1

Lecture 36 (4/12/17)
covered material independent set, vertex cover, and definitions of NP
reading:chapter 8.3

Lecture 37 (4/14/17)
covered material: NP completeness, assymetry of NP
reading: chapters 8.4 and 8.9

Lecture 38 (4/17/17)
covered material: SAT, 3SAT, and gadget reduction from 3SAT to independent set
reading: chapter 8.2

Lecture 39 (4/19/17)
covered material: sequencing problems: Hamiltonian path (HAMPATH) and traveling salesperson (TSP)
reading: chapter 8.5
other: problem set 6 assigned

Lecture 40 (4/21/17)
covered material: additional NP-Complete problems, space complexity, PSPACE
reading: skim chapters 8.6 - 8.8 and 8.10, chapter 9.1

Lecture 41 (4/24/17)
covered material: finding small vertex covers more efficiently, approximating vertex cover
reading:chapter 10.1 and this blog post

Lecture 42 (4/26/17)
covered material: NP-hard problems on trees, approximation algorithm for set cover
reading: chapter 10.2 and 11.3

Lecture 43 (4/28/17)
covered material: review for final
other: the final exam will be on Thursday, May 4
reading: chapter 4.7 (regarding ps.6)