分支限界法 图文+01背包举例

一.分支限界法的思想:

1)在分支限界法中,每一个活结点只有一次机会成为扩展结点。

活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点

中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入

活结点表中。

2)此后,从活结点表中取下一结点成为当前扩展结点,并重复上述扩展

过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

 

二.分支限界法与回溯法的异同

1)求解目标:回溯法求解的目标时找出解空间树中满足约束条件的所有解,

而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束

条件的解中找出在某种意义下的最优解。

2)搜索方式不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则

以广度优先或以最小耗费优先的方式搜索解空间树。

三.分支界限法的边界

用分支界限法解决问题的关键是找边界,上界或下界。

1)对于一颗状态空间树的每一个结点所代表的部分解,要提供一种方法,

计算出通过这个部分解繁衍出的任何解在目标函数上的最佳值边界。

2)对于最小化问题,找下界,对于最大化问题,找上界。

四.分支界限法的分支

1)在当前树的未中止(活的)叶子节点中,选择其中最有希望的结点,

并生产它的所有子女。

2)比较活叶子结点的上界/下界,把具有最佳上界/下界的结点作为最有

希望的结点。

五.查找路径的中止条件

1)该结点的边界值不能超过目前最佳解的值。

2) 该结点无法代表任何可行解,因为它已经违反了约束条件。

3)该结点代表的可行解的子集只包含一个单独的点

(因此无法给出更多的选择)。

六。 例子

求最小值,找下界。

那么,下界如何找呢?

    我们可以按照行优先和列优先。 这里我们采用行优先,找出每一行最小值求和,那么最优解一定不会大于这个值,

因为这样选出的下界是可能违法约束条件的,这里的下界就是:

有一份工作派了两个人。

接着开始构树,start为开始的根节点,那么他会有几个分支呢?

 

看完第一张图再想想看,应该是4个分支,把接下来的分支都计算出

 

 

问题来了,为什么下面这张图改变了值呢?不是选3,1,4而是4,5,4

这里我们注意下不能选已经安排的工作,(这一层以前包括这一层都是已经安排的),其他行

选择最小值即可。

然后我们看,选哪一个继续扩展呢?是四个都扩展吗?

答案是否定的,因为其他三个是在未被安排的工作取最小值的情况下求的和,可能违反约束条件(每个工作派一个人),

在这种情况下都比别的小,没有必要扩展了,

接下来对第二个点扩展

重复构造的过程,

这个解即为最优解。

 

我们再看一个例子,

01背包问题

这个是求最大值,则求上界。

性价比最后一栏是第一个是10,不方便改啦(懒。。)

根据决策函数(这个不唯一,看个人怎么想),然后一样的每次选择当前最小(大)消耗

就是这样,嗯。

 

  • 11
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,针对您的问题,我将为您介绍如何使用分支限界来解决01背包问题。 01背包问题是指有一个背包,它的容量为C,有n件物品,每件物品的重量为w[i],价值为v[i],将这些物品放入背包中,使得背包中所装物品的总重量不超过C,且总价值最大。 分支限界是一种搜索算,它通过对问题空间的搜索,逐步缩小问题的范围,最终得到问题的最优解或近似最优解。使用分支限界解决01背包问题,首先需要对问题空间进行定义,即定义状态空间树。 状态空间树中的每个节点代表一个状态,每个状态表示某个物品是否放入背包中。如果某个节点代表的状态不满足约束条件,那么这个节点就被剪枝。如果某个节点代表的状态已经达到最终状态,那么这个节点就是叶子节点,可以计算出它的价值,并与当前最优解进行比较。 在计算状态空间树时,每个节点的上界可以通过贪心算得到。即对于剩余物品中价值最高的物品,如果它的重量小于背包剩余的容量,则将它放入背包中。如果它的重量大于背包剩余的容量,则将它部分放入背包中,使得背包恰好装满。 使用分支限界解决01背包问题的时间复杂度为O(2^n),其中n为物品的数量。因此,在实际应用中,需要对问题进行剪枝和优化,以减少搜索空间,提高算效率。 希望这个简单的介绍能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wym_king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值