# NP reductions

```Cook’s theorem and
NP-reductions
Pasi Fränti
22.10.2013
Cook’s theorem
Theorem:
Satisfiability problem (SAT) is NP-complete
Proof:
TM ≤p SAT
Satisfiability problem
f1
f2
f3
F=(X1 X2  X3)  (X1 X2)  (X1 X3)
x1
0
0
0
0
1
1
1
1
x2
0
0
1
1
0
0
1
1
x3
0
1
0
1
0
1
0
1
f1
f2
f3
F
Non-deterministic algorithm
Satisfiability(F)
FOR i1 TO n DO
xi  Choose{0,1};
IF F(x)=1 THEN SUCCESS;
ELSE FAIL;
T(n)=O(n)  SAT  NP
Notations needed
x y  x y
x  y  x  y    y  x 
n
x
Implication
Equivalence
i
 x1    xn
All are true
x
 x1    xn
Some is true
i 1
n
i 1
i
 n

 
xi    xi     x i  x j

i 1
 i 1   i , j 1
 i j
n
n
At least one
is true

At most one
is true






Exactly one is true
Cook’s theorem:
Accept( x)  Confic  Initial Transition Final
  p  n  n s ,t   p  n  k s ,t  
Config       ai      q j  
t 1   s 1 i  0
  s 1 j 0

p n 
Cook’s theorem
Initial  q01,1  ai11,1  ai22,1  ... ainn,1  a0n1,1  ... a0pn ,1
Cook’s theorem
Transit 

t 1

  k s ,t 
s ,t
s ,t 1




q

a

a
i
i


 j 

s 1 i  0   j  0

p n  p n  m
p n  p n  m
    a
k
t 1 s 1 i  0 j  0
s ,t
i

q
   a
l
s ,t
j
r 0
s ,t 1
ir





 q sjr d r ,t 1

Cook’s theorem
Final 
p n 

s 1
qks , p n 
NP hard problems
1.
2.
3.
4.
5.
Satisfiability problem (SP)
Coloring problem (Color)
Exact cover problem (EC)
Traveling salesman problem (TSP)
Knapsack problem (KP)
Satisfiability to Coloring
Complete k-clique
False color
c1
c2
c2
…
ck
…
ak
c0
Connect to all but ci
Literals
a1
a1
a2
a2
a3
a3
…
ak
Choices for fi
aj
fi
fi
Connect to all but
those literals in fi
aj
SP to Coloring example
(X1 X2)  (X1 X3)
Empty space for notes
Knapsack to TSP
Knapsack problem
• Input: knapsack instance {2,3,5,7,11}
• Size of the knapsack S=15.
Step 1: Create one node for every item
• Input: knapsack instance {2,3,5,7,11}
• Create a node for every knapsack element.
2
7
5
3
11
Step 2: Add start and end points
• Input: knapsack instance {2,3,5,7,11}
• Add node 0 as the home.
• Add node N+1 as the turning point.
2
7
5
0
3
n+1
11
N+2 nodes needed to represent the knapsack instance
• Input: knapsack instance {2,3,5,7,11}
• Draw links from smaller nodes to bigger ones.
• Set weights according to the bigger node: w(i,j)=j.
2
7
2
7
7
7
7
5
5
0
5
n+1
5
3
3
3
11 11
11
11
11
Step 4: Create forward links for node N+1
• Input: knapsack instance {2,3,5,7,11}
• Draw links to N+1 with weights w(i,N+1)=0.
2
7
2
7
7
7
7
5
5
0
5
5
3
3
3
11 11
11
11
11
0
0
0
0
0
n+1
• Input: knapsack instance {2,3,5,7,11}
• Draw backward links from bigger to smaller nodes.
• Set weight of the link as w(j,i)=0.
0
2
7
0
0
0
0
0
5
0
0
0
0
0
0
0
0
0
3
0
0
0
0
11
n+1
Solution for KP  Solution for TSP
• KP = {3,5,7}

• TSP = 0-3-5-7-(N+1)-11-2-0 (S=15)
Visit the nodes in an increasing order !
2
7
0
7
0
0
5
0
n+1
5
0
3
3
11
Solution for TSP  Solution for KP
• TSP = 0-3-5-7-(N+1)-11-2-0

• KP = {3,5,7} (all nodes which arrival cost > 0)
Select nodes with entrance w>0 !
2
0
7
77
0
0
0
5
55
n+1
0
3
33
11
Empty space for notes
```