Konstantin Makarychev

Spring 2017, MW 11:00-12:20, Room Tech F281

Web: Official course web page @ Northwestern


This course studies approximation algorithms – algorithms that are used for solving hard optimization problems. Such algorithms find approximate (slightly suboptimal) solutions to optimization problems in polynomial time. Unlike heuristics, approximation algorithms have provable performance guarantees: they have bounds on the running time and on the quality of the obtained solutions. In this course, we will introduce various algorithmic techniques used for solving optimization problems such as greedy algorithms, local search, dynamic programming, linear programming (LP), semidefinite programming (SDP), LP duality, randomized rounding, and primal-dual analysis.


The course assumes background in basic probability theory and discrete mathematics. Key mathematical concepts will be reviewed before they are used.


Recommended texts

• “Approximation Algorithms” by Vijay Vazirani.

• “The Design of Approximation Algorithms” by David Williamson and David Shmoys. A copy of this book is available online (



1. Monday, April 10: Problem Set #1 due Wednesday, April 19,


There will be 4 homework and no exam.



  1.  Monday, March 22: Introduction to Approximation Algorithms. Travel Salesperson Problem (the Christofides 3/2-approximation algorithm). Set Cover (log n approximation).
  2. Wednesday, March 29: Knapsack (2 approximation and PTAS).
  3.  Monday, April 3: Bin Packing (2 approximation and PTAS). Makespan Scheduling on identical machines (4/3 approximation and PTAS).
  4. Wednesday, April 5: Scheduling with precedence constraints (Graham's 2-approximation algorithm). Clustering. k-center (2 approximation). k-means. Lloyd’s algorithm.
  5. Monday, April 10: Review of previous lectures. k-means++ (O(log k) approximation).
  6. Wednesday, April 12: k-means++ (O(log k) approximation).
  7. Monday, April 17: Local Search. k-median (5 approximation).