Room: Phelps 2510
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) .