Niech będzie instancją sumy podzbioru, gdzie L jest listą (multiset) liczb, a B jest sumą docelową. Niech S = Σ L . Niech L ' jest lista utworzona przez dodanie S + B , 2 S - B do L .( L , B )L.bS.= ∑ L.L.′S.+ B , 2 S.- B.L.
(1) Jeżeli istnieje podlista sumująca się do B , wówczas L ′ można podzielić na dwie równe części: M ∪ { 2 S - B } i L ∖ M ∪ { S + B } . Rzeczywiście, pierwsza część sumuje się do B + ( 2 S - B ) = 2 S , a druga do ( S - B ) + ( S + BM.⊆ L.bL.′M.∪ { 2 S.- B }L ∖ M.∪ { S+ B }B + ( 2 sek- B ) = 2 S. .( S- B ) + ( S+ B ) = 2 S.
(2) W przypadku mogą być podzielone na dwie równe części P 1 , P 2 , to nie ma podmenu L sumowania do B . Rzeczywiście, ponieważ ( S + B ) + ( 2 S - B ) = 3 S, a każda część sumuje się do 2 S , dwa elementy należą do różnych części. Bez utraty ogólności, 2 S - B ∈ P 1 . Reszta elementów w P 1 należy doL.′P.1, P2)L.b( S+ B ) + ( 2 sek−B)=3S2S2S−B∈P1P1 i suma B .L.b
Odpowiedź wymieniona przez @Yuval Filmus jest niepoprawna (jest poprawna TYLKO, jeśli nie ma ujemnych liczb całkowitych). Rozważ następujący multiset:
a docelowa suma to . Wiemy, że nie ma podzbioru. Teraz tworzymy instancję dla problemu z partycją. Dwa nowe dodane elementy to 2 σ - t = 12 i σ + t = 3 . Multiset ma teraz: { - 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 }, a całkowita suma wynosi 20 .−2 2σ−t=12 σ+t=3
Problem partycji rozwiązuje odpowiedź, podając podzbiór Tutaj 2 nowe elementy znajdują się w tym samym podzbiorze (nie ma innego sposobu podziału na połowę sumy). Jest to zatem przykład przeciwny. Prawidłowa odpowiedź jest następująca:
Dodaj element, którego wartość wynosi . Łączna suma multisetu wynosi teraz 2 t . Rozwiąż problem z partycją, który da 2 podzbiory sumy t . Tylko jedna partycja będzie zawierać nowy element. Wybieramy drugą partycję, której suma wynosi t, i rozwiązaliśmy problem podzestawu, redukując go do problemu partycji. To wyjaśnia link .2t−σ 2t t t
źródło
Oto prosty dowód:
(⟹ S⊂X t=∑x∈Sx s−t=∑x∈S∪{s−2t}x,
s−t=∑x∈X′∖(S∪{s−2t})x S∪{s−2t} X′∖(S∪{s−2t}) X′
(⟸ P′1,P′2 X′ ∑x∈P′1x=∑x∈P′2x P1 P2 X 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
źródło
Podzbiór Suma:
Dane wejściowe: {a1, a2, ..., am} st M = {1..m} i ai są nieujemnymi liczbami całkowitymi, a S⊆ {1..k} i Σai (i∈S) = t
Przegroda:
Dane wejściowe: {a1, a2, ..., am} i S⊆ {1, · · ·, m} st Σai (i∈S) = Σaj (j∉S)
Partycja N Dowód: jeśli prover zapewnia partycje (P1, P2) dla weryfikatora, weryfikator może łatwo obliczyć sumę P1 i P2 i sprawdzić, czy wynik wynosi 0 w czasie liniowym.
NP_Hard: SubsetSum ≤p PARTITION
Niech x będzie wejściem SubsetSum i x = 〈a1, a2, ..., am, t〉 i Σai (i od 1 do m) = a
Przypadek 1: 2t> = a:
Niech f (x) = 〈a1, a2, ..., am, am + 1〉 gdzie am + 1 = 2t − a
Chcemy pokazać, że x∈SubsetSum ⇔ f (x) ARTPARTITION
więc istnieją S⊆ {1, ..., m} st T = {1..m} - S i Σai (i∈T) = at
i Niech T '= {1 ... m, m + 1} - S więc Σaj (j∈T') = a-t + 2t-a = t
czyli dokładnie Σai (i∈S) = t i pokazuje f (x) ARTPARTITION
teraz Pokażemy również, że f (x) ARTPARTITION ⇔ x∈SubsetSum
więc istnieją S⊆ {1, ..., m, m + 1} st T = {1, ..., m, m + 1} - S i Σai (i∈T) = [a + (2t-a ) -t] = t
i pokazuje Σai (i∈T) = Σaj (j∈S), więc m + 1∈T i S⊆ {1, · · ·, m} i Σai (i∈S) = t
więc x∈SubsetSum
Przypadek 2: 2t = <a :
możemy to sprawdzić, ale tym razem am + 1 to − 2t
źródło
ten link ma dobry opis zarówno redukcji, podziału na sumę częściową, jak i sumy częściowej na partycję. Myślę, że jest to bardziej oczywiste niż odpowiedź YUVAL . przydatny link
źródło