Какова связь между таблицей в ранце и динамическим программированием? - PullRequest
0 голосов
/ 21 декабря 2018

Извиняюсь за очень новый вопрос, так как я не могу найти ответ на него из разных источников.

В алгоритме ранца мы создаем таблицу, например, в https://www.geeksforgeeks.org/0-1-knapsack-problem-dp-10/

Я читал о проблеме ранца в книге Клейнберга.Насколько я понимаю, динамическое программирование заключается в том, чтобы разбить проблему на перекрывающиеся подзадачи - однако я видел эту таблицу, использованную для решения ранца в различных книгах / онлайн-ресурсах.Кажется, я не могу понять, как эта таблица связана с динамическим программированием?Мы что-нибудь запоминаем в этой таблице?Мне кажется, это умное решение для рюкзака, но не динамическое программирование.Я видел видео и тексты, где они решают проблему либо с помощью таблицы, либо с помощью динамического программного решения, но, похоже, никто не обеспечивает связь между ними.

1 Ответ

0 голосов
/ 21 декабря 2018

Это все еще динамическое программирование.Единственное отличие состоит в том, что алгоритм динамического программирования все еще не полиномиален в n, а в n и W.Для этих типов проблем необходимо различать значения, которые возникают естественным образом из-за ввода, и значения, которые part ввода.

Ваш ввод состоит из n различных элементов и число W;W явно, не подразумевается размером ввода.Поскольку мы используем некоторое эффективное кодирование (т. Е. Двоичное) для обеспечения W, размер W равен экспоненциальному в кодировке W.То есть вход содержит O (lg W) битов, представляющих W, но таблица, которую мы строим, имеет W строк (или столбцов, углубляющихся в том, как вы ее просматриваете).Это делает алгоритм экспоненциальным по размеру входных данных.

Однако, если мы ослабим наше обычное правило, что входные данные должны быть представлены эффективно , мы могли бы указать W, используя "унарную" запись;W 1 с на входе вместо двоичного представления.Теперь вы можете утверждать, что, поскольку размер входных данных является полиномиальным в n и W, а не в n и lg W, как раньше, таблица DP также является полиномиальной во входных данных.

Это примерно разница между сильной и слабой NP-жесткостью: если задача слабо NP-жесткая, то алгоритм полиномиального времени (обычно основанный на динамическом программировании) можно найти, если мы укажем унарное кодирование некоторого числового параметра, а нечем обычное двоичное кодирование.

...