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

Материал из Викиконспекты
Перейти к: навигация, поиск
НЕТ ВОЙНЕ

24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.

Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.

Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.

Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.

Антивоенный комитет России

Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки.

Формулировка задачи

В задаче о рюкзаке (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]:

[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]

Доказательство 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

Сведем задачу о сумме подмножества к задаче о рюкзаке. Пусть [math]f\!\!:(S,s) \to (P,c,p)[/math] - функция, осуществляющее сведение. Она будет устроена так:

[math]f(S,s) = ((S,S),s,s)[/math],

То есть, для каждого числа [math]q \in S[/math] создадим предмет [math](q,q)[/math] с весом и стоимостью, равными значению числа [math]q[/math]. А значения [math]c[/math] и [math]p[/math] возьмем равными [math]s[/math].

  • Очевидно, [math]f~[/math] работает за полиномиальное от длины входа время.
  • Если исходная задача о сумме подмножества имела решение [math]S'[/math], то набор пар [math]P'[/math] с весами, равными числам из [math]S'[/math], будет решением задачи о рюкзаке.
  • В обратную сторону - аналогично.