Це все ще -повне, навіть для . Враховуючи екземпляр суми підмножини, ми можемо перетворити його на цей варіант, розділивши числа і додавши додаткові біти.NPk=2
По-перше, сума всіх чисел у задачі буде меншою за для деякого значення .2mm
Тепер візьмемо число з початкової задачі, у якій встановлено біт. Ми розділимо це число на чисел з точно встановленими двома бітами, щоб сума цих чисел була . Ми можемо зробити це рекурсивно, знайшовши числа, які підсумовують першим бітів плюс і числа, які підсумовуємо останні біти плюс .nkkn+2k+m⌈k⌉⌈k⌉2k+m−1⌊k⌋⌊k⌋2k+m−1
На додаток до цього числа ми також додамо до задачі число . Рішення повинно містити або це число, або всі числа, побудовані раніше. Якщо початкове цільове значення було нове цільове значення буде .2k+mktt+2k+m
Якщо в початковій задачі було більше одного числа, ми можемо повторити цей процес, приймаючи для нового значення .k+m+1m
Існує лише два способи встановлення біта в положенні : відповідь може містити число або всі числа, що дорівнюють . Таким чином, ми зменшили суму підмножини до Вашого варіанту підмножини.k+m2k+mkn+2k+m
Як приклад, візьмемо з цільовим значенням . Ця проблема може бути закодована як варіант підмножини, представлений тут, взявши наступні двійкові числа:{2,3,5}7
2 відображається на та . (Використання додаткового біта тут не є строго необхідним.)0100 10000 1
3 відображається на та1000 00 1,0100 00 10000 00 01
5 відображається на та .1000 00 000 1,0010 00 000 10000 00 000 01
Нове цільове значення стане .1110 10 010 01
Якщо вихідна задача представлена бітами, то трансформована задача має максимум біт. Початкова проблема матиме щонайбільше чисел, кожне з щонайбільше бітів, тому сума всіх їх також O (n). Трансформована задача матиме числа (оскільки кожне бітове число розбивається на бітні числа, причому їх довжина становить максимум оскільки ми використовуємо додаткових біт для кожне число. Отже, загальний розмір перетвореної задачі становить біт.nO(n4)O(n)O(n)O(n2)nn+1 2O(n2)nO(n4)