Comment puis-je réduire la somme des sous-ensembles à la partition?


Réponses:


19

Soit une instance de somme de sous-ensemble, où est une liste (multiset) de nombres, et est la somme cible. Laissez . Soit soit la liste formée par l' addition à .(L,B)LBS=LLS+B,2SBL

(1) S'il existe une sous-liste sommant à , alors peut être partitionné en deux parties égales: et . En effet, la première partie résume à , et la seconde à .MLBLM{2SB}LM{S+B}B+(2SB)=2S(SB)+(S+B)=2S

(2) peut être divisé en deux parties égales , alors il existe une sous - liste de sommation de . En effet, puisque et chaque partie résume à , les deux éléments appartiennent à des parties différentes. Sans perte de généralité, . Le reste des éléments dans appartiennent à et la somme de .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
Mais le problème de sous-ensemble standard utilise tous les entiers, et le problème de partition utilise uniquement des entiers non négatifs ...
gukoff

SUBSET-SUM est NP-complet même avec des entiers non négatifs, par exemple la réduction de 3SAT se retrouve avec des entiers non négatifs. De plus, il y a probablement une réduction directe de SUBSET-SUM entier à SUBSET-SUM entier non négatif.
Yuval Filmus

1
Oui, je sais, et cette réduction est très facile. Notant simplement que ce n'est pas la somme du sous-ensemble dans sa forme "par défaut". :)
gukoff

Cela fonctionnerait-il également si est ? comme , comme L{B,S-B}| {B,S-B}| =B| L| =BLL{B,SB}|{B,SB}|=B|L|=B
Curieux

1
@Issam Ce ne serait pas le cas, l'instance PARTITION aurait toujours la solution . L,{B,SB}
Yuval Filmus

1

La réponse mentionnée par @Yuval Filmus est incorrecte (elle est correcte UNIQUEMENT s'il n'y a pas d'entiers négatifs). Considérez le multiset suivant:

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

et la somme cible est . Nous savons qu'il n'y a pas de sous-ensemble. Maintenant, nous construisons l'instance pour le problème de partition. Les deux nouveaux éléments ajoutés sont et . Le multiset est maintenant: et la somme totale est de .2 σ - t = 12 σ + t = 3 { - 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 } 2022σt=12σ+t=3

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

Le problème de partition résout la réponse en donnant le sous-ensemble Ici, les 2 nouveaux éléments sont dans le même sous-ensemble (il n'y a pas d'autre moyen de partitionner la moitié de la somme). Par conséquent, ceci est un contre-exemple. La bonne réponse est la suivante:

{2,2,2,2,2}

Ajoutez un élément dont la valeur est . La somme totale du multiset est maintenant de . Résoudre le problème de partition qui donnera 2 sous-ensembles de somme . Une seule de la partition contiendra le nouvel élément. Nous choisissons l'autre partition dont la somme est et nous avons résolu le problème de sous-ensemble en le réduisant en un problème de partition. C'est ce que le lien explique.2 t t t2tσ2ttt


1
Mais, comme Yuval le dit dans un commentaire à sa réponse, la somme des sous-ensembles est NP- complète même si nous nous limitons aux entiers positifs. On peut donc supposer qu'il n'y a pas de nombres négatifs.
David Richerby

1
Oui, je suis d'accord, la somme du sous-ensemble est NP-complète même en cas d'entiers positifs. Je fournissais juste une preuve plus complète pour n'importe quel entier.
Rohit Kumar Jena

1
"Fournir simplement une preuve plus complète" et prétendre également à tort qu'une réponse existante est incorrecte.
David Richerby

1
C'est incorrect dans le sens où cela ne fonctionne pas pour les entiers négatifs. :) Peace :)
Rohit Kumar Jena

1

Voici une preuve simple:

Il est facile de voir que SET-PARTITION peut être vérifié en temps polynomial; étant donné une partition P1,P2 additionne simplement les deux et vérifie que leurs sommes sont égales, ce qui est évidemment une vérification temporelle polynomiale (car la sommation est une opération polynomiale et nous effectuons seulement |X| plusieurs sommations au maximum).

XtX=X{s2t}s=xXx

  • (SXt=xSx

    st=xS{s2t}x,
    st=xX(S{s2t})x
    S{s2t}X(S{s2t})X

  • (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

Somme de sous-ensemble:

Entrée: {a1, a2, ..., am} st M = {1..m} et ai sont des nombres entiers non négatifs et S⊆ {1..k} et Σai (i∈S) = t

Cloison:

Entrée: {a1, a2, ..., am} et S⊆ {1, · · ·, m} st Σai (i∈S) = Σaj (j∉S)

Partition Np Proof: si le prouveur fournit des partitions (P1, P2) pour le vérificateur, le vérificateur peut facilement calculer la somme de P1 et P2 et vérifier si le résultat est 0 en temps linéaire.

NP_Hard: SubsetSum ≤p PARTITION

Soit x l'entrée de SubsetSum et x = 〈a1, a2, ..., am, t〉 et Σai (i de 1 à m) = a

Cas 1: 2t> = a:

Soit f (x) = 〈a1, a2, ..., am, am + 1〉 où am + 1 = 2t − a

Nous voulons montrer que x∈SubsetSum ⇔ f (x) ∈PARTITION

donc il existe S⊆ {1, ..., m} st T = {1..m} - S et Σai (i∈T) = at

et Soit T '= {1 ... m, m + 1} - S donc Σaj (j∈T') = a-t + 2t-a = t

qui est exactement Σai (i∈S) = t et il montre f (x) ∈PARTITION

maintenant, nous allons également montrer que f (x) ∈PARTITION ⇔ x∈SubsetSum

il existe donc S⊆ {1, ..., m, m + 1} st T = {1, ..., m, m + 1} - S et Σai (i∈T) = [a + (2t-a ) -t] = t

et il montre Σai (i∈T) = Σaj (j∈S) donc m + 1∈T et S⊆ {1, · · ·, m} et Σai (i∈S) = t

donc x∈SubsetSum

Cas 2: 2t = <a :

nous pouvons vérifier la même chose, mais cette fois-ci, am + 1 est a − 2t


-3

ce lien a une bonne description des deux réductions, partition à sous-ensemble-somme et sous-ensemble-somme à partitionner. Je pense que c'est plus évident que la réponse de YUVAL . lien utile


4
Veuillez ne pas publier de réponses contenant uniquement des liens. Si le contenu du lien change ou devient indisponible, votre réponse deviendra inutile. Veuillez modifier votre réponse afin qu'elle soit utile, même si le lien n'est pas disponible (par exemple, reformuler le contenu dans vos propres mots et fournir le lien comme référence et source).
Tom van der Zanden
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.