NP-полнота задачи о рюкзаке — различия между версиями
(описание сведения) |
м (rollbackEdits.php mass rollback) |
||
(не показано 5 промежуточных версий 4 участников) | |||
Строка 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]], необходимо доказать два факта: | ||
Строка 15: | Строка 16: | ||
<p style="text-align:center;"> | <p style="text-align:center;"> | ||
− | <math>f(S,s) = ((S,S),s,s) | + | <math>f(S,s) = ((S,S),s,s)</math>, |
</p> | </p> | ||
− | То есть, для каждого числа <math>q \in S</math> создадим предмет <math>(q,q)</math> с весом и стоимостью, | + | То есть, для каждого числа <math>q \in S</math> создадим предмет <math>(q,q)</math> с весом и стоимостью, равными значению числа <math>q</math>. |
А значения <math>c</math> и <math>p</math> возьмем равными <math>s</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>, будет решением задачи о рюкзаке. | ||
*В обратную сторону - аналогично. | *В обратную сторону - аналогично. | ||
+ | |||
+ | [[Категория:NP]] |
Текущая версия на 19:04, 4 сентября 2022
Содержание
Формулировка задачи
В задаче о рюкзаке (Knapsack problem) входными данными являются набор
пар целых чисел , где - вес i-го предмета, а - стоимость, и также два целых числа - максимальный вес и - минимальная стоимость. Требуется определить, можно ли выбрать такой набор предметов, что их суммарная стоимость больше либо равна , а вес меньше или равен :
Доказательство NP-полноты
Для доказательства того, что Knapsack problem NPC, необходимо доказать два факта:
Доказательство принадлежности к NP
В качестве сертификата возьмем удовлетворяющее условию задачи подмножество пар
с суммарным весом, не большим и стоимостью не меньше . Очевидно, оно удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом и работает за полиномиальное от размера входа время.Доказательство принадлежности к NPH
Сведем задачу о сумме подмножества к задаче о рюкзаке. Пусть - функция, осуществляющее сведение. Она будет устроена так:
,
То есть, для каждого числа
создадим предмет с весом и стоимостью, равными значению числа . А значения и возьмем равными .- Очевидно, работает за полиномиальное от длины входа время.
- Если исходная задача о сумме подмножества имела решение , то набор пар с весами, равными числам из , будет решением задачи о рюкзаке.
- В обратную сторону - аналогично.