2014-09-15 7 views
2

knapsack problem можно решить в O(n²V), где V = max(v[i], i = 1,..,n) обозначает максимальное значение любого элемента. Если мы «сменим единицы» параметром округления θ = ε/n * V и рассмотрим измененные значения y[i] = ceil(v[i]/θ), мы получим время работы O(n³/ε) для любого фиксированногоε > 0.Полиномиальное приближение времени на рюкзак

В книге Алгоритм проектирования по Джон Клейнбергом, они заявляют:

Зависимость от требуемой точности ε не многочленом, так как время работы включает в себя 1/ε, а не log 1/ε.

Прежде всего, вся идея термина псевдо-полином не совсем ясно для меня, несмотря на то, что я читал несколько статей о нем. Однако, помимо этого пробела в знаниях, я в основном спрашиваю себя, почему зависимость от ε будет полиномиальной, если время работы будет включать log 1/ε вместо 1/ε.

ответ

1

Независимо от того, является ли проблема полиномиальным временем или нет, зависит от того, как кодируются его экземпляры. Например, я могу определить проблему PADDED-SATISFIABILITY, действительные экземпляры которой состоят из булевой формулы с n переменными, за которой следуют 2^n младших бит. Благодаря дополнению, PADDED-SATISFIABILITY разрешима в полиномиальное время (в отличие, по-видимому, SATISFIABILITY, NP-hard).

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

Если мы сделаем (частое) предположение о том, что 1/ε является положительным целым числом, то Клейнберг указывает, что полиномиальная зависимость будет на log 1/ε, так как это примерно число бит, требуемое для указания того, что параметр в двоичном формате. Количество бит в унарном представлении будет приблизительно 1/ε.

+0

'log 1/ε' - это приблизительно количество бит, необходимых для хранения' 1/ε' в двоичном формате. Это абсолютно ясно для меня, но почему это проблема? Не могли бы мы спорить так же о любом 'n' в' O (n^k) '? Даже когда 'n' является просто счетчиком циклов, мы должны сохранить это значение (в общем). Итак, что отличает 'n' от' 1/ε'? [Более того, почему мы рассматриваем унарное представление любого параметра?] – 0xbadf00d

+0

@ 0xbadf00d Если 'n' - это, скажем, количество элементов в списке, то сами элементы списка занимают линейное число бит, что делает его сортировкой нерелевантного представления 'n'. Если 'n' - просто число (например, для факторинга), то оно обрабатывается так же, как' 1/ε'. –

+0

@ 0xbadf00d Причиной думать об унарных представлениях является то, что они формально определяются псевдополиномиальным временем. Люди часто спрашивают о вариантах рюкзака здесь на переполнении стека; одним из комментариев или ответов часто является «это NP-жесткий, вам не повезло». Однако, поскольку рюкзак только слабо NP-жесткий, существует алгоритм, который хорошо работает на малых целых входах, что очень полезно на практике. [3-partition] (http://en.wikipedia.org/wiki/3-partition_problem), с другой стороны, легче для небольших целых входов. –

 Смежные вопросы

  • Нет связанных вопросов^_^