CS 231: Topics in Combinatorial Algorithms

Subhash Suri
MW 09:30-10:50
Room: Phelps 2510


Administrative Stuff

Course Description

Algorithmic thinking is at the heart of computer science. Whether we are concerned with sending messages in the Internet, understanding the structure of a social network, designing autonomous robots, measuring reliability of complex systems, or auctioning the wireless spectrum, the underlying core problem is often an algorithmic one. The problems, however, rarely come as cleanly packaged, mathematically precise questions, and so the algorithmic enterprise necessarily consists of first getting to the mathematical core of a problem, and then identifying the appropriate algorithm design technique.

The goal of this course is to expose students to this process using a variety of topics and techniques. The general theme of the course is combinatorial algorithms, which can be described loosely as those dealing with discrete structures such as graphs and networks. The course is structured around a loosely related set of techniques and topics that I consider both fundamental and great examples of theoretical elegance. You can get a high-level outline of the course content and philosophy in this (Handout) .


1. Network Flows (Lecture Notes)
2. Shortest Paths and Spanning Trees
3. Matching in Graphs (Lecture Notes)
4. Structure of Social Networks (Lecture Notes)
5. Optimizing with Linear Constraints (Lecture Notes)
6. Voting and Arrow's Impossibility Theorem.
7. Learning from Data (Lecture Notes)


Reading Assignments

1. Binary Search in Graphs by Emamjomeh-Zadeh and Kempe.
2. Distance Oracles Beyond the Thorup-Zwick Bound by Patrascu and Rodity.

Homework Assignments

1. Homework #1. Due Apr 15.
2. Homework #2. Due May 6.