CS 401 / MCS 401 - Computer Algorithms I
University of Illinois - Chicago
Fall 2025


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 kocation: M-W-F 2:00–2:50pm, 180G Thomas Beckham Hall (TBH)
instructor: Lev Reyzin, SEO 417
instructor's Office Hours: Mondays 9-9:50 am, Tuesdays 8-8:50am (online)
TA/grader: Belal Mutabagani, MSLC
TA/grader office hours: Wednesdays 4-6pm
textbook: J. Kleinberg and É. Tardos, Algorithm Design, 1st edition
piazza site: please sign up via this link

Exam Dates

midterm exam 1: in-class on Friday 10/17/25
midterm exam 2: in-class on Monday 11/17/25
final exam: 1:00pm-3:00pm on Wednesday 12/10/25

Problem Sets

problem set 1, due 9/17/25
problem set 2, due 9/29/25
problem set 3, due 10/13/25
problem set 4, due 10/31/25
problem set 5, due 11/12/25
problem set 6, due 12/5/25

Lectures and Readings

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

lecture 1 (8/25/25)
covered material: intro to the course, overview of covered material, introduction to stable marriage problem
reading: preface

lecture 2 (8/27/25)
covered material: the Gale-Shapley stable marriage algorithm
reading: chapter 1.1
optional reading: chapter 1.2

lecture 3 (8/29/25)
covered material: properties of Gale-Shapely, implementing Gale-Shapley
reading: chapter 2.3
optional reading: chapter 2.4

lecture 4 (9/3/25)
covered material: measuring algorithm complexity, efficient algorithms, asymptotic analysis
reading: chapters 2.1 and 2.2

lecture 5 (9/5/25)
covered material: priority queues, implementation with heaps
reading: chapter 2.5

lecture 6 (9/8/25)
covered material: graph algorithms, graph connectivity, bredth-first search (BFS), depth-frst search (DFS)
reading: chapter 3

lecture 7 (9/10/25)
covered material: introduction to greedy algorithms, interval scheduling, "greedy stays ahead" argument
reading: chapter 4.1

lecture 8 (9/12/25)
covered material: scheduling to minimize maximum lateness, an exchange argument
reading: chapter 4.2

lecture 9 (9/15/25)
covered material: shortest path trees and Dijkstra's algorithm, implementing with priority queues
reading: chapter 4.4

lecture 10 (9/17/25)
covered material: the MST problem, Prim's and Kruskal's and Reverse-Delete algorithms
reading: chapter 4.5

lecture 11 (9/19/25)
covered material: cut and cycle properties of MSTs, Union-Find
reading: chapter 4.6

lecture 12 (9/22/25)
covered material: prefix-free codes, Huffman trees and codes
reading: chapter 4.8

lecture 13 (9/24/25)
covered material: introduction to divide and conquer, mergesort, the master theorem
reading: chapter 5.1 and this statement of the master theorem
optional reading: chapter 5.2 and these notes on the master theorem

lecture 14 (9/26/25)
covered material: Karatsuba's integer multiplication using divide and conquer
reading: chapter 5.5

lecture 15 (9/29/25)
covered material: finding the closest pair of points in the plane, counting inversions
reading: chapters 5.3 and 5.4

lecture 16 (10/1/25)
covered material: Strassen's algorithm for matrix multiplication
reading: notes on Strassen's algorithm

lecture 17 (10/3/25)
covered material: the fast Fourier transform
reading: chapter 5.6

lecture 18 (10/6/25)
covered material: intro to dynamic programming via the Fibonacci sequence
reading: chapter 6.2

lecture 19 (10/8/25)
covered material: dynamic program for weighted interval scheduling
reading: chapter 6.1

lecture 20 (10/10/25)
covered material: segmented least squares
reading: chapter 6.3

lecture 21 (10/13/25)
covered material: subset sum, knapsack
reading: chapter 6.4

lecture 22 (10/15/25)
review for midterm 1

lecture 23 (10/17/25)
midterm exam 1

lecture 24 (10/20/25)
covered material: RNA secondary structure
reading: chapter 6.5

lecture 25 (10/22/25)
covered material: sequence alignment
reading: chapter 6.6

lecture 26 (10/24/25)
covered material: the Bellman-Ford dynamic program for shortest paths in graphs with negative edges
reading: chapter 6.8

lecture 27 (10/27/25)
covered material: the max-flow problem and the Ford-Fulkerson algorithm
reading: chapter 7.1

lecture 28 (10/29/25)
covered material: min-cut problem, max-flow/min-cut theorem, correctness of Ford-Fulkerson
reading: chapter 7.2

lecture 29 (10/31/25)
covered material: choosing good augmenting paths, scaling max-flow
reading: chapter 7.3

lecture 30 (11/3/25)
covered material: bipartite matching
reading: chapter 7.5

lecture 31 (11/5/25)
covered material: Hall's theorem, disjoint paths
reading: chapter 7.6

lecture 32 (11/7/25)
covered material: circulations with demands, lower bounds
reading: chapter 7.7

lecture 33 (11/10/25)
covered material: flows for survey design, airline scheduling, and image segmentation
reading: chapters 7.8-7.10

lecture 34 (11/12/25)
covered material: flows for project selection
reading: chapter 7.11

lecture 35 (11/14/25)
review for midterm 2

lecture 36 (11/17/25)
midterm exam 2

lecture 37 (11/19/25)
covered material: introduction to computational complexity, reductions, boolean satisfiability, 3SAT
reading: chapter 8.1

lecture 38 (11/21/25)
covered material: gadget reductions, verifier definition of NP
reading: chapters 8.2, 8.3

lecture 39 (11/24/25)
covered material: NP-Completeness, the first NP-Complete problems, HAMCYCLE
reading: chapters 8.4, 8.5

Lecture 40 (12/1/25)
covered material: TSP, partitioning, coloring, and subset sum hardness
reading: chapters 8.6 – 8.8

Lecture 41 (12/3/25)
covered material: assymetry of NP, coNP
reading: chapters 8.9, 8.10

Lecture 42 (12/5/25)
covered material: final exam review