Сумма подмножества:
Ввод: {a1, a2, ..., am} st M = {1..m} и ai - неотрицательное целое число, а S⊆ {1..k} и Σai (i∈S) = t
Раздел:
Ввод: {a1, a2, ..., am} и S⊆ {1, · · ·, m} st Σai (i∈S) = Σaj (j∉S)
Partition Np Proof:
если средство проверки предоставляет разделы (P1, P2) для верификатора, верификатор может легко вычислить сумму P1 и P2 и проверить, равен ли результат 0 за линейное время.
NP_Hard: SubsetSum ≤p PARTITION
Пусть x будет входом SubsetSum и x = 〈a1, a2, ..., am, t〉 и Σai (i от 1 до m) = a
Case1: 2t> = a:
Пусть f (x) = 〈a1, a2, ..., am, am + 1〉, где am + 1 = 2t − a
Мы хотим показать, что x∈SubsetSum ⇔ f (x) ∈PARTITION
поэтому существуют S⊆ {1, ..., m} st T = {1..m} - S и Σai (i∈T) = at
и пусть T '= {1 ... m, m + 1} - S, поэтому Σaj (j∈T') = a-t + 2t-a = t
который точно Σai (i∈S) = t и показывает f (x) ∈PARTITION
Теперь мы также покажем, что f (x) ∈PARTITION ⇔ x∈SubsetSum
поэтому существуют S⊆ {1, ..., m, m + 1} st T = {1, ..., m, m + 1} - S и Σai (i∈T) = [a + (2t-a ) -t] = т
и он показывает Σai (i∈T) = Σaj (j∈S), поэтому m + 1∈T и S⊆ {1, · · ·, m} и Σai (i∈S) = t
так x∈SubsetSum
Случай 2: 2t = <a :
мы можем проверить то же самое, но только в этот раз я + 1 является -2т