È 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 + m ⌈ k ⌉ ⌈ k ⌉ 2 k + m - 1 ⌊ k ⌋ ⌊ k ⌋ 2 k + m - 1nkkn+2k+m⌈k⌉⌈k⌉2k+m−1⌊k⌋⌊k⌋2k+m−1
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)