Изменения

Перейти к: навигация, поиск

NP-полнота задачи о рюкзаке

2409 байт добавлено, 19:04, 4 сентября 2022
м
rollbackEdits.php mass rollback
==Формулировка задачи==
В '''Задаче задаче о рюкзаке''' (Knapsack problem) входными данными являются набор <math>n</math> пар целых чисел <math>P = \{(w_{i},v_{i})\}^{n}_{i=1}</math>, где <math>w_{i}</math> - вес и i-го предмета, а <math>v_{i}</math> - стоимость, а и также два целых числа <math>c</math> - максимальный вес и <math>p</math> - минимальная стоимость. Требуется определить, можно ли выбрать такое подмножество партакой набор предметов, что их суммарная стоимость больше либо равна <math>p</math>, а вес меньше или равен <math>c</math>: <p style="text-align:center;"><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>
<math>\exist \{k_{j}\} \subseteq (1..n): (\sum_{i \in k_{j}}{v_{i}} \geq p) \wedge (\sum_{i \in k_{j}}{w_{i}} \leq c)</math>
==Доказательство NP-полноты==
Для доказательства того, что Knapsack problem <math>\in</math> [[NPC]], необходимо доказать два факта:
*Knapsack problem <math>\in</math> [[NP]]
*Knapsack problem <math>\in</math> [[NPH]]
===Доказательство принадлежности к NP===
В качестве сертификата возьмем удовлетворяющее условию задачи подмножество пар <math>P'</math> с суммарным весом, не большим <math>c</math> и стоимостью не меньше <math>p</math>. Очевидно, оно удовлетворяет всем требованиям, налагаемым на сертификат. Проверяющая функция строится очевидным образом и работает за полиномиальное от размера входа время.
===Доказательство принадлежности к NPH===
Сведем [[NP-полнота задачи о сумме подмножества|задачу о сумме подмножества]] к задаче о рюкзаке. Пусть <math>f\!\!:(S,s) \to (P,c,p)</math> - функция, осуществляющее сведение. Она будет устроена так:
 
<p style="text-align:center;">
<math>f(S,s) = ((S,S),s,s)</math>,
</p>
То есть, для каждого числа <math>q \in S</math> создадим предмет <math>(q,q)</math> с весом и стоимостью, равными значению числа <math>q</math>.
А значения <math>c</math> и <math>p</math> возьмем равными <math>s</math>.
*Очевидно, <math>f~</math> работает за полиномиальное от длины входа время.
*Если исходная [[NP-полнота задачи о сумме подмножества|задача о сумме подмножества]] имела решение <math>S'</math>, то набор пар <math>P'</math> с весами, равными числам из <math>S'</math>, будет решением задачи о рюкзаке.
*В обратную сторону - аналогично.
 
[[Категория:NP]]
1632
правки

Навигация