NP-полнота задачи о рюкзаке — различия между версиями
(→syntax error fix in Формулировка задачи) |
|||
Строка 3: | Строка 3: | ||
<p style="text-align:center;"> | <p style="text-align:center;"> | ||
− | <math>\ | + | <math>\exists P' \subseteq P: ((\sum_{(w_{i},v_{i}) \in P'}{v_{i}} \geq p) \wedge (\sum_{(w_{i},v_{i}) \in P'}{w_{i}} \leq c))</math> |
</p> | </p> | ||
+ | |||
==Доказательство NP-полноты== | ==Доказательство NP-полноты== | ||
Для доказательства того, что Knapsack problem <math>\in</math> [[NPC]], необходимо доказать два факта: | Для доказательства того, что Knapsack problem <math>\in</math> [[NPC]], необходимо доказать два факта: |
Версия 16:20, 3 мая 2016
Содержание
Формулировка задачи
В задаче о рюкзаке (Knapsack problem) входными данными являются набор
пар целых чисел , где - вес i-го предмета, а - стоимость, и также два целых числа - максимальный вес и - минимальная стоимость. Требуется определить, можно ли выбрать такой набор предметов, что их суммарная стоимость больше либо равна , а вес меньше или равен :
Доказательство NP-полноты
Для доказательства того, что Knapsack problem NPC, необходимо доказать два факта:
Доказательство принадлежности к NP
В качестве сертификата возьмем удовлетворяющее условию задачи подмножество пар
с суммарным весом, не большим и стоимостью не меньше . Очевидно, оно удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом и работает за полиномиальное от размера входа время.Доказательство принадлежности к NPH
Сведем задачу о сумме подмножества к задаче о рюкзаке. Пусть - функция, осуществляющее сведение. Она будет устроена так:
,
То есть, для каждого числа
создадим предмет с весом и стоимостью, равными значению числа . А значения и возьмем равными .- Очевидно, работает за полиномиальное от длины входа время.
- Если исходная задача о сумме подмножества имела решение , то набор пар с весами, равными числам из , будет решением задачи о рюкзаке.
- В обратную сторону - аналогично.