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.

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

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!