分支限界法

分支限界法是一种常见的搜索算法,通过广度优先或最小耗费优先的方式搜索解空间树。本文介绍了分支限界法的基本原理,以优先权队列实现剪枝,并通过0/1背包问题为例进行详细解释。在实践中,要注意物品按单位重量价值排序,使用上限函数进行未来价值预估,以避免无效分支的扩展。此外,还需要注意节点的顺序和高度对解的影响,确保找到最优解。
摘要由CSDN通过智能技术生成

分支限定法,号称5大常用算法(回溯,贪心,动态规划,分治,分支限定法),一直认为分支限定法比较简单,无非就是宽搜+剪枝,所以练习不多,但是这次想尝试一下却出现了一些值得注意的易错点.

首先介绍下分支限定法,简单来说分支限界法以广度优先或以最小耗费优先的方式搜索解空间树。

举个例子,现在有这样一棵树

        

其中1,3访问完价值为6

       1,2,4访问完价值为5,那么1,2,4这个分支可以省去,因为就算你之后所有的节点都取最好的,也比不过1,3这条已知的分支(它也可以取最好,但是它之前的就比你好)

       当然还有你访问时要优先扩展价值较高的点,因为他们更有可能产生优秀的分支,而之后扫描较差的分支就可以直接剪去(而如果下一层先扫描差的,就可能让不良的分支也混进来了)。这里就需要用到一个优先权队列,直接用c++  stl  中的priority。

  顺便说下priority,弹出是pop,返回顶部元素是top,而最关键的关键值比较格式如下

struct node
{
    int vis[15];//每一个物品装入或没有
    int val
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值