Many combinatorial optimization problems are NP-hard, and are therefore unlikely to have efficient algorithms. However, these problems still need to be handled in practice. A natural approach to overcome this difficulty is to settle for approximation algorithms: efficient algorithms that are guaranteed to produce near-optimal solutions. The main focus of this course is on the design of approximation algorithms for combinatorial optimization problems. While exploring algorithms for central combinatorial optimization problems, we will also focus on major approaches and techniques in algorithm design, such as LP-rounding, Primal-Dual schema, metric methods, SDP rounding and so on. We will also address the question why some problems have good approximation algorithms while other do not, via hardness of approximation, or inapproximability, proofs.
Tentative list of topics:
Combinatorial algorithms: greedy algorithms and charging schemes.
Polynomial time approximation schemes.
LP-rounding and integrality gaps; algorithms for Set Cover, Congestion Minimization, directed and undirected Multicut; flow-cut gaps.
Metric methods; approximation algorithm for Sparsest Cut.
Primal-Dual schema. Algorithms for Set Cover, Steiner Network.
Iterative rounding algorithm for Survivable Network Design.
Hardness of approximation: Set Cover, Asymmetric k-center.
SDP-rounding: Max Cut, Sparsest Cut, Expander Flows.
Unique Games conjecture and related problems.
We will not follow any specific textbook. However, Vijay Vazirani's book Approximation Algorithms is a great introduction to the area and contains many of the topics we will cover.