MCS 401 - Computer Algorithms I
University of Illinois - Chicago
Fall 2019


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., 180F Thomas Beckham Hall (TBH)
Instructor Contact Information: Lev Reyzin, SEO 418, (312)-413-3745
TA/Grader Contact Information: Stoyan Dimitrov
Textbook: J. Kleinberg and É. Tardos, Algorithm Design, 1st edition
Instructor's Office Hours: W 10:00-10:50 AM, F 11:00-11:50 AM
TA Office Hours: W 3:00-5:00 PM (in MSLC)

Exam Dates

Midterm Exam 1: Friday, October 11th, 2:00-2:50 PM in TBH 180F
Midterm Exam 2: Wednesday, November 13th, 2:00-2:50 PM in TBH 180F
Final Exam: Wednesday December 11th, 1:00-3:00 PM in TBH 180F

Problem Sets

problem set 1 due 9/13/19
problem set 2 due 9/30/19
problem set 3 due 10/9/19
problem set 4 due 10/28/19
problem set 5 due 11/11/19

Lectures and Readings

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

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

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

Lecture 3 (8/30/19)
covered material: measuring algorithm complexity, asymptotic notation
reading: chapters 2.1 and 2.2
other: problem set 1 assigned

Lecture 4 (9/4/19)
covered material: implementing and analyzing the Gale-Shapley algorithm, common running times of algorithms
reading: chapters 2.3, 2.4

Lecture 5 (9/6/19)
covered material: graph algorithms, graph connectivity, bredth-first search (BFS), depth-frst search (DFS)
reading: chapters 3.1 - 3.3

Lecture 6 (9/10/19)
covered material: priority queues, assigned reading on graphs
reading: chapters 2.5, 3.4 - 3.6

Lecture 7 (9/11/19)
covered material: introduction to greedy algorithms, interval scheduling
reading: chapter 4.1

Lecture 8 (9/13/19)
covered material: intro to scheduling to minimize lateness
reading: begin chapter 4.2

Lecture 9 (9/16/19)
covered material: an exchange argument
reading: finish chapter 4.2

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

Lecture 11 (9/20/19)
covered material: the MST problem, Prim's and Kruskal's algorithms, cut and cycle properties, Union-Find
reading: chapters 4.5 and 4.6
other: problem set 2 assigned

Lecture 12 (9/23/19)
covered material: cut and cycle properties of MSTs, prefix-free codes
reading: chapter 4.8

Lecture 13 (9/25/19)
covered material: finish Huffman codes, introduction to divide and conquer via Mergesort, recurrences
reading: chapters 5.1 and 5.2

Lecture 14 (9/27/19)
covered material: using Master theorem, counting inversions, multiplying integers in subquadratic time
reading: chapters 5.3 and 5.5 and statement of the Master theorem
optional reading: notes on the Master theorem

Lecture 15 (9/30/19)
covered material: finding the closest pair of points in the plane (guest lecture by Stoyan Dimitrov)
reading: notes on Strassen's algorithm, chapter 5.4

Lecture 16 (10/2/19)
covered material: vector convolutions
reading: begin chapter 5.6
other: problem set 3 assigned

Lecture 17 (10/4/19)
covered material: the Fast Fourier Transform
reading: finish chapter 5.6

Lecture 18 (10/7/19)
covered material: intro to dynamic programming via the Fibonacci sequence
reading: chapter 6.2

Lecture 19 (10/9/19)
covered material: homework and midterm review (guest lecture by Patrick Palka)

Lecture 20 (10/11/19)
midterm 1: no lecture

Lecture 21 (10/14/19)
covered material: weighted interval partitioning, introduction to least squares regression
reading: chapter 6.1, begin chapter 6.3

Lecture 22 (10/16/19)
covered material: segmented least squares, sequence alignment
reading: chapters 6.3 and 6.6

Lecture 23 (10/18/19)
covered material: went over midterm 1
other: problem set 4 assigned

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

Lecture 25 (10/23/19)
covered material: the dynamic program for subset sum
reading: chapter 6.4

Lecture 26 (10/25/19)
covered material: the max-flow problem, the Ford Fulkerson algorithm
reading: chapter 7.1

Lecture 27 (10/28/19)
covered material: went over dynamic programming problems (problem set 4)

Lecture 28 (10/30/19)
covered material: the min-cut problem, proof of Ford Fulkerson via min-cut duality, scaling max-flow
reading: chapter 7.2
optional reading: chapter 7.3

Lecture 29 (11/1/19)
covered material: using max-flows to solve the perfect matching problem, disjoint paths
reading: chapters 7.5 and 7.6
other: problem set 5 assigned

Lecture 30 (11/4/19)
covered material: circulations with demands (and lower bounds)
reading: chapters 7.7

Lecture 31 (11/6/19)
covered material: flows for survey design, airline scheduling, and image segmentation
reading: chapter 7.8 - 7.10

Lecture 32 (11/8/19)
covered material: midterm 2 review

Lecture 33 (11/11/19)
covered material: midterm 2 review, condinued
other: miterm 2 on Wednesday!

Lecture 34 (11/13/19)
midterm exam: no lecture

Lecture 35 (11/15/19)
covered material: introduction to computational complexity, review of reductions, verifiers
reading: chapter 8.1, begin chapter 8.3