Soma de subconjunto: reduza caso especial a geral


20

A Wikipedia declara o problema da soma do subconjunto como encontrar um subconjunto de um determinado conjunto múltiplo de números inteiros, cuja soma é zero. Além disso, afirma que é equivalente a encontrar um subconjunto com soma para qualquer dado .ss

Então, acredito que, como são equivalentes, deve haver uma redução em ambos os lados. O de a zero é trivial, configurando . Mas não tive sorte em encontrar uma redução de zero a , ou seja, dado um conjunto de números inteiros , construa um conjunto de números inteiros contendo um subconjunto com soma (para qualquer ), se e somente se houver como subconjunto de com soma zero.ss=0sABssA

Você pode me dar algumas dicas?

Respostas:


11

Você já tem uma redução de especial para geral. Ao definir , você basicamente usa o algoritmo geral para resolver o problema especial.s=0

Para o contrário (ou seja, uma redução de geral para especial):

Suponha que você está dado um conjunto e um número e você tem que determinar se existe algum subconjunto de que resume a .S={x1,,xn}KSK

Agora você deseja resolver esse problema, considerando um algoritmo para o caso em que é possível determinar se algum subconjunto é igual a .0

Agora, se , temos uma redução fácil: .xi>0S={x1,x2,,xn,K}

S tem um subconjunto de soma sse tem um subconjunto de soma .0SK

O problema ocorre quando podemos ter para alguns dos .xi0i

Podemos assumir que (por quê?).K>0

Suponhamos que a soma do positivo é e o negativo é . P x i NxiPxiN

Agora construa um novo conjunto tal queS={y1,y2,yn}

M = P + | N | + Kyi=xi+M que .M=P+|N|+K

Cada .yi>0

Agora execute o algoritmo de soma de subconjunto zero nos conjuntos

S{(K+M)}

S{(K+2M)}

S{(K+3M)}

S{(K+nM)}

É fácil mostrar que, se tem um subconjunto da soma , pelo menos um dos conjuntos acima tem subconjunto da soma zero.KSK

Deixarei a prova da outra direção para você.


Muito obrigado. Gostaria de saber, existe uma redução que transforma uma instância de 0-subconjunto-soma em uma (em vez de ) instância de K-subconjunto-soma? n
Ipsec

@ipsec: Você quer dizer transformar uma instância de K-subconjunto-soma em 0-subconjunto-soma? Talvez a união dos conjuntos acima funcione. n
Aryabhata

Bem, na verdade eu estava pensando duas vezes se eu estava na direção certa agora. Quando quero mostrar que K-subconjunto-soma é NP-difícil para cada K, considerando que 0-subconjunto-soma é NP-difícil, posso usar uma redução de 0-subconjunto-soma para K-subconjunto-soma , para o qual eu precisaria de uma transformação de tempo múltiplo de qualquer instância 0 para uma instância K Mas não estou certo agora que isso é realmente o que eu fiz na minha pergunta.
Ipsec

@ipsec: Quando você diz que , você mostra a NP-Dureza da K -subset-sum, dada a NP-Dureza da zero-subconjunto-soma: o problema geral é pelo menos tão difícil quanto o problema especial. Note-se que em termos de redução, você diz que reduziram-subconjunto de soma zero para K -subset-sum. Observe também que K é uma entrada . Quando você fala sobre "todo K dado ", o que exatamente você quer dizer? A resposta acima mostra que o caso especial (soma do subconjunto zero) é tão difícil (no sentido de dureza NP) quanto o caso geral ( k -subconjunto-soma, onde k é uma entrada). s=0KKKKkk
Aryabhata 04/04

Deixa pra lá. O que eu originalmente estava pensando é: se sabemos que 0-subconjunto-soma é NP-difícil, podemos deduzir que, por exemplo, 1-subconjunto-soma também é? A Wikipedia diz isso, mas eu estava procurando uma redução adequada. No entanto, vejo agora que minha redação estava totalmente confusa e, de fato, eu estava perguntando o contrário. De qualquer forma, você me forneceu entrada suficiente para reduzir de qualquer instância de K-subconjunto-soma para uma instância de L-subconjunto-soma para qualquer número inteiro K e L, portanto, meu problema ainda está resolvido.
Ipsec #

0

A resposta de Aryabhata pode ser corrigida usando o fato de que podemos multiplicar todos os números por um c grande e, em seguida, adicionar algo pequeno a cada um para agir como uma "etiqueta de presença" e fornecer alguns números extras que permitirão nós para chegar a zero, se pudéssemos chegar a cK sem eles. Especificamente, usaremos c=2(n+1) e 1 como tag de presença.

Dada uma instância (S={x1,,xn},K) do problema geral com o valor alvo K , criaremos uma instância do problema específico (com valor alvo 0) que contém:

  • Y={y1,,yn} , ondeyi=2(n+1)xi+1 .
  • O número z=2K(n+1)n .
  • n1 cópias do número 1, a serem chamadas de números "pull-up".

Suponho que Aryabhatta faça que K seja positivo. (Já faz seis anos, responderei seu exercício para o leitor: a razão pela qual podemos fazer isso é que, se trocarmos os sinais de todos os números em uma instância do problema geral, incluindo K , terminamos com um nova instância de problema equivalente.Isso significa que um algoritmo para resolver instâncias K positivas é suficiente para resolver qualquer problema - para resolver uma instância com K negativo , poderíamos executar essa troca de sinal, executar esse algoritmo e encaminhar sua resposta da seguinte forma: a resposta para a pergunta original e, é claro, se K=0 então não precisamos realizar nenhuma transformação do caso geral no caso especial!)

Primeiro, vamos mostrar que uma resposta SIM à instância dada do problema geral implica uma resposta SIM à instância construída do problema especial. Aqui podemos supor que alguma solução {xj1,,xjm} para o problema geral existe, ou seja, esta coleção não vazio de m números somas para K . Assim, se tomarmos as correspondentes y -Valores {yj1,,yjm} na nossa soluo para o exemplo construídas, irão sintetizar a 2K(n+1)+m . Podemos então optar por incluir2K(n+1)n na solução, deixando-nos com uma soma demn . Desde1mn , isso está no intervalo[n+1,0] , que podemos obter com sucesso até 0, incluindo alguns subconjuntos dos números de pull-up.

Agora vamos mostrar que uma resposta SIM à instância construída implica uma resposta SIM à instância original fornecida. É aqui que a multiplicação por 2(n+1) se torna importante - é o que nos permite ter certeza de que os números extras que incluímos não podem "fazer muito".

Aqui, podemos assumir que existe alguma solução {yj1,,yjm} para a instância construída: ou seja, essa coleção não vazia de m números é igual a 0. Pelos requisitos do problema, esta solução contém em pelo menos um elemento. Além disso, ele deve conter pelo menos um elemento de Y , pois sem isso é impossível atingir um total de 0: se apenas números de pull-up estiverem presentes, a soma estará necessariamente no intervalo [1,n1] ( note que, neste caso, pelo menos umo número de pull-up deve estar presente e todos eles são estritamente positivos; portanto, a soma não pode ser 0); enquanto que se a solução consistir em apenas z e alguns números de pull-up, o total será necessariamente negativo porque z=2K(n+1)nn e o máximo que os números de pull-up puderem aumentar a soma por é n1 .

zY2(n+1)nYn1Yn+n1=2n12(n+1)z2(n+1)Y2(n+1)2(n+1)z=2K(n+1)n

z

(2K(n+1)n)+i=1m(2(n+1)xji+1)+pull-ups=0

e podemos reorganizar os termos:

2K(n+1)+i=1m(2(n+1)xji)(n+i=1m1+pull-ups)=0

2K(n+1)+i=1m(2(n+1)xji)(n+m+pull-ups)=0

2(n+1)(K+i=1mxji)(n+m+pull-ups)=0

2(n+1)2(n+1)

(n+m+pull-ups)=0

Isso pode ser substituído diretamente na equação anterior para obter

2(n+1)(K+i=1mxji)=0

2(n+1)

K+i=1mxji=0

que produz uma solução para a instância original do problema geral.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.