2017-02-14 22 views
1

Iv'e работал над проектом, и я столкнулся со следующим сценарием: Нужно выбрать N = 2 ящика из набора M, в то время как M> N с лучшей суммой весов, но с 2 ограничениями :алгоритм Рюкзак с 2 ограничениями

  • Мы не можем выбрать один и тот же цвет коробки
  • Мы не можем выбрать один и тот же идентификатор окна

Коробки приходит сортируется с наибольшим весом на вершине

enter image description here

Я выбираю (Red1, Blue2) с алгоритмом Naive, начиная с самого высокого веса Red1, мы не могли добавить Blue1, потому что у нас был тот же ID 1, и мы не могли добавить Red2, потому что у нас была Red box с весом 10, мы закончили с общим весом 11, но мы могли бы в конечном итоге с 18,9, если мы выбираем Blue1 & Red2 N может быть больше, чем 2.

Является ли это NP-трудной задачей? Любые лучшие решения с хорошей эффективностью во время работы?

+0

Есть ли ограничение на количество разных цветов или количество разных идентификаторов? – Codor

+0

2 границы/ограничения, результат должен иметь разные цвета и разные идентификаторы с наивысшей суммой веса, которая возможна – ohadsas

ответ

0

Мы можем использовать DP решение со сложностью O(2^color * 2^id * M * N) или по отслеживанию + Обрезка со сложностью O(M choose N)

Так это зависит от того, насколько велика ограничение для M, N, цвет и ид.

+0

Я думал о расщеплении, это зависит от размера N и M N в основном 9-10, а M изменяется, может быть 10 - 350 – ohadsas

+0

с N <= 10 и M <= 350, обратная трассировка + эффективная обрезка может решить вашу проблему. – algojava