Как оптимизировать решение для рюкзака 0/1?

Стандартное решение задачи о рюкзаке — O(nW), где мы будем увеличивать вес на +1 за раз, чтобы добраться до решения.

Есть ли какой-нибудь подход к проблеме рюкзака, который не требует увеличения веса на +1 за раз.

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

Capacity = 100 weights = [5, 10, 20] -> Capacity = 20 weights = [1, 2, 4]


person samol    schedule 16.06.2015    source источник


Ответы (1)


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

person Jordi Vermeulen    schedule 16.06.2015