Complexidade de uma variante de soma de subconjuntos

9

Essa variante do problema de soma de subconjuntos é fácil / conhecida?

Dado um número inteiro , e um conjunto de números inteiros positivos A = { x 1 , x 2 , . . . , x n } de modo que todo x i tenha no máximo k = 2 bits definido como 1 ( x i = 2 b i 1 + 2 b i 2 ,mA={x1,x2,...,xn}xik=21 ); há um subconjunto Um 'Um tal modo que a soma dos seus elementos é igual a m ?xi=2bi1+2bi2,bi1,bi20AAm

Está em ? Ainda é N P completo?PNP

E se todo tiver no máximo k = 3 bits definido como 1 ? Para k = 1, o problema é trivial.xik=31k=1

Vor
fonte

Respostas:

8

É 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+mkk2k+m1kk .2k+m1

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)

Tom van der Zanden
fonte
Tem certeza de que a codificação não leva a um tamanho exponencial da fita de trabalho?
Vor
Não, acho que o problema transformado tem tamanho quártico. Se a entrada tiver n bits, haverá no máximo n números, cada um com n bits definidos. Portanto, haverá números O (n ^ 2) no problema transformado (uma vez que um número de k bits é dividido em k + 1). Cada número tem (2n) bits de comprimento para acomodar a soma máxima mais n bits para cada um dos n números no problema original. Portanto, cada número terá O (2n + n ^ 2) bits, para um total de O (n ^ 4) bits.
Tom van der Zanden
@ TomvaderZanden: Adicionei uma foto da sua redução na pergunta; ver se eu interpretado corretamente
Vor
nkk2knk=13k2k
Vor
kceil(logk)2423231020+32124
0

Esta é a informação extraída da pergunta por Vor.

k3

k=2

insira a descrição da imagem aqui

Juho
fonte