DAA - Рюкзак 0-1

В этом уроке ранее мы обсуждали проблему дробного ранца с использованием подхода Greedy. Мы показали, что подход Гриди дает оптимальное решение для дробного ранца. Тем не менее, эта глава расскажет о проблеме ранца 0-1 и ее анализе.

В рюкзаке 0-1 предметы не могут быть разбиты, что означает, что вор должен взять предмет целиком или оставить его. Это причина называть его 0-1 рюкзаком.

Следовательно, в случае 0-1 ранца значение x i может быть либо 0, либо 1 , где другие ограничения остаются прежними.

0-1 Рюкзак не может быть решен жадным подходом. Жадный подход не гарантирует оптимального решения. Во многих случаях жадный подход может дать оптимальное решение.

Следующие примеры установят наше утверждение.

Пример-1

Давайте рассмотрим, что вместимость рюкзака составляет W = 25, а предметы, как показано в следующей таблице.

Вещь В С D
прибыль 24 18 18 10
Вес 24 10 10 7

Без учета прибыли на единицу веса ( p i / w i ), если мы применим подход Greedy для решения этой проблемы, будет выбран первый элемент A , так как он принесет максимальную прибыль среди всех элементов.

После выбора элемента A больше не будет выбран. Следовательно, для данного набора предметов общая прибыль составляет 24 . Принимая во внимание, что оптимальное решение может быть достигнуто путем выбора пунктов B и C, где общая прибыль составляет 18 + 18 = 36.

Пример-2

Вместо выбора элементов на основе общего преимущества, в этом примере элементы выбираются на основе отношения p i / w i . Давайте рассмотрим, что вместимость рюкзака составляет W = 60, и предметы, как показано в следующей таблице.

Вещь В С
Цена 100 280 120
Вес 10 40 20
соотношение 10 7 6

Используя жадный подход, выбирается первый элемент А. Затем выбирается следующий элемент B. Следовательно, общая прибыль составляет 100 + 280 = 380 . Тем не менее, оптимальное решение этого случая может быть достигнуто путем выбора пунктов B и C , где общая прибыль составляет 280 + 120 = 400 .

Следовательно, можно сделать вывод, что жадный подход может не дать оптимального решения.

Для решения 0-1 ранца требуется подход динамического программирования.

Постановка задачи

Вор грабит магазин и может нести максимальный вес W в свой рюкзак. Есть n предметов, и вес i- го предмета равен w i, а прибыль от выбора этого предмета равна p i . Какие вещи должен взять вор?

Динамически-программный подход

Позвольте мне быть номером с наибольшим номером в оптимальном решении S для W долларов. Тогда S ' = S - {i} является оптимальным решением для W - w i долларов, а значение решения S равно V i плюс значение подзадачи.

Мы можем выразить этот факт в следующей формуле: определите c [i, w] как решение для пунктов 1,2,…, i и максимального веса w .

Алгоритм принимает следующие входные данные

  • Максимальный вес мамы W

  • Количество предметов n

  • Две последовательности v = <v 1 , v 2 ,…, v n > и w = <w 1 , w 2 ,…, w n >

 Dynamic-0-1-knapsack (v, w, n, W) 
for w = 0 to W do 
   c[0, w] = 0 
for i = 1 to n do 
   c[i, 0] = 0 
   for w = 1 to W do 
      if w i ≤ w then 
         if v i + c[i-1, w-w i ] then 
            c[i, w] = v i + c[i-1, w-w i ] 
         else c[i, w] = c[i-1, w] 
      else 
         c[i, w] = c[i-1, w] 

Набор элементов, которые нужно взять, может быть выведен из таблицы, начиная с c [n, w] и прослеживая назад, откуда пришли оптимальные значения.

Если c [i, w] = c [i-1, w] , то элемент i не является частью решения, и мы продолжаем трассировку с помощью c [i-1, w] . В противном случае элемент i является частью решения, и мы продолжаем трассировку с помощью c [i-1, wW] .

Анализ

Этот алгоритм занимает θ ( n , w ) раз, так как таблица c имеет ( n + 1). ( W + 1) записей, где каждая запись требует θ (1) времени для вычисления.