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

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:50PM, 180G Thomas Beckham Hall (TBH)
Instructor: Lev Reyzin, SEO 417
TA/Grader: Xing Gao, SEO 1211
Textbook: J. Kleinberg and É. Tardos, Algorithm Design, 1st edition
Instructor's Office Hours: T 9:00-9:50AM (online), F 10:00-10:50AM (SEO 417)
TA/Grader Office Hours: M 10:00-11:50AM (SEO 1211)
Piazza site: link for self sign-up

Exam Dates

Midterm Exam 1: Wednesday, October 12th, 2:00-2:50PM
Midterm Exam 2: TBA
Final Exam: Wednesday, December 7th, 1:00-3:00PM

Problem Sets

problem set 1 due 9/9/22
problem set 2 due 9/28/22
problem set 3 due 10/10/22

Lectures and Readings

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

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

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

Lecture 3 (8/26/22)
covered material: measuring algorithm complexity, efficient algorithms, asmyptotic analysis
reading: chapter 2.1, 2.2

Lecture 4 (8/29/22)
covered material: implementing Gale-Shapley, common running times
reading: chapters 2.3, 2.4

Lecture 5 (8/31/22)
covered material: priority queues, implementation with heaps
reading: chapter 2.5

Lecture 6 (9/2/22)
covered material: graph algorithms, graph connectivity, bredth-first search (BFS), depth-frst search (DFS)
reading: chapter 3

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

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

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

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

Lecture 11 (9/16/22)
covered material: cut and cycle properties of MSTs, union-find for implementing Kruskal's
reading: chapter 4.6

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

Lecture 13 (9/21/22)
covered material: proof that Huffman codes are optimal
reading: finish chapter 4.8

Lecture 14 (9/23/22)
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 15 (9/26/22)
covered material: counting inversions using divide and conquer
reading: chapter 5.3

Lecture 16 (9/28/22))
covered material: multiplying integers in subquadratic time
reading: chapter 5.5

Lecture 17 (9/30/22)
covered material: finding the closest pair of points in the plane
reading: chapter 5.4

Lecture 18 (10/3/22)
covered material: the fast Fourier transform
reading: chapter 5.6