Рубрики

Схема аппроксимации полиномиального времени

Это очень хорошо известный факт, что нет известного решения полиномиального времени для задач NP Complete, и эти проблемы часто встречаются в реальном мире (см. Это , это и это, например). Поэтому должен быть способ справиться с ними. Мы видели алгоритмы для этих задач, которые являются приблизительными (например, 2 приблизительными для коммивояжера ). Можем ли мы сделать лучше?

Р olynomial Т IME pproximation S cheme (СПТ) представляет собой тип приближенных алгоритмов , которые обеспечивают пользователю контроль над точность , которая является желательным признаком. Эти алгоритмы принимают дополнительный параметр ε> 0 и обеспечивают решение, которое (1 + ε) является приближенным для минимизации и (1 — ε) для максимизации. Например, рассмотрим задачу минимизации, если ε равно 0,5, то решение, обеспечиваемое алгоритмом PTAS, приблизительно равно 1,5. Время работы PTAS должно быть полиномиальным с точки зрения n, однако оно может быть экспоненциальным с точки зрения ε.

В алгоритмах PTAS показатель степени многочлена может резко возрасти при уменьшении ε, например, если время выполнения равно O (n (1 / ε)! ), Что является проблемой. Существует схема строже, F ully Р olynomial Т IME pproximation S cheme (FPTAS). В FPTAS алгоритм должен быть полиномиальным как по размеру задачи n, так и по 1 / ε.

Пример (проблема с ранцем 0-1):
Мы знаем, что рюкзак 0-1 — NP Complete. Для этого существует псевдополиномиальное решение на основе DP. Но если входные значения высоки, то решение становится неосуществимым и возникает необходимость приблизительного решения. Одним из приближенных решений является использование подхода Greedy (вычислите значение на кг для всех предметов и поместите сначала самое высокое значение на кг, если оно меньше W), но подход Greedy не является PTAS, поэтому мы не можем контролировать точность.

Ниже приведено решение FPTAS для задачи о ранце 0-1:
Входные данные:
W (вместимость рюкзака)
val [0..n-1] (значения элементов)
wt [0..n-1] ( вес предметов)

  1. Найти элемент с максимальной оценкой, т. Е. Найти максимальное значение в val []. Пусть это максимальное значение будет maxVal.
  2. Вычислить поправочный коэффициент k для всех значений
          k  = (maxVal * ε) / n
  3. Настройте все значения, т. Е. Создайте новый массив val '[], значения которого делятся на k. Делайте следующее для каждого значения val [i].
          val'[i] = floor(val[i] / k)
  4. Запустите решение на основе DP для уменьшенных значений, i, e, val '[0..n-1] и всех других параметров.

Вышеупомянутое решение работает за полиномиальное время в терминах как n, так и ε. Решение, предоставленное этим FPTAS, является (1 — ε) приближенным. Идея состоит в том, чтобы округлить некоторые из наименее значимых цифр значений, после чего они будут ограничены полиномом и 1 / ε.

Пример:

val[] = {12, 16, 4, 8}
wt[]  = {3, 4, 5, 2}
W = 10
ε = 0.5
 
maxVal = 16 [maximum value in val[]]
Adjustment factor, k = (16 * 0.5)/4 = 2.0

Now we apply DP based solution on below modified 
instance of problem.

val'[] = {6, 8, 2, 4}  [ val'[i] = floor(val[i]/k) ]
wt[] = {3, 4, 5, 2}
W = 10

Как решение (1 — ε) * OPT?
Здесь OPT является оптимальным значением. Пусть S будет множеством, произведенным вышеупомянутым алгоритмом FPTAS, и общее значение S будет val (S). Нам нужно показать, что

       val(S) >= (1 - ε)*OPT 

Пусть O — множество, полученное оптимальным решением (решение с общим значением OPT), т. Е. Val (O) = OPT.

       val(O) - k*val'(O) <= n*k 
       [Because val'[i] = floor(val[i]/k) ] 

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

      val'(S) >= k . val'(O)
              >= val(O) - nk
              >= OPT - ε * maxVal
              >= OPT - ε * OPT [OPT >= maxVal]
              >= (1 - ε) * OPT 

Источники:
http://math.mit.edu/~goemans/18434S06/knapsack-katherine.pdf
https://en.wikipedia.org/wiki/Polynomial-time_approximation_scheme

Эта статья предоставлена Dheeraj Gupta. Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Схема аппроксимации полиномиального времени

0.00 (0%) 0 votes