Come posso ridurre la somma del sottoinsieme in partizione?


Risposte:


19

Sia un'istanza della somma del sottoinsieme, in cui è un elenco (multiset) di numeri e è la somma target. Lasciate . Let essere la lista formata con l'aggiunta di a .L B S = L L S + B , 2 S - B L(L,B)LBS=LLS+B,2SBL

(1) Se esiste un elenco secondario somma a , allora può essere suddiviso in due parti uguali: e . In effetti, la prima parte somma a e la seconda a .B L M { 2 S - B } L M { S + B } B + ( 2 S - B ) = 2 S ( S - B ) + ( S + B ) = 2 SMLBLM{2SB}LM{S+B}B+(2SB)=2S(SB)+(S+B)=2S

(2) Se può essere suddivisa in due parti uguali , allora v'è una lista parziale di sommando al . Infatti, poiché e ogni parte si somma a , i due elementi appartengono a parti diverse. Senza perdita di generalità, . Il resto degli elementi in appartengono a e somma a .P 1 , P 2 L B ( S + B ) + ( 2 S - B ) = 3 S 2 S 2 S - B P 1 P 1 L BLP1,P2LB(S+B)+(2SB)=3S2S2SBP1P1LB


2
Ma il problema della somma
parziale

SUBSET-SUM è NP-completo anche con numeri interi non negativi, ad esempio la riduzione da 3SAT finisce con numeri interi non negativi. Inoltre, c'è probabilmente una riduzione diretta da SUBSET-SUM intero a SUBSET-SUM intero non negativo.
Yuval Filmus,

1
Sì, lo so, e questa riduzione è molto semplice. Solo notando che non è la somma del sottoinsieme nel suo modulo "predefinito". :)
gukoff,

Funzionerebbe anche se ÈL{B,S-B}? come| {B,S-B}| =B, come| L| =BLL{B,SB}|{B,SB}|=B|L|=B
Curioso

1
@Issam Non sarebbe, questa istanza di PARTITION avrebbe sempre la soluzione . L,{B,SB}
Yuval Filmus,

1

La risposta menzionata da @Yuval Filmus è errata (è corretta SOLO se non ci sono numeri interi negativi). Considera il seguente multiset:

{5,2,2,2,2,2}

e la somma target è . Sappiamo che non esiste un sottoinsieme. Ora costruiamo l'istanza per il problema di partizione. I due nuovi elementi aggiunti sono 2 σ - t = 12 e σ + t = 3 . Il multiset è ora: { - 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 } e la somma totale è 20 .22σt=12σ+t=3

{5,2,2,2,2,2,3,12}
20

Il problema della partizione risolve la risposta dando al sottoinsieme Qui, i 2 nuovi elementi sono nello stesso sottoinsieme (non c'è altro modo di dividere in metà della somma). Quindi, questo è un contro esempio. La risposta corretta è la seguente:

{2,2,2,2,2}

Aggiungi un elemento il cui valore è . La somma totale del multiset è ora di 2 t . Risolvi il problema della partizione che darà 2 sottogruppi di somma t . Solo una delle partizioni conterrà il nuovo elemento. Scegliamo l'altra partizione la cui somma è t e abbiamo risolto il problema del sottoinsieme riducendolo in un problema di partizione. Questo è ciò che spiega il link .2tσ2ttt


1
Ma, come dice Yuval in un commento alla sua risposta, la somma dei sottogruppi è NP-completa anche se ci limitiamo a numeri interi positivi. Quindi possiamo presumere che non ci siano numeri negativi.
David Richerby,

1
Sì, sono d'accordo, la somma del sottoinsieme è NP-completa anche in caso di numeri interi positivi. Stavo solo fornendo una prova più completa per qualsiasi numero intero.
Rohit Kumar Jena,

1
"Basta fornire una prova più completa" e anche erroneamente affermare che una risposta esistente non è corretta.
David Richerby,

1
Non è corretto nel senso che non funziona con numeri interi negativi. :) Pace :)
Rohit Kumar Jena,

1

Ecco una prova semplice:

È facile vedere che SET-PARTITION può essere verificato in tempo polinomiale; data una partizione P1,P2 basta sommare i due e verificare che le loro somme siano uguali tra loro, il che è ovviamente una verifica del tempo polinomiale (perché la somma è un'operazione polinomiale e stiamo eseguendo al massimo |X| molte sommazioni).

Il nucleo della dimostrazione sta nel ridurre SUBSETSUM a PARTITION; a tal fine, dato l'insieme X e un valore t (la query della somma del sottoinsieme) formiamo un nuovo insieme X=X{s2t} dove s=xXx . Per vedere che questa è una riduzione:

  • () supponiamo che esista qualche SX tale che t=xSx allora avremmo che

    st=xS{s2t}x,
    st=xX(S{s2t})x
    e vorremmo che S{s2t} eX(S{s2t}) formano una partizione diX

  • (P1,P2XxP1x=xP2xP1P2X

    s2t+xP1x=xP2x
    s2t+xP1x+xP1x=xP2x+xP1x=s
    s2t+2xP1x=s
    xP1x=t

t=xSxP1=S{s2t}P2=X(S{s2t})P1,P2t=xP1{s2t}xf:(X,t)X(X,t)X=f(X,t)


0

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


-3

questo link ha una buona descrizione di entrambe le riduzioni, partizione a subset-sum e subset-sum a partizione. Penso che sia più ovvio della risposta di YUVAL . link utile


4
Si prega di non pubblicare risposte solo link. Se il contenuto del link cambia o diventa non disponibile, la tua risposta diventerà inutile. Modifica la tua risposta in modo che sia utile, anche se il link non è disponibile (ad esempio, riformulando il contenuto con parole tue e fornendo il link come riferimento e fonte).
Tom van der Zanden,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.