【发布时间】:2013-12-01 05:38:26
【问题描述】:
对于一项作业,我收到了装箱问题,并要求我展示如何从优化版本解决问题的决策版本,反之亦然。我知道要解决决策版本,您只需将优化版本中使用的 bin 数量与指定的最大 bin 数量进行比较,但我如何使用决策版本来解决优化版本?
【问题讨论】:
标签: algorithm optimization bin-packing
对于一项作业,我收到了装箱问题,并要求我展示如何从优化版本解决问题的决策版本,反之亦然。我知道要解决决策版本,您只需将优化版本中使用的 bin 数量与指定的最大 bin 数量进行比较,但我如何使用决策版本来解决优化版本?
【问题讨论】:
标签: algorithm optimization bin-packing
您可以使用决策版本来解决优化版本,通过观察如果N bins 足够,那么K > N bins 也足够。
从单个 bin 开始,然后在其上运行决策版本。如果答案是true,你就完成了;否则,请继续将垃圾箱数量加倍,直到达到true。假设您在尝试N = 2 ^ k 时得到true 的答案。然后您可以在M = 2^(k-1) 和N 之间运行二分搜索,以找到优化问题的精确解(N 和k 都来自上一步)。
考虑这个例子:假设最优解是 14。然后您可以尝试以下决策问题序列来找到答案:
false
false(加倍1)false(加倍2)false(加倍4)true(加倍 8;我们有一个 true,所以继续进行二分搜索)false(8 到 16 之间的中点)true(12 到 16 之间的中点)false(12 到 14 之间的中点)一般来说,可以在对数时间内找到答案(即在 Log2(Answer) 中)。
一旦您知道包装 X 对象所需的箱数 N 后,请在一侧的项目和另一侧的 N 箱之间运行二分匹配算法。假设正确解决了决策问题,那么这样的二分匹配肯定存在,and can be found in polynomial time。
【讨论】:
f(n) 步,那么查找大小需要sum_{n \in S}f(n) 步,其中 S 是需要测试的O(log(N)) 大小的问题大小集。