分支限界法

分支界限法是在解空间上找出满足约束条件的一个解,或是在满足约束条件的解中找出使一目标函数值达到极大或极小的解,即在某种意义下的最优解。分支界限法以港独优先或以最小耗费优先的方式搜索解空间。分支界限法的策略是:在扩展结点处,先生成其所有的儿子结点,然后再从当前的活结点列表中选择下一个扩展结点。为了有效的选择下一个扩展结点,加速搜索进程,在每一或结点处计算一个函数值(限界),并根据函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间上有最优解的分支推进,以便迅速的找出一个最优解。它适合解决离散最优化问题。


分支限界法的基本思想

分支限界法常以广度优先或以最小耗费(最大收益)优先的方式搜索问题的解空间树。问题的解空间树是表示问题解空间的一刻有序树。砸分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有子结点。这些子结点中,导致不可行解或导致非最优解的子结点被舍弃,其余子结点被加入活结点表中。然后从活结点表中取下一个结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续找到所需的解活结点表为空时为止。

从活结点表中选择下一扩展结点的不同方式导致不同的分支限界法。最常见的有以下两种方式:

1.队列式分支分支限界法。将活结点表组织成一个队列,并按一个队列的先进先出原则选取下一个活结点为当期扩展结点。

2.优先队列式分支限界法。将活结点表组织成一个优先队列,并按优先队列中规定的结点优先级选取优先级最高的下一个结点成为当前扩展结点。

优先队列中规定的结点优先级常用一个与该结点相关的数值p来表示。结点的优先级的高低与数值p的大小相关。最大优先队列规定p值指较大的优先级最高。在算法实现时通常用最大堆来实现最大优先队列,用最大堆的deleteMax运算抽取堆中下一个结点成为当前扩展结点,体现最大效益优先原则。类似的,最小优先队列规定p值较小的结点的优先级较高。在算法实现时采用最小堆来实现最小优先队列,用最小堆的deleteMin运算抽取堆中下一个结点成为当前扩展结点,体现最小费用优先的原则。在面临实际问题的时候,要根据问题的特点确定选用最大优先队列或最小优先队列来表示解空间的活结点表。

Note:最大堆在数据结构中的专业名词是大根堆,最小堆在数据结构中的专业名词是小根堆。大根堆,小根堆看名词解释都不懂的,就不要折磨自己看什么算法了。


回溯法的深度优先遍历方式可以搜索出所有的可行解,分支限界法的广度优先遍历可以搜索出离散问题上最优解。

分支限界法在采用剪枝函数的时候更有效率,当然前提是剪枝函数定义的合理和有效。


数据结构和算法是相关度很高的,合理的数据结构可以优化算法,提高算法的运行效率。算法的前提是数据结构,数据结构定义越不清楚,算法就需要采用更通用的算法,更通用的算法必然对运行效率更难把握。数据结构和算法明明都是一家人吗。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值