Misalkan (L,B) adalah turunan dari jumlah subset, di mana L adalah daftar (multiset) angka, dan B adalah jumlah target. Biarkan S=∑L . Biarkan L′ menjadi daftar yang dibentuk dengan menambahkan S+B,2S−B ke L .
(1) Jika ada sublist M⊆L penjumlahan ke B , maka L′ dapat dipartisi menjadi dua bagian yang sama: M∪{2S−B} dan L∖M∪{S+B} . Memang, bagian pertama berjumlah B+(2S−B)=2S , dan yang kedua ke (S−B)+(S+B)=2S .
(2) Jika L′ dapat dibagi menjadi dua bagian yang sama P1,P2 , maka ada subdaftar L menjumlahkan untuk B . Memang, karena (S+B)+(2S−B)=3S dan masing-masing bagian berjumlah 2S , kedua elemen tersebut memiliki bagian yang berbeda. Tanpa kehilangan sifat umum, 2S−B∈P1 . Sisa elemen dalam P1 termasuk dalamL dan jumlah untukB .
Jawaban yang disebutkan oleh @Yuval Filmus salah (HANYA benar jika tidak ada bilangan bulat negatif). Pertimbangkan multiset berikut:
dan jumlah targetnya adalah . Kita tahu bahwa tidak ada himpunan bagian. Sekarang, kami membuat instance untuk masalah partisi. Dua elemen baru yang ditambahkan adalah 2 σ - t = 12 dan σ + t = 3 . Multiset sekarang: { - 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 } dan jumlah totalnya adalah 20−2 2σ−t=12 σ+t=3
Masalah partisi memecahkan jawaban memberikan subset Di sini, 2 elemen baru berada di subset yang sama (tidak ada cara lain untuk mempartisi menjadi setengah jumlah). Karenanya, ini adalah contoh balasan. Jawaban yang benar adalah sebagai berikut:
Tambahkan elemen yang nilainya . Jumlah total multiset sekarang 2 t . Selesaikan masalah partisi yang akan memberikan 2 himpunan bagian dari jumlah t . Hanya satu partisi yang akan mengandung elemen baru. Kami memilih partisi lain yang jumlahnya t dan kami telah memecahkan masalah subset dengan menguranginya menjadi masalah partisi. Inilah yang dijelaskan tautan .2t−σ 2t t t
sumber
Berikut ini adalah bukti langsung:
Sangat mudah untuk melihat bahwa SET-PARTITION dapat diverifikasi dalam waktu polinomial; diberi partisiP1,P2 hanya menjumlahkan keduanya dan memverifikasi bahwa jumlah mereka sama satu sama lain, yang jelas merupakan verifikasi waktu polinomial (karena penjumlahan adalah operasi polinomial dan kami hanya melakukan paling banyak |X| banyak penjumlahan).
Inti dari buktinya adalah dalam mengurangi SUBSETSUM menjadi PARTISI; untuk itu diberikan himpunanX dan nilai t (kueri jumlah himpunan bagian) kami membentuk himpunan X′=X∪{s−2t} di manas=∑x∈Xx . Untuk melihat bahwa ini adalah pengurangan:
(⟹ ) Menganggap terdapat beberapa S⊂X sehingga t=∑x∈Sx maka kita akan memiliki bahwa s−t=∑x∈S∪{s−2t}x,
s−t=∑x∈X′∖(S∪{s−2t})x
dan kita akan memilikiS∪{s−2t} danX′∖(S∪{s−2t}) membentuk partisiX′
(⟸ ) Misalkan ada partisi P′1,P′2 dari X′ sehingga ∑x∈P′1x=∑x∈P′2x . Perhatikan bahwa menginduksi ini partisi alami P1 dan P2 dari X sehingga WLOG kita memiliki s−2t+∑x∈P1x=∑x∈P2x
⟹s−2t+∑x∈P1x+∑x∈P1x=∑x∈P2x+∑x∈P1x=s
⟹s−2t+2∑x∈P1x=s
⟹∑x∈P1x=t
Maka dari solusit=∑x∈Sx kita dapat membentuk parition P1=S∪{s−2t} , P2=X′∖(S∪{s−2t}) dan sebaliknya dari partisi P′1,P′2 kita dapat membentuk soltuion t=∑x∈P′1∖{s−2t}x dan karenanya pemetaanf:(X,t)→X′ adalah pengurangan (karena(X,t) adalah dalam bahasa / himpunan SUBSETSUM⇔X′=f(X,t) adalah dalam bahasa / set PARTISI) dan jelas untuk melihat bahwa transformasi dilakukan dalam waktu polinomial.
sumber
Jumlah Subset:
Input: {a1, a2, ..., am} st M = {1..m} dan ai adalah bilangan bulat tidak negatif dan S⊆ {1..k} dan Σai (i∈S) = t
Partisi:
Input: {a1, a2, ..., am} dan S⊆ {1, · · ·, m} st Σai (i∈S) = Σaj (j∉S)
Partition Np Proof: jika prover menyediakan partisi (P1, P2) untuk verifier, verifier dapat dengan mudah menghitung jumlah P1 dan P2 dan memeriksa apakah hasilnya 0 dalam waktu linier.
NP_Hard: SubsetSum ≤p PARTITION
Biarkan x menjadi input dari SubsetSum dan x = 〈a1, a2, ..., am, t〉 dan Σai (i dari 1 hingga m) = a
Case1: 2t> = a:
Biarkan f (x) = 〈a1, a2, ..., am, am + 1〉 di mana + 1 = 2t − a
Kami ingin menunjukkan bahwa xSubsetSum ⇔ f (x) ∈PARTISI
jadi ada S⊆ {1, ..., m} st T = {1..m} - S dan Σai (i∈T) = at
dan Biarkan T '= {1 ... m, m + 1} - S so Σaj (j∈T') = a-t + 2t-a = t
yang persis Σai (i∈S) = t dan itu menunjukkan f (x) ∈PARTISI
sekarang Kami juga akan menunjukkan itu f (x) ARTPARTISI ⇔ x∈SubsetSum
jadi ada S⊆ {1, ..., m, m + 1} st T = {1, ..., m, m + 1} - S dan Σai (i∈T) = [a + (2t-a ) -t] = t
dan ini menunjukkan Σai (i∈T) = Σaj (j∈S) jadi m + 1∈T dan S⊆ {1, · · ·, m} dan Σai (i∈S) = t
jadi x∈SubsetSum
Kasus 2: 2t = <a :
kita bisa mengecek sama tetapi kali ini +1 adalah − 2t
sumber
tautan ini memiliki deskripsi yang baik tentang reduksi, partisi ke subset-sum dan subset-sum ke partisi. Saya pikir ini lebih jelas daripada jawaban YUVAL . tautan bermanfaat
sumber