NP-полнота задачи о рюкзаке — различия между версиями
Miron (обсуждение | вклад) (добавлена формулировка) |
Miron (обсуждение | вклад) (Доказательство закончено) |
||
Строка 1: | Строка 1: | ||
==Формулировка задачи== | ==Формулировка задачи== | ||
− | В '''Задаче о рюкзаке''' (Knapsack problem) входными данными являются набор <math>n</math> пар целых чисел <math>w_{i}</math> - вес и <math>v_{i}</math> - стоимость, а также два целых числа <math>c</math> - максимальный вес и <math>p</math> - минимальная стоимость. Требуется определить, можно ли выбрать такое подмножество пар, что их суммарная стоимость больше либо равна <math>p</math>, а вес меньше или равен <math>c</math>: | + | В '''Задаче о рюкзаке''' (Knapsack problem) входными данными являются набор <math>n</math> пар целых чисел <math>\{w_{i}\}</math> - вес и <math>\{v_{i}\}</math> - стоимость, а также два целых числа <math>c</math> - максимальный вес и <math>p</math> - минимальная стоимость. Требуется определить, можно ли выбрать такое подмножество пар, что их суммарная стоимость больше либо равна <math>p</math>, а вес меньше или равен <math>c</math>: |
+ | <p style="text-align:center;"> | ||
<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> | <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> | ||
+ | </p> | ||
==Доказательство NP-полноты== | ==Доказательство NP-полноты== | ||
+ | Для доказательства того, что <math>Knapsack~ problem \in NPC</math> необходимо доказать два факта: | ||
+ | *<math>Knapsack~ problem \in</math> [[NP|<math>NP</math>]] | ||
+ | *<math>Knapsack~ problem \in</math> [[NPH|<math>NPH</math>]] | ||
+ | ===Доказательство принадлежности к NP=== | ||
+ | В качестве сертификата возьмем удовлетворяющее условию задачи подмножество пар <math>\{k_{j}\}</math>. Очевидно, оно удовлетворяет всем требованиям, | ||
+ | налагаемым на сертификат. | ||
+ | ===Доказательство принадлежности к NPH=== | ||
+ | Сведем [[NP-полнота задачи о сумме подмножества|задачу о сумме подмножества]] к задаче о рюкзаке. Пусть <math>f\!\!:(\{s_{i}\},s) \to (\{w_{i}\},\{v_{i}\},c,p)</math> - функция, осуществляющее сведение. Она будет устроена так: | ||
+ | |||
+ | <p style="text-align:center;"> | ||
+ | <math>f(\{s_{i}\},s) = (\{s_{i}\},\{s_{i}\},s,s)</math> | ||
+ | </p> | ||
+ | Очевидно, <math>f</math> работает за полиномиальное от длины входа время. И удовлетворяет условиям [[Сводимость по Карпу|сводимости по Карпу]]. |
Версия 23:19, 8 марта 2010
Содержание
Формулировка задачи
В Задаче о рюкзаке (Knapsack problem) входными данными являются набор
пар целых чисел - вес и - стоимость, а также два целых числа - максимальный вес и - минимальная стоимость. Требуется определить, можно ли выбрать такое подмножество пар, что их суммарная стоимость больше либо равна , а вес меньше или равен :
Доказательство NP-полноты
Для доказательства того, что
необходимо доказать два факта:Доказательство принадлежности к NP
В качестве сертификата возьмем удовлетворяющее условию задачи подмножество пар
. Очевидно, оно удовлетворяет всем требованиям, налагаемым на сертификат.Доказательство принадлежности к NPH
Сведем задачу о сумме подмножества к задаче о рюкзаке. Пусть - функция, осуществляющее сведение. Она будет устроена так:
Очевидно, сводимости по Карпу.
работает за полиномиальное от длины входа время. И удовлетворяет условиям