📜  0/1背包使用分支定界

📅  最后修改于: 2021-04-27 18:17:33             🧑  作者: Mango

分支定界是一种算法设计范例,通常用于解决组合优化问题。这些问题通常在时间复杂度上呈指数关系,在最坏的情况下可能需要探索所有可能的排列。 Branch and Bound相对较快地解决了这些问题。

让我们考虑在0/1背包问题下理解分支定界。

给定两个整数数组val [0..n-1]wt [0..n-1] ,分别表示与n个项目相关联的值和权重。找出val []的最大值子集,以使该子集的权重之和小于或等于背包容量W。

让我们探索解决此问题的所有方法。

  1. 贪婪的方法是按每单位重量的价值从高到低的顺序挑选物品。贪婪方法仅适用于小背包问题,对于0/1背包可能无法产生正确的结果。
  2. 我们可以使用d ynamic PAGC(DP)为0/1背包问题。在DP中,我们使用大小为nx W的2D表。如果项目权重不是整数,则DP解决方案将不起作用
  3. 由于DP解决方案始终无法正常工作,因此一种解决方案是使用Brute Force 。对于n个项目,将生成2 n个解决方案,检查每个解决方案是否满足约束条件,并保存满足约束条件的最大解决方案。此解决方案可以表示为tree

    i2

  4. 我们可以使用Backtracking来优化蛮力解决方案。在树表示中,我们可以对树进行DFS。如果我们到达解决方案不再可行的地步,则无需继续探索。在给定的示例中,如果我们有更多的物品或较小的背包容量,则回溯将更加有效。 i4

分支定界

通过回溯的解决方案忽略了不可行的解决方案,其效果比暴力破解更好。如果我们知道以每个节点为根的最佳解决方案子树的界限,我们可以做得更好(比回溯)。如果子树中的最好比当前最好的差,我们可以简单地忽略该节点及其子树。因此,我们计算每个节点的边界(最佳解决方案),并在探索该节点之前将边界与当前的最佳解决方案进行比较。

下图使用的示例范围是: A下降可以给出315美元, B下降可以给出275美元, C下降可以给出225美元, D下降可以给出125美元, E下降可以给出30美元。在下一篇文章中,我们讨论了获得这些界限的过程。

i5

分支定界法是用于搜索解决方案的非常有用的技术,但是在最坏的情况下,我们需要完全计算整个树。充其量,我们只需要完全计算一条穿过树的路径,然后修剪其余的路径即可。

来源:
以上图片和内容均来自以下不错的链接。 http://www.cse.msu.edu/~torng/Classes/Archives/cse830.03fall/Lectures/Lecture11.ppt

分界线|第2组(0/1背包的实施)