Проблема ранца - NP-полная, несмотря на динамическое программирование?


52

Проблемы с рюкзаком легко решаются динамическим программированием. Динамическое программирование выполняется за полиномиальное время; вот почему мы делаем это, верно?

Я читал, что это на самом деле NP-полная проблема, однако это означает, что решить проблему в полиномиальной задаче, вероятно, невозможно.

Где моя ошибка?


5
Имейте в виду, что DP полиномиален по «размеру таблицы». Таблица экспоненциально велика для рюкзака (см. Ответ Каве).
Рафаэль

Ответы:


41

Проблема ранец является NP-complete , когда числа приведены в качестве двоичных чисел. В этом случае динамическое программирование будет завершаться экспоненциально за много шагов (по размеру входа, то есть по количеству битов на входе) до завершения .

С другой стороны, если числа на входе даны в унарном порядке, динамическое программирование будет работать за полиномиальное время (по размеру входа).

Такого рода проблемы, называется слабо NP-complete .

2nnnnlgnO(n)=O(2lgn/2)

Этот вид алгоритма, то есть полином по наибольшему числу, являющемуся частью входных данных, но экспоненциальный по длине входных данных, называется псевдополиномиальным .


Но подумайте о предметах, которые нужно положить в рюкзак. Объекты должны быть введены, и такой вход должен быть полиномиальным с количеством объектов. Если объектов достаточно много, то входные данные являются полиномиальными с размером задачи. Так почему я не могу сказать, что проблема ранца - это проблема P с точки зрения размера таблицы? Я ошибаюсь?
Strin

mm2lgmm

Можете ли вы разбить входные данные на более мелкие входные данные, чье двоичное кодирование имеет размер, который завершает алгоритм за полиномиальное время, а затем объединяет решения?
Чар

@Kaveh "Размер ввода примерно 2 lg m" Я не понимаю, откуда вы берете эту часть. Соотношение между m(размер упаковки) и n(количество предметов) совершенно неизвестно, верно? И «когда числа даны как двоичные числа» ... но не могли бы вы сказать это ни за что? В большинстве алгоритмов мы говорим о размере входных данных в базе 10. Зачем здесь говорить о двоичном коде? И независимо от того, кодируете ли вы в двоичном, восьмеричном, десятичном и т. Д. Числе, actualколичество итераций в цикле основного алгоритма напрямую зависит от обоих nи W.
The111

1
@ The111, я думаю, будет лучше, если вы отправите это как новый вопрос, а я отправлю ответ. Я думаю, что ваш вопрос является более фундаментальным, и там комментарии не очень связаны с этим вопросом.
Каве

33

Основная путаница заключается в разнице между « размером » и « стоимостью ».

« Полиномиальное время » подразумевает полином по величине ввода.

« Псевдополиномиальное время » подразумевает полиномиальное значение входного значения. Можно показать (ниже), что это эквивалентно экспоненциальной величине входных данных.


NsizeNval

O(Nsizex)xN

O(Nvalx)xN

O(nW)W

Nsize=Logb(Nval)NvalbNval

Nval=bNsize

Nsize

O(bxNsize)b,xN


7
Здесь создали аккаунт, чтобы сказать огромное спасибо! Только после вашего примера я наконец понял это.
Inoryy

2
Ваш ответ бьет всех, браво!
Мухаммед Разиб

1
Чтобы добавить к этому замечательному ответу, мы можем сказать, что если мы изменим W с 100 на 101, размер проблемы не увеличится, размер увеличится, если мы добавим еще один бит к W, что сделает его вдвое больше, поэтому таблица будет количество строк в два раза больше, и поэтому при увеличении размера на единицу время задачи удваивается, поэтому оно экспоненциально.
Аминь

@bcorso Предположим, вам дано значение N. И вам нужно было найти сумму чисел от 1 до N, и вы использовали метод цикла for, который был бы псевдополиномиальным алгоритмом Времени?
Доллар Акшай

8

P=NP

Однако существуют различные варианты (например, 0-1 рюкзак и другие ), которые могут иметь или не иметь решения за полиномиальное время или хорошие приближения. Но это не то же самое, что общая проблема ранца. Кроме того, могут существовать эффективные алгоритмы, которые работают для конкретных (семейств) экземпляров , но эти алгоритмы потребуют больше времени в других экземплярах.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.