NP-полнота задачи о рюкзаке — различия между версиями
Miron (обсуждение | вклад) (стилистические изменения) |
(описание сведения) |
||
Строка 17: | Строка 17: | ||
<math>f(S,s) = ((S,S),s,s) \,</math> | <math>f(S,s) = ((S,S),s,s) \,</math> | ||
</p> | </p> | ||
+ | То есть, для каждого числа <math>q \in S</math> создадим предмет <math>(q,q)</math> с весом и стоимостью, равной значению числа. | ||
+ | А значения <math>c</math> и <math>p</math> возьмем равными <math>s</math>. | ||
*Очевидно, <math>f~</math> работает за полиномиальное от длины входа время. | *Очевидно, <math>f~</math> работает за полиномиальное от длины входа время. | ||
*Если исходная [[NP-полнота задачи о сумме подмножества|задача о сумме подмножества]] имела решение <math>S'</math>, то набор пар <math>P'</math> с весами, равными числам из <math>S'</math>, будет решением задачи о рюкзаке. | *Если исходная [[NP-полнота задачи о сумме подмножества|задача о сумме подмножества]] имела решение <math>S'</math>, то набор пар <math>P'</math> с весами, равными числам из <math>S'</math>, будет решением задачи о рюкзаке. | ||
*В обратную сторону - аналогично. | *В обратную сторону - аналогично. |
Версия 14:27, 19 марта 2010
Содержание
Формулировка задачи
В задаче о рюкзаке (Knapsack problem) входными данными являются набор
пар целых чисел , где - вес i-го предмета, а - стоимость, и также два целых числа - максимальный вес и - минимальная стоимость. Требуется определить, можно ли выбрать такой набор предметов, что их суммарная стоимость больше либо равна , а вес меньше или равен :
Доказательство NP-полноты
Для доказательства того, что Knapsack problem NPC, необходимо доказать два факта:
Доказательство принадлежности к NP
В качестве сертификата возьмем удовлетворяющее условию задачи подмножество пар
с суммарным весом, не большим и стоимостью не меньше . Очевидно, оно удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом и работает за полиномиальное от размера входа время.Доказательство принадлежности к NPH
Сведем задачу о сумме подмножества к задаче о рюкзаке. Пусть - функция, осуществляющее сведение. Она будет устроена так:
То есть, для каждого числа
создадим предмет с весом и стоимостью, равной значению числа. А значения и возьмем равными .- Очевидно, работает за полиномиальное от длины входа время.
- Если исходная задача о сумме подмножества имела решение , то набор пар с весами, равными числам из , будет решением задачи о рюкзаке.
- В обратную сторону - аналогично.