Skip to main content Accessibility help
  • Print publication year: 2008
  • Online publication date: June 2012

20 - Reductions and NP-Completeness


A giraffe with its long neck is a very different beast than a mouse, which is different than a snake. However, Darwin and gang observed that the first two have some key similarities, both being social, nursing their young, and having hair. The third is completely different in these ways. Studying similarities and differences between things can reveal subtle and deep understandings of their underlining nature that would not have been noticed by studying them one at a time. Sometimes things that at first appear to be completely different, when viewed in another way, turn out to be the same except for superficial, cosmetic differences. This section will teach how to use reductions to discover these similarities between different optimization problems.

Reduction P1polyP2: We say that we can reduce problem P1 to problem P2 if we can write a polynomial-time (nΘ(1)) algorithm for P1 using a supposed algorithm for p2 as a subroutine. (Note we may or may not actually have an algorithm for P2.) The standard notation for this is P1polyP2.

Why Reduce? A reduction lets us compare the time complexities and underlying structures of the two problems. Reduction is useful in providing algorithms for new problems (upper bounds), for giving evidence that there are no fast algorithms for certain problems (lower bounds), and for classifying problems according to their difficulty.