Рюкзак Ветвь и Связанный

У меня есть следующие данные:

item   weight   value   value/weight
1      5        40      8
2      2        10      5
3      6        30      5
4      1        12      12
5      2        18      9

Емкость равна 10. Как продолжить расчет верхней границы для узла 0? Я вычисляю верхнюю границу для узла 0 следующим образом:

ub = v + [W-w] * [v/w]
ub = 0 + [10] * [8] = 80

Или мне нужно отсортировать предметы в порядке убывания их стоимости/веса как 12,9,8,5,5? а затем вычислить верхнюю границу? Или я правильно делаю, без сортировки, вычисления верхней границы и перехода к следующему пункту?

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

ub = 0 + [10] * [12] = 120 // if sorted

Спасибо уже за вашу помощь.


person Dangling Cruze    schedule 11.12.2013    source источник
comment
Я предполагаю, что это рюкзак 0-1, который вы пытаетесь решить? Как вы рассчитываете верхнюю границу? (есть много ограничивающих эвристик - некоторые из них приведут к повышению производительности, если элементы отсортированы, другие - нет)   -  person Andy Jones    schedule 12.12.2013
comment
Да, это рюкзак 0-1. Я выбираю предмет или нет. Верхняя граница, которую я рассчитываю, зависит исключительно от того, какой предмет я собираюсь выбрать следующим, и от того, какую ценность я буду иметь, если я умножу это на оставшуюся емкость в сумке. Я понял, что отсортированный список элементов даст мне большую верхнюю границу при первоначальных проверках, а затем я могу продолжить работу с другими элементами на основе этих верхних границ. Спасибо кстати.   -  person Dangling Cruze    schedule 15.12.2013


Ответы (1)


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

person Felipe Sulser    schedule 22.01.2014