【问题标题】:Knapsack variation?背包变体?
【发布时间】:2012-03-26 00:22:28
【问题描述】:

我搜索了这种类型的算法并红色了很多东西,但我找不到我正在寻找的确切内容。

所以,我要去购物,我有 x 个钱,我的卡车最多可以承受 y 个重量,并且每件商品都有一个奖励积分、一个重量和一个价格。输出应该给出可以获得的最大奖励积分,以使所选物品的总重量不超过卡车的容量和我必须花费的钱!

我可以在这里寻求帮助,你们知道算法的名称吗?我应该如何进行?我必须在 C 中完成!

谢谢!!

【问题讨论】:

标签: c algorithm knapsack-problem variation


【解决方案1】:

你试过什么?

这些类型的问题通常属于优化或约束满足的范畴。

尝试为您的问题编写一个函数表达式,看看您是否可以使用简单的微积分或单纯形方法来解决它。

【讨论】:

  • 我还没有开始,我只是想了解最好的方法!动态编程、记忆等。过去 6 周我一直在解决 NP 问题,但我不知道如何从这个开始
【解决方案2】:

我知道背包问题的两种变体。 0-1的版本不能包含分数权重(取不取),比如我不能取次优的一半。另一个版本则相反,允许使用小数项。这个小差异非常显着,有利于小数版本。

分数版本可以通过贪心算法求解。您可以尽可能多地拿走最有价值的“单价”物品。重复直到你的卡车装满为止。

0-1 版本有点难,因为它不能通过简单的贪心算法来解决。例如,假设您的卡车可以承载 800 磅。我们可以从一个

  1. 1 桌子重 500 磅,价值 1000 美元(单价 2 美元/磅)
  2. 1 个长凳:重量 - 701 磅:价值 - 1577.25 美元:单位 2.25 美元/磅
  3. 3 书柜:重量 - 100 磅:价值 - 200 美元:单位 2 美元/磅

贪心算法的总奖金为 1577.25 美元。
最佳值是 3 个书柜,桌子 = 1600 美元。

如果以上是分式背包版本,则只需花费 1775.25 美元即可购买长凳和 99 磅的桌子/书柜。

在 0-1 的情况下,我们需要使用动态编程之类的方法来检查所有解决方案。

【讨论】:

    【解决方案3】:

    商品重量和商品价格是约束条件。奖励学分是目标。因此,您有一个多维背包问题(一个目标;两个约束)。众所周知的动态规划解背包会泛化,但复杂度会随着约束的数量呈指数增长。

    【讨论】:

      猜你喜欢
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2018-01-31
      • 2014-01-06
      相关资源
      最近更新 更多