Motivation:
It is a well-known fact of life that most ``interesting'' problems in computer science and engineering are NP-complete or NP-hard and are, therefore, unlikely to find efficient solutions. But just because a problem has been established to be NP-complete, it does not mean that the problem goes away: indeed, we have to develop strategies to cope with the situatation and to make the best of it!
The main purpose of this course is to equip students with: (1) the necessary tools to establish that a problem is NP-complete, and (2) techniques to cope with NP-completeness. Specifically, many startegies yielding approximate solutions to NP-complete problems will be presented. These include: randomization, local search, along with greedy strategies such as first-fit, best-fit etc.
The emphasis will be on those concepts and techniques that are necessary for thoroughly understanding and applying the theory.
Course Description: Topics to be covered follow:
[1.] The classes P and NP;
[2.] Polynomial-time reduction between problems;
[3.] Cook's theorem and Karp's list of classic NP-complete problems;
[4.] Proving NP-completeness results;
[5.] Using NP-completeness to analyze problems;
[6.] NP-hardness;
[7.] Coping with NP-completeness:
performance guarantee for approximation algorithms;
randomized algorithms;
greedy approximation algorithms;
hard approximation problems
[8.] Beyond NP-completeness - an introduction to Computability Theory
The course will be run as an algorithm design course. The participants should expect to apply results and techniques discussed in class to specific problems originating in, and having applications to, a large number of problems in computer science. It is also expected that the students will present their results to the class in both oral and written form.
Prerequisites: CS483 or equivalent and a good dose of common sense.
Text: M. Garey and D. Johnson, Computers and Intractability - A Guide to the Theory of NP-completeness, Freeman, San Francisco, 1979.