É ainda -completo, mesmo para k = 2 . Dada uma instância da soma do subconjunto, podemos transformá-la nessa variante dividindo os números e adicionando alguns bits extras.NPk=2
Primeiro, a soma de todos os números no problema será menor que para algum valor de m .2mm
Agora, vamos pegar um número do problema original que tem k bits definidos. Dividiremos esse número em k números com exatamente 2 bits configurados de forma que a soma desses números seja n + 2 k + m . Podemos fazer isso de forma recursiva, encontrando ⌈ k ⌉ números que soma até os primeiros ⌈ k ⌉ bits mais 2 k + m - 1 e ⌊ k ⌋ números que soma até os últimos ⌊ k ⌋ bits mais 2 knkkn+2k+m⌈k⌉⌈k⌉2k+m−1⌊k⌋⌊k⌋ .2k+m−1
Além desse número, também adicionaremos o número ao problema. Uma solução deve conter esse número ou todos os k números construídos anteriormente. Se o valor-alvo original for t, o novo valor-alvo será t + 2 k + m .2k+mktt+2k+m
Se o problema original tiver mais de um número, podemos repetir esse processo usando para o novo valor de m .k+m+1m
Existem apenas duas maneiras pelas quais o bit na posição pode ser definido: a resposta pode conter o número 2 k + m ou todos os k números que somam n + 2 k + m . Portanto, reduzimos a soma do subconjunto à sua variante de soma do subconjunto.k+m2k+mkn+2k+m
Como exemplo, vamos usar com o valor desejado 7 . Esse problema pode ser codificado como a variante de soma do subconjunto apresentada aqui, usando os seguintes números binários:{2,3,5}7
2 é mapeado para e 0000 1 . (Usar o bit extra não é estritamente necessário aqui.)0100 10000 1
3 é mapeado para e 0000 00 011000 00 1,0100 00 10000 00 01
5 é mapeado para e 0000 00 000 01 .1000 00 000 1,0010 00 000 10000 00 000 01
O novo valor-alvo se tornaria .1110 10 010 01
Se o problema original estiver representado com bits, o problema transformado terá no máximo O ( n 4 ) bits. O problema original terá no máximo O ( n ) números, cada um com no máximo O ( n ) bits; portanto, a soma de todos eles também é O (n). O problema transformado terá números O ( n 2 ) (já que cada número de n bits é dividido em n + 1 números de 2 bits, com o comprimento sendo no máximo O ( n 2 )nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)já que usamos bits adicionais para cada número. Portanto, o tamanho total do problema transformado é de O ( n 4 ) bits.nO(n4)
Esta é a informação extraída da pergunta por Vor.
fonte