6

I was wondering why 3-SAT is often chosen as the candidate problem from which one reduces from to prove the NP-completeness of another algorithm. I've seen it justified in places such as K&T by

We now show that 3-SAT $\leq_p$ Hamiltonian Cycle. Why are we reducing from 3-SAT? Essentially, faced with Hamiltonian Cycle, we really have no idea what to reduce from; it’s sufficiently different from all the problems we’ve seen so far that there’s no real basis for choosing. In such a situation, one strategy is to go back to 3-SAT, since its combinatorial structure is very basic.

(I believe also that the Super Mario NP-completeness proof uses a reduction from 3-SAT.)

However, even they admit that

Of course, this strategy guarantees at least a certain level of complexity in the reduction, since we need to encode variables and clauses in the language of graphs.

I've seen that certain cases lend themselves to reducing from other problems with simpler variables and constraints (e.g. from Hamiltonian cycle). So I'm wondering why 3-SAT is often chosen/taught as a default, given that constructing variable and clause gadgets and encoding non-conflicting constraints is not necessarily straightforward.

EDIT: The plot thickens! Here's what mathematician Robert Kleinberg has to say:

enter image description here

1 Answers1

9

You can indeed use any known NP-Hard problem as a candidate for your reduction. In my opinion, it has more to do with the fact that 3-SAT (a variant of SAT) was originally proven to be NP-Hard (see Cook–Levin theorem). Secondly, it is a good practice exercise to build reduction gadgets for 3-SAT, which often reveal some structural properties. These properties may be exploited to devise efficient algorithms. Lastly, there are many good SAT solvers available these days. By designing a similar kind of reduction in the opposite direction (to SAT), we may use a SAT solver to solve an original problem instance (possibly small ones) to acquire some insight.

Also, you may refer to this discussion as well.

codeR
  • 1,983
  • 7
  • 17