Somma sottoinsieme:
Input: {a1, a2, ..., am} st M = {1..m} e ai sono numeri interi non negativi e S⊆ {1..k} e Σai (i∈S) = t
Partizione:
Input: {a1, a2, ..., am} e S⊆ {1, · · ·, m} st Σai (i∈S) = Σaj (j∉S)
Partizione Np Proof:
se il prover fornisce una partizione (P1, P2) per il verificatore, il verificatore può facilmente calcolare la somma di P1 e P2 e verificare se il risultato è 0 in tempo lineare.
NP_Hard: SubsetSum ≤p PARTITION
Sia x l'input di SubsetSum e x = 〈a1, a2, ..., am, t〉 e Σai (i da 1 a m) = a
Caso 1: 2t> = a:
Sia f (x) = 〈a1, a2, ..., am, am + 1〉 dove am + 1 = 2t − a
Vogliamo mostrare che x∈SubsetSum ⇔ f (x) ∈PARTITION
quindi esistono S⊆ {1, ..., m} st T = {1..m} - S e Σai (i∈T) = at
e Let T '= {1 ... m, m + 1} - S così Σaj (j∈T') = a-t + 2t-a = t
che è esattamente Σai (i∈S) = t e mostra f (x) ∈PARTITION
ora mostreremo anche che f (x) ARTPARTITION ⇔ x∈SubsetSum
quindi esistono S⊆ {1, ..., m, m + 1} st T = {1, ..., m, m + 1} - S e Σai (i∈T) = [a + (2t-a ) -t] = t
e mostra Σai (i∈T) = Σaj (j∈S) quindi m + 1∈T e S⊆ {1, · · ·, m} e Σai (i∈S) = t
così x∈SubsetSum
Caso 2: 2t = <a :
possiamo controllare lo stesso ma proprio questa volta am + 1 è un − 2t