This course develops foundational ideas and algorithmic techniques for efficiently solving combinatorial optimization problems. The main emphasis is on packing and covering problems and on discrete fair division, while continually connecting recent advances with classical results.
Students will encounter linear programming, discrepancy, competitive and probabilistic analysis, graphs and hypergraphs, matroids, and topological methods. The course is designed for students who want both a rigorous toolkit and a view of current research directions.