Nadal jest -kompletny, nawet dla . Biorąc pod uwagę sumę podzbioru, możemy ją przekształcić w ten wariant, dzieląc liczby i dodając dodatkowe bity.NPk=2
Po pierwsze, suma wszystkich liczb w zadaniu będzie mniejsza niż dla pewnej wartości .2mm
Teraz weźmy liczbę z pierwotnego problemu, który ma ustawione bity . Podzielimy tę liczbę na liczby z dokładnie 2 bitami ustawionymi tak, aby suma tych liczb wynosiła . Możemy to zrobić rekurencyjnie, znajdując które sumują się do pierwszych plus i liczby, które zsumuj do ostatnich bitów plus .nkkn+2k+m⌈k⌉⌈k⌉2k+m−1⌊k⌋⌊k⌋2k+m−1
Oprócz tej liczby dodamy również do problemu liczbę . Rozwiązanie musi zawierać tę liczbę lub wszystkie wcześniej zbudowane liczby . Jeśli pierwotną wartością docelową było nową wartością docelową będzie .2k+mktt+2k+m
Jeśli pierwotny problem miał więcej niż jedną liczbę, możemy powtórzyć ten proces, przyjmując dla nowej wartości .k+m+1m
Są tylko dwa sposoby ustawienia bitu w pozycji : odpowiedź może zawierać liczbę lub wszystkie liczby które sumują się do . Więc zmniejszyliśmy sumę podzbioru do twojego wariantu sumy podzbiorów.k+m2k+mkn+2k+m
Jako przykład weźmy z wartością docelową . Problem ten można zakodować jako przedstawiony tu wariant sumy podzbioru, przyjmując następujące liczby binarne:{2,3,5}7
2 zostanie zamapowany na i . (Użycie dodatkowego bitu nie jest tu absolutnie konieczne).0100 10000 1
3 zostanie zamapowany na i1000 00 1,0100 00 10000 00 01
5 zostanie zmapowany na i .1000 00 000 1,0010 00 000 10000 00 000 01
Nowa wartość docelowa to .1110 10 010 01
Jeśli problem pierwotny jest reprezentowany przez bitów, problem przekształcony ma co najwyżej bitów. Pierwotny problem będzie miał najwyżej liczb, z których każda ma najwyżej bitów, więc suma ich wszystkich jest również O (n). Przekształcony problem będzie miał liczby (ponieważ każda liczba bitowa jest podzielona na bitowe liczby, przy czym ich długość wynosi co najwyżej ponieważ używamy dodatkowych bitów dla każda liczba. Zatem całkowity rozmiar transformowanego problemu wynosi bitów.nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)