上一篇回溯法中已经提到过,回溯法的思想是深度优先搜索加剪枝,与之相对,分支限界法的思想是广度优先搜索加剪枝。
1. 分支限界法 – 广度优先搜素
1. 简单概述
分支限界法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用广度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。
基本思想类同于:
图的广度优先遍历
二叉树的层序遍历
也就是:对于当前节点,一次性扩展其所有可行的子节点。
对照图的广度优先遍历就很容易理解。
2. 详细描述
详细的描述则为:
1) 首先将问题的解空间转化成图或者树的结构表示,然后维护一张活节点表。
2) 初始时,将根节点加入活节点表
3) 当活节点表不空,从活节点表中取出一个节点,成为当前扩展节点。如果表为空,跳转至步骤6结束。
4) 判断当前扩展节点是否得到了一个可行解或更优解,如果是,记录或更新问题的解。
5)将当前扩展节点的所有可行子节点一次性全部生成,加入到活节点表中。跳转到步骤3
6)算法结束
活节点表的数据结构可以是FIFO队列或者优先权队列。
3. 回溯法应用
分支限界法通常用于求解问题的一个可行解或者最优解。
2. 经典问题
(1)装载问题
(2)0-1背包问题
(3)旅行售货员问题
(4)八皇后问题
(5)迷宫问题
(6)图的m着色问题
分支限界法和回溯法很相似,只是在空间树的搜索方式上不同(一个深度优化,一个广度优先)。
分支限界法的具体经典问题此处不再细述。其中一个经典案例《旅行售货员问题》可以参考我之前的一篇文章
转载本文请注明作者和出处
作者 :JarvisChu
出处:http://blog.csdn.NET/jarvischu