Complejidad de una variante de suma de subconjuntos

9

¿Es esta variante del problema de suma de subconjuntos fácil / conocida?

Dado un entero , y un conjunto de enteros positivos tal que cada tiene como máximo bits establecidos en ( ); ¿hay un subconjunto tal que la suma de sus elementos sea igual a ?A = { x 1 , x 2 , . . . , x n } x i k = 2 1 x i = 2 b i 1 + 2 b i 2 ,mA={x1,x2,...,xn}xik=21A A mxi=2bi1+2bi2,bi1,bi20AAm

¿Está en ? ¿Sigue siendo -completo?N PPNP

¿Y si cada tiene como máximo bits establecidos en ? Para el problema es trivial. k = 3 1 k = 1xik=31k=1

Vor
fuente

Respuestas:

8

Todavía es -completo, incluso para . Dada una instancia de suma de subconjuntos, podemos transformarla en esta variante dividiendo los números y agregando algunos bits adicionales. k = 2NPk=2

Primero, la suma de todos los números en el problema será menor que para algún valor de . m2mm

Ahora, tomemos un número del problema original que tiene bits establecidos. Dividiremos este número en números con exactamente 2 bits establecidos de modo que la suma de esos números sea . Podemos hacer esto de forma recursiva, encontrando números que suman los primeros bits más y números que resumir hasta el último bits más .k k n + 2 k + mkk2 k + m - 1kk2 k + m - 1nkkn+2k+mkk2k+m1kk2k+m1

Además de ese número, también agregaremos el número al problema. Una solución debe contener este número o todos los números construidos previamente. Si el valor objetivo original era el nuevo valor objetivo será . k t t + 2 k + m2k+mktt+2k+m

Si el problema original tenía más de un número, podemos repetir este proceso tomando para el nuevo valor de .mk+m+1m

Solo hay dos formas de establecer el bit en la posición : la respuesta puede contener el número o todos los números que suman . Por lo tanto, hemos reducido la suma de subconjuntos a su variante de suma de subconjuntos.2 k + m k n + 2 k + mk+m2k+mkn+2k+m

Como ejemplo, tomemos con el valor objetivo . Este problema podría codificarse como la variante de suma de subconjuntos presentada aquí tomando los siguientes números binarios:{2,3,5}7

2 se asigna a y . (Usar el bit extra no es estrictamente necesario aquí).0100 10000 1

3 se asigna a y1000 00 1,0100 00 10000 00 01

5 se asigna a y .1000 00 000 1,0010 00 000 10000 00 000 01

El nuevo valor objetivo se convertiría en .1110 10 010 01

Si el problema original se representa con bits, entonces el problema transformado tiene como máximo bits. El problema original tendrá como máximo números cada uno con como máximo bits, por lo que la suma de todos ellos también es O (n). El problema transformado tendrá números (ya que cada número de bits se divide en números de bits, siendo su longitud como máximo ya que usamos bits adicionales para cada número, de modo que el tamaño total del problema transformado es bits.O ( n 4 ) O ( n ) O ( n ) O ( n 2 ) n n + 1 2 O ( n 2 ) n O ( n 4 )nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)

Tom van der Zanden
fuente
¿estás seguro de que la codificación no conduce a un tamaño exponencial de la cinta de trabajo?
Vor
No, creo que el problema transformado es de un tamaño cuántico. Si la entrada tiene n bits, entonces hay como máximo n números, cada uno con n bits establecidos. Por lo tanto, habrá números O (n ^ 2) en el problema transformado (ya que un número de k bits se divide en k + 1). Cada número tiene (2n) bits de largo para acomodar la suma máxima más n bits para cada uno de los n números en el problema original. Entonces, cada número tendrá O (2n + n ^ 2) bits, para un total de O (n ^ 4) bits.
Tom van der Zanden
@TomvaderZanden: agregué una imagen de su reducción en la pregunta; ver si lo interpreté correctamente
Vor
@TomvaderZanden: hoy miro su reducción nuevamente, pero no está claro cómo, desde un número arbitrario con bits configurados, puede dividirlo en números de 2 bits donde la parte "más alta" es . Supongamos que tiene un número con bits establecidos; necesita 13 números de 2 bits, pero 13 es 1101 y no puede "cubrirlo" con un número de dos bits (su ejemplo funciona porque para 3 y 5 k = 2). Creo que esto se puede solucionar fácilmente si utiliza un bit alto diferente para cada uno de los números 2 bits; sumarán 01111 ... 1, luego agregará un 0000 ficticio ... 1 que permitirá que la suma sea . k k 2 k n k = 13 k 2 knkk2knk=13k2k
Vor
Es un poco vago, pero ciertamente es posible usando un procedimiento "inductivo". En realidad no necesita bits, solo necesita . Si desea encontrar 13 números de 1 bit que sumen , entonces necesita encontrar 6 números que sumen y 7 que también sumen . Podemos tomar que de hecho suma hasta . c e i l ( log k ) 2 4 2 3 2 3 10 2 0 + 3 2 1 2 4kceil(logk)2423231020+32124
Tom van der Zanden
0

Esta es información extraída de la pregunta de Vor.

Para el problema sigue siendo NP completo. Encontré una reducción rápida del monótono X-SAT ( vea el esquema de la reducción aquí ).k3

El problema sigue siendo NP completo incluso si , vea la respuesta de Tom para más detalles. Aquí hay una pequeña representación de su reducción de SUBSET SUM:k=2

ingrese la descripción de la imagen aquí

Juho
fuente