【问题标题】:Bin packing, Decision vs Optimization装箱,决策与优化
【发布时间】:2013-12-01 05:38:26
【问题描述】:

对于一项作业,我收到了装箱问题,并要求我展示如何从优化版本解决问题的决策版本,反之亦然。我知道要解决决策版本,您只需将优化版本中使用的 bin 数量与指定的最大 bin 数量进行比较,但我如何使用决策版本来解决优化版本?

【问题讨论】:

    标签: algorithm optimization bin-packing


    【解决方案1】:

    您可以使用决策版本来解决优化版本,通过观察如果N bins 足够,那么K > N bins 也足够。

    从单个 bin 开始,然后在其上运行决策版本。如果答案是true,你就完成了;否则,请继续将垃圾箱数量加倍,直到达到true。假设您在尝试N = 2 ^ k 时得到true 的答案。然后您可以在M = 2^(k-1)N 之间运行二分搜索,以找到优化问题的精确解(Nk 都来自上一步)。

    考虑这个例子:假设最优解是 14。然后您可以尝试以下决策问题序列来找到答案:

    • 1 --> false
    • 2 --> false(加倍1)
    • 4 --> false(加倍2)
    • 8 --> false(加倍4)
    • 16 --> true(加倍 8;我们有一个 true,所以继续进行二分搜索)
    • 12 --> false(8 到 16 之间的中点)
    • 14 --> true(12 到 16 之间的中点)
    • 13 --> false(12 到 14 之间的中点)

    一般来说,可以在对数时间内找到答案(即在 Log2(Answer) 中)。

    一旦您知道包装 X 对象所需的箱数 N 后,请在一侧的项目和另一侧的 N 箱之间运行二分匹配算法。假设正确解决了决策问题,那么这样的二分匹配肯定存在,and can be found in polynomial time

    【讨论】:

    • 我可以看到你打算用这个去哪里,这将产生正确数量的垃圾箱。但我看不出它是如何判断每个垃圾箱中的物品的?
    • 如果大小为 n 的决策问题需要f(n) 步,那么查找大小需要sum_{n \in S}f(n) 步,其中 S 是需要测试的O(log(N)) 大小的问题大小集。
    • 最后一段是完全错误的。 Bin-Packing 决策问题是 NP-Complete,这意味着搜索问题是 NP-Hard。如果您的算法是正确的,则 P 必须等于 NP,因为 Bin-Packing 问题的搜索变体可以通过以下算法在多项式时间内解决:“对于特定数量的 bin $k$,运行二分匹配算法从item到bins。如果返回的匹配有效,则输出赋值,否则输出问题无解。为了使您的算法起作用,这个也是如此。它没有。
    • @codetaku NP-hardness/NP-completeness 与我的答案有什么关系? OP 想知道如何解决装箱优化问题,假设他已经有一个决策问题的解决方案。没有别的了。
    • @codetaku 要详细说明上述评论,他插入到我描述的算法中的解决方案可能需要很长时间来计算。我假设他给了我一个解决决策问题的函数——就像变魔术一样。我的工作是构建一个使用该魔术算法作为构建块的优化解决方案。如果该算法恰好是 NP-Complete,我的算法将需要很长时间。
    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 2020-06-05
    • 2012-12-14
    • 2021-12-12
    • 2018-02-11
    • 2011-11-24
    • 2021-07-03
    • 2011-07-03
    相关资源
    最近更新 更多