Sea una instancia de suma de subconjuntos, donde L es una lista (conjunto múltiple) de números y B es la suma objetivo. Deje que S = Σ L . Let L ' ser la lista formada por la adición de S + B , 2 S - B a L .(L,B)LBS=∑LL′S+B,2S−BL
(1) Si hay una sublista suma a B , entonces L ' se puede dividir en dos partes iguales: M ∪ { 2 S - B } y L ∖ M ∪ { S + B } . De hecho, la primera parte suma a B + ( 2 S - B ) = 2 S , y la segunda a ( S - B ) + ( S + BM⊆LBL′M∪{2S−B}L∖M∪{S+B}B+(2S−B)=2S .(S−B)+(S+B)=2S
(2) Si se puede dividir en dos partes iguales P 1 , P 2 , entonces hay una lista secundaria de L sumando a B . De hecho, como ( S + B ) + ( 2 S - B ) = 3 S y cada parte suma a 2 S , los dos elementos pertenecen a partes diferentes. Sin pérdida de generalidad, 2 S - B ∈ P 1 . El resto de los elementos en P 1 pertenecen aL′P1,P2LB(S+B)+(2S−B)=3S2S2S−B∈P1P1 y la suma de B .Lsi
La respuesta mencionada por @Yuval Filmus es incorrecta (es correcta SOLAMENTE si no hay enteros negativos). Considere el siguiente conjunto múltiple:
y la suma objetivo es . Sabemos que no hay subconjunto. Ahora, construimos la instancia para el problema de partición. Los dos nuevos elementos agregados son 2 σ - t = 12 y σ + t = 3 . El conjunto múltiple ahora es: { - 5 , 2 , 2 , 2 , 2 , 2 , 3 , 12 } y la suma total es 20 .- 2 2σ- t = 12 σ+t=3
El problema de partición resuelve la respuesta dando el subconjunto
Agregue un elemento cuyo valor sea . La suma total del multiset ahora es 22t−σ . Resuelva el problema de partición que dará 2 subconjuntos de suma t . Solo una de las particiones contendrá el nuevo elemento. Elegimos la otra partición cuya suma es t y hemos resuelto el problema del subconjunto reduciéndolo a un problema de partición. Esto es lo queexplicaelenlace.2t t t
fuente
Aquí hay una prueba directa:
Es fácil ver que SET-PARTITION puede verificarse en tiempo polinómico; dada una particiónP1,P2 solo suma los dos y verifica que sus sumas sean iguales entre sí, lo que obviamente es una verificación de tiempo polinomial (porque la suma es una operación polinómica y solo estamos realizando a lo sumo |X| muchas sumas).
El núcleo de la prueba está en reducir SUBSETSUM a PARTITION; para ese fin dado el conjuntoX y un valor t (la consulta de suma de subconjuntos) formamos un nuevo conjunto X′=X∪{s−2t} donde s=∑x∈Xx . Para ver que esto es una reducción:
(⟹ 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}) form a partition of X′
(⟸ ) Suppose that there is a partition P′1,P′2 of X′ such that ∑x∈P′1x=∑x∈P′2x . Notice that this induces a natural partition P1 and P2 of X such that WLOG we have that 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
Hence from a solutiont=∑x∈Sx we can form a parition P1=S∪{s−2t} , P2=X′∖(S∪{s−2t}) and conversely from a partition P′1,P′2 we can form a soltuion t=∑x∈P′1∖{s−2t}x and therefore the mapping f:(X,t)→X′ is a reduction (because (X,t) is in the language/set SUBSETSUM ⇔X′=f(X,t) is in the language/set PARTITION) and it is clear to see that the transformation was done in polynomial time.
fuente
Subset Sum:
Input: {a1,a2,...,am} s.t M={1..m} and ai are non negative integer and S⊆{1..k} and Σai(i∈S) = t
Partition:
Input: {a1,a2,...,am} and S⊆ {1,· · ·,m} s.t Σai(i∈S) = Σaj(j∉S)
Partition Np Proof: if prover provides a partitions(P1,P2) for verifier, verifier can easily calculate the sum of P1 and P2 and check if the result is 0 in linear time.
NP_Hard: SubsetSum ≤p PARTITION
Let x be input of SubsetSum and x=〈a1,a2,...,am,t〉 and Σai(i from 1 to m) = a
Case1: 2t >= a:
Let f(x)=〈a1,a2,...,am,am+1〉 where am+1= 2t−a
We want to show that x∈SubsetSum ⇔ f(x)∈PARTITION
so there exist S⊆ {1,...,m} s.t T = {1..m} - S and Σai(i∈T) = a-t
and Let T' = {1...m,m+1} - S so Σaj(j∈T') = a-t+2t-a = t
which is exactly Σai(i∈S)= t and it shows f(x)∈PARTITION
now We also will show that f(x)∈PARTITION ⇔ x∈SubsetSum
so there exist S⊆ {1,...,m,m+1} s.t T = {1,...,m,m+1} - S and Σai (i∈T)= [a+(2t-a)-t]=t
and it shows Σai(i∈T) = Σaj(j∈S) so m+1∈T and S⊆ {1,· · ·,m} and Σai(i∈S)= t
so x∈SubsetSum
Case 2: 2t =< a :
we can check same but just this time am+1 is a−2t
fuente
Este enlace tiene una buena descripción de ambas reducciones, partición a subconjunto-suma y subconjunto-suma a partición. Creo que es más obvio que la respuesta de YUVAL . enlace útil
fuente