Complessità di una variante di somma di sottoinsieme


9

Questa variante del problema della somma dei sottoinsiemi è facile / conosciuta?

Dato un numero intero e un set di numeri interi positivi tale che ogni ha al massimo bit impostati su ( ); esiste un sottoinsieme tale che la somma dei suoi elementi sia uguale 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

È in ? È ancora ?N PPNP

E se ogni ha al massimo bit impostati su ? Per il problema è banale. k = 3 1 k = 1xik=31k=1

Risposte:


8

È ancora , anche per . Data un'istanza della somma del sottoinsieme, possiamo trasformarla in questa variante suddividendo i numeri e aggiungendo alcuni bit extra. k = 2NPk=2

Innanzitutto, la somma di tutti i numeri nel problema sarà inferiore a per un valore di . m2mm

Ora prendiamo un numero dal problema originale che ha impostato bit. Divideremo questo numero in numeri con esattamente 2 bit impostati in modo tale che la somma di questi numeri sia . Possiamo farlo ricorsivamente, trovando i numeri di che si sommano ai primi bit di più e numeri che sommare agli ultimi bit più .k k n + 2 k + mkk2 k + m - 1kk2 k + m - 1nkkn+2k+mkk2k+m1kk2k+m1

Oltre a quel numero, aggiungeremo anche il numero al problema. Una soluzione deve contenere questo numero o tutti i numeri creati in precedenza. Se il valore target originale era il nuovo valore target sarà . k t t + 2 k + m2k+mktt+2k+m

Se il problema originale aveva più di un numero, possiamo ripetere questo processo prendendo per il nuovo valore di .mk+m+1m

Esistono solo due modi in cui è possibile impostare il bit nella posizione : la risposta può contenere il numero o tutti i numeri che si sommano a . Pertanto, abbiamo ridotto la somma del sottoinsieme alla variante della somma del sottoinsieme.2 k + m k n + 2 k + mk+m2k+mkn+2k+m

Ad esempio, prendiamo con il valore target . Questo problema potrebbe essere codificato come la variante della somma del sottoinsieme presentata qui prendendo i seguenti numeri binari: 7{2,3,5}7

2 viene mappato su e . (L'uso del bit extra non è strettamente necessario qui.)0000 10100 10000 1

3 viene mappato su e0000 00 011000 00 1,0100 00 10000 00 01

5 viene mappato su e .0000 00 000 011000 00 000 1,0010 00 000 10000 00 000 01

Il nuovo valore target diventerebbe .1110 10 010 01

Se il problema originale è rappresentato con bit, il problema trasformato ha al massimo bit. Il problema originale avrà al massimo numeri ciascuno con al massimo bit, quindi la somma di tutti è anche O (n). Il problema trasformato avrà numeri (poiché ogni numero -bit è suddiviso in numeri a bit, con la loro lunghezza al massimo poiché utilizziamo bit aggiuntivi per ogni numero. Quindi la dimensione totale del problema trasformato è bit.O ( n 4 ) O ( n ) O ( n ) O ( n 2 ) n n + 1 2 O ( n 2 )nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)O ( n 4 )nO(n4)


sei sicuro che la codifica non porta a una dimensione esponenziale del nastro di lavoro?
Vor,

No, penso che il problema trasformato abbia dimensioni quartiche. Se l'ingresso ha n bit, allora ci sono al massimo n numeri ciascuno con n bit impostati. Quindi ci saranno numeri O (n ^ 2) nel problema trasformato (poiché un numero k-bit è diviso in k + 1 numeri). Ogni numero è lungo (2n) bit per contenere la somma massima più n bit per ciascuno degli n numeri nel problema originale. Quindi ogni numero avrà O (2n + n ^ 2) bit, per un totale di O (n ^ 4) bit.
Tom van der Zanden,

@TomvaderZanden: ho aggiunto un'immagine della tua riduzione nella domanda; vedi se l'ho interpretato correttamente
Vor

@TomvaderZanden: oggi guardo di nuovo la tua riduzione, ma non è chiaro come da un numero arbitrario con bit impostati puoi dividerlo in numeri a 2 bit dove la parte "più alta" si somma a . Supponiamo di avere un numero con bit impostati; hai bisogno di 13 numeri a 2 bit, ma 13 è 1101 e non puoi "coprirlo" con un numero a due bit (il tuo esempio funziona perché per 3 e 5 k = 2). Penso che questo possa essere facilmente risolto se si utilizza un bit alto diverso per ciascuno dei numeri a 2 bit; si sommeranno a 01111 ... 1, quindi si aggiungerà un manichino 0000 ... 1 che consentirà alla somma di essere . k k 2 k n k = 13 k 2 knkk2knk=13k2k
Vor

È un po 'vago, ma è certamente possibile usare una procedura "induttiva". In realtà non hai bisogno di bit, hai solo bisogno di . Se vuoi trovare 13 numeri da 1 bit che sommano fino a , allora devi trovare 6 numeri che sommano fino a e 7 che sommano anche fino a . Possiamo prendere che in effetti somma fino a . 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

Queste sono le informazioni estratte dalla domanda del Vor.

Per il problema rimane NP-completo. Ho trovato una rapida riduzione da X-SAT monotona ( vedi lo schema della riduzione qui ).k3

Il problema rimane NP-completo anche se , vedi la risposta di Tom per i dettagli. Ecco una piccola rappresentazione della sua riduzione da SUBSET SUM:k=2

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.