**Discrete Optimization [Fall 2019]**

**Prerequisites**

Basic knowledge of algorithms, linear algebra and graph theory at the bachelor level. The material in "Appendix VIII: Mathematical Background" in the book "Introduction to Algorithms" by Cormen, Leiserson, Rivest, and Stein constitutes a good basis; it actually covers more background material than we will need in the course.

**Aim of the course**

Discrete Optimization addresses structural and algorithmic questions for finding the "best" among a set of feasible solutions. Often, this set of feasible solutions is finite, such as the set of maximal matchings in a finite graph, the set of vertices of a polytope, etc. Only since around the 1960s, starting with groundbreaking work of Jack Edmonds, researchers started to realize that the quality of procedures to solve such problems should be measured in terms of the algebraic dependence of computation time on problems size. Discrete Optimization has since then evolved into a rich mathematical area that connects to many other areas in mathematics but also computer science. Throughout the course, we consider several fundamental problems from this area and develop efficient algorithms to solve them.

Specifically, we cover the following topics:

- Shortest Path Algorithms,
- Spanning Trees, Matroids and the Greedy Algorithm,
- Maximum Flows & Minimum Cuts,
- Minimum Cost Flows,
- Matchings in Graphs, and Matroid Intersection
- Integer Linear Programming & Total Unimodularity,
- Basic Computational Complexity (P vs. NP),
- Approximation Algorithms,
- Inapproximability & Approximation Schemes.

**Lecturers**

Marc Uetz (UT)

- Docent: Reinier de Zeeuw
- Docent: Tjeerd Jan Heeringa
- Docent: Marc Uetz