算法入门7:分支限界法

来源:互联网 发布:linux命令创建文件 编辑:程序博客网 时间:2024/04/29 23:35

上一篇回溯法中已经提到过,回溯法的思想是深度优先搜索加剪枝,与之相对,分支限界法的思想是广度优先搜索加剪枝。

1. 分支限界法  广度优先搜素                                         

1. 简单概述

分支限界法思路的简单描述是:把问题的解空间转化成了图或者树的结构表示,然后使用广度优先搜索策略进行遍历,遍历的过程中记录和寻找所有可行解或者最优解。

基本思想类同于:

图的广度优先遍历

二叉树的层序遍历

也就是:对于当前节点,一次性扩展其所有可行的子节点。

对照图的广度优先遍历就很容易理解。

2. 详细描述

详细的描述则为:

1) 首先将问题的解空间转化成图或者树的结构表示,然后维护一张活节点表。

2) 初始时,将根节点加入活节点表

3) 当活节点表不空,从活节点表中取出一个节点,成为当前扩展节点。如果表为空,跳转至步骤6结束。

4) 判断当前扩展节点是否得到了一个可行解或更优解,如果是,记录或更新问题的解。

5)将当前扩展节点的所有可行子节点一次性全部生成,加入到活节点表中。跳转到步骤3

6)算法结束

 

活节点表的数据结构可以是FIFO队列或者优先权队列。

3. 回溯法应用

分支限界法通常用于求解问题的一个可行解或者最优解。

2. 经典问题                                    

1)装载问题

20-1背包问题

3)旅行售货员问题

4)八皇后问题

5)迷宫问题

6图的m着色问题

分支限界法和回溯法很相似,只是在空间树的搜索方式上不同(一个深度优化,一个广度优先)。

分支限界法的具体经典问题此处不再细述。其中一个经典案例《旅行售货员问题》可以参考我之前的一篇文章

        分支限界法----旅行售货员问题


转载本文请注明作者和出处

作者 :JarvisChu

出处:http://blog.csdn.net/jarvischu