NP-полнота задачи о сумме подмножества
Содержание
Формулировка задачи
В Задаче о сумме подмножества (Subset sum problem) входными данными являются набор из
целых чисел и целое число . Требуется выяснить, возможно ли выбрать такое подмножество из с суммой :
Доказательство NP-полноты
Для доказательства того, что
необходимо доказать два факта:Доказательство принадлежности к NP
В качестве сертификата возьмем удовлетворяющее условию задачи множество
. Очевидно, оно удовлетворяет всем требованиям, налагаемым на сертификат.Доказательство принадлежности к NPH
Сведем 3-CNF_Sat к задаче о о сумме подмножества. Пусть задана 3-CNF формула от переменных , состоящая из пар скобок . Построим сводящую функцию .
Построение сводящей функции
Для каждой переменной
и каждой пары скобок создадим по два числа в десятичной системе счисления, каждое длиной цифр. Эти числа образуют . Также создадим число длиной цифр. Присвоим каждому разряду полученных чисел (одинаковую для всех чисел) метку, соответствующую либо переменной, либо паре скобок. Метки, соответствующие парам скобок, присвоены младшим разрядам чисел.- в числе все разряды, соответствующие переменным, установим , а оставшиеся сделаем равными ;
- каждой переменной соответствуют два числа: и .