için bile hala eksiktir . Bir alt küme toplamı örneği göz önüne alındığında, sayıları bölerek ve bazı ekstra bitler ekleyerek onu bu değişkene dönüştürebiliriz.NPk=2
Birincisi, sorunun tüm sayıların toplamı daha az olacaktır sayısının bazı değerleri için .2mm
Şimdi, bitleri ayarlanmış olan orijinal problemden bir sayısı alalım . Bu sayıyı tam olarak 2 bitlik ayarlanmış sayılarına böleriz, böylece bu sayıların toplamı . Biz bularak, yinelemeli yapabilirsiniz numaraları ilk için özetler bit artı ve rakamlar, bu son bit artı .nkkn+2k+m⌈k⌉⌈k⌉2k+m−1⌊k⌋⌊k⌋2k+m−1
Bu sayıya ek olarak, soruna sayısını da ekleyeceğiz . Bir çözüm ya bu sayıyı ya da daha önce yapılmış olan tüm sayılarını içermelidir . Orijinal hedef değer ise, yeni hedef değer .2k+mktt+2k+m
Orijinal sorun birden fazla numarası vardı, biz alarak bu işlemi tekrarlayabilirsiniz yeni değeri .k+m+1m
konumundaki bitin ayarlanmasının yalnızca iki yolu vardır : cevap, sayısını veya kadar toplanan tüm numaralarını içerebilir . Böylece, alt küme toplamını alt küme toplam varyantınıza indirdik.k+m2k+mkn+2k+m
Örnek olarak, hedef değerini alalım . Bu sorun, aşağıdaki ikili sayılar alınarak burada sunulan alt küme toplam değişkeni olarak kodlanabilir:{2,3,5}7
2, ve eşlenir . (Burada ekstra bit kullanmak kesinlikle gerekli değildir.)0100 10000 1
3, ve eşlenir1000 00 1,0100 00 10000 00 01
5, ve eşlenir .1000 00 000 1,0010 00 000 10000 00 000 01
Yeni hedef değer .1110 10 010 01
Orijinal sorun bit ile temsil ediliyorsa, dönüştürülen sorunun en fazla biti vardır. Orijinal problem, her biri en fazla bit içeren en fazla numarasına sahip olacaktır , bu nedenle hepsinin toplamı da O (n) 'dir. Dönüştürülmüş sorun olacaktır numaraları (her biri yana bitlik sayı bölünmüş olan bitlik sayı bunların uzunluğu en fazla olmak üzere, Kullandığımız yana için ek bit Dönüştürülen problemin toplam büyüklüğü bittir.nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)