MCS 401 - Computer Algorithms I
University of Illinois - Chicago
Fall 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 2:00–2:50 p.m., 304 Burnham Hall (BH) 180F Thomas Beckham Hall (TBH)
Instructor Contact Information: Lev Reyzin, SEO 418, (312)-413-3745
TA/Grader Contact Information: Mano Vikash Janardhanan, Mohsen Aliabadi, and Kaushik Kompella
Textbook: J. Kleinberg and É. Tardos, Algorithm Design, 1st edition
Instructor's Office Hours: T 2:30-3:20pm, F 1:00-1:50pm
TA's Office Hours: M 8:00-9:00am (Mohsen), T 8:00-11:00am (Mano), R 3:00-5:00pm (Kaushik), F 4:00-6:00pm (Mohsen) in SEO 430

Exam Dates

Midterm Exam 1: Monday, October 16, 2:00-2:50 p.m. (in class)
Midterm Exam 2: Monday, November 20, 2:00-2:50 p.m. (in class)
Final Exam: Wednesday, December 13, 1:00-3:00 p.m.

Problem Sets

problem set 1, due 9/18/17
problem set 2, due 10/2/17
problem set 3, due 10/13/17
problem set 4, due 11/8/17
problem set 5, due 11/17/17

Lectures and Readings

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

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

Lecture 2 (8/30/17)
covered material: the Gale-Shapley stable marriage algorithm
reading: finish chapter 1.1
optional reading: chapter 1.2

Lecture 3 (9/1/17)
covered material: measuring algorithm complexity, asymptotic notation
reading: chapter 2.1 and 2.2

Lecture 4 (9/6/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 5 (9/8/17)
covered material: intro to graphs and graph algorithms, graph representations, graph connectivity and trees
reading: chapter 3.1, begin chapter 3.2

Lecture 6 (9/11/17)
covered material: implementing BFS and DFS with queues and stacks, priority gueues and heaps
reading: finish chapter 3.2 and 3.3, chapter 2.5

Lecture 7 (9/13/17)
covered material: connectivity and bipartiteness testing, digraphs, DAGs
reading: chapters 3.4 - 3.6

Lecture 8 (9/15/17)
covered material: introduction to greedy algorithms, interval scheduling
reading: chapter 4.1

Lecture 9 (9/18/17)
covered material: scheduling to minimize lateness, exchange arguments
reading: chapter 4.2

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

Lecture 11 (9/22/17)
covered material: the minimum spanning tree problem, Prim's and Kruskal's algorithms
reading: begin chapter 4.5
other: problem set 2 assigned

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

Lecture 13 (9/27/17)
covered material: MST for clustering, Huffman codes
reading: chapters 4.7 and 4.8

Lecture 14 (9/29/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

Lecture 15 (10/2/17)
covered material: counting inversions, multiplying integers in subquadratic time
reading: chapters 5.3 and 5.5
other: problem set 3 assigned and midterm 1 date announced

Lecture 16 (10/4/17)
covered material: finding the closest pair of points in the plane
reading: chapter 5.4

Lecture 17 (10/6/17)
covered material: strategy for the Fast Discrete Fourier Transform, the complex roots of unity
reading: continue chapter 5.6

Lecture 18 (10/9/17)
covered material: recursive polynomial evaluation and the Fast (Discrete) Fourier Transform (FFT)
reading: finish chapter 5.6

Lecture 19 (10/11/17)
covered material: Strassen's algorithm for multiplying matrices
reading: notes on Strassen's algorithm

Lecture 20 (10/13/17)
covered material: midterm review (guest lecture by Shelby Heinecke)
other: midterm Monday!

Lecture 21 (10/16/17)
midterm exam: no lecture

Lecture 22 (10/18/17)
covered material: intro to dynamic programming via max-weight I.S. on paths (guest lecture by Shelby Heinecke)
reading: chapter 6.2

Lecture 23 (10/20/17)
covered material: dynamic programming via the Fibonacci sequence, wieghted interval partitioning
reading: chapter 6.1

Lecture 24 (10/23/17)
covered material: segmented least squares
reading: chapter 6.3

Lecture 25 (10/25/17)
covered material: went over midterm 1

Lecture 26 (10/27/17)
covered material: sequence alignment and multidimensional tables
reading: chpater 6.6
other: problem set 4 assigned

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

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

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

Lecture 30 (11/6/17)
covered material: the min-cut problem, proof of Ford Fulkerson via min-cut duality
reading: chapters 7.2 and 7.5

Lecture 31 (11/8/17)
covered material: disjoint paths in directed graphs, circulation problems with demands
reading: chapter 7.6 and 7.7
other: problem set 5 assigned

Lecture 32 (11/10/17)
covered material: using circulations to solve survey design and airline scheduling problems
reading: chapters 7.8 and 7.9