五大常用算法:分支限界法

来源:互联网 发布:淘宝刷客违法吗 编辑:程序博客网 时间:2024/05/16 15:47

一、基本描述

类似于回溯法,也是一种在问题的解空间树 T 上搜索问题解的算法,但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是则是找出满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。

- 分支搜索算法

所谓“分支”就是采用广度优先的策略,一次搜索E-节点的所有分支,也就是所有相邻节点,抛弃不满足约束条件的节点,其余节点加入活节点表。然后从表中选择一个节点作为下一个E-节点,继续搜索。

选择下一个E-节点的方式不同,则会有几种不同的分支搜索方式。
1. FIFO 搜索
2. LIFO 搜索
3. 优先队列式搜索

二、分支限界法的一般过程

由于求解目标不同,导致分支限界法与回溯法在解空间树 T 上的搜索方式也不相同。回溯法以深度优先的方式搜索解空间树T,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T。

分支限界法的搜索策略是:在扩展节点处,先生成其所有的儿子节点(分支),然后再从当前的活节点表中选择下一个扩展节点,为了有效地选择下一扩展节点,以加速搜索的进程,在每一活节点处,计算一个函数值(限界),并根据这些已计算出的函数值,从当前活节点表中选择一个最有利的的节点作为扩展节点,使搜索朝着解空间树上最优解的分支推进,以便尽快地找出一个最优解。

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。问题的解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树,在搜索问题的解空间树时,分支限界法与回溯法对当前扩展节点所使用的扩展方式不同。在分支限界法中,每一个活节点只有一次机会称为扩展节点。活节点一旦成为扩展节点,就一次性产生其所有儿子节点。在这些儿子节点中,那些导致不可行解或导致非最优解的儿子节点被舍弃,其余儿子节点被加入活节点表中。此后,从活节点表中取下一节点成为当前扩展节点,并重复上述节点扩展过程。这个过程一直持续到找到所有求的解或活节点表为空时为止。

三、回溯法和分支限界法的一些区别

有一些问题其实无论用回溯法还是分支限界法都可以得到很好的解决,但是另外一些则不然。也许我们需要具体一些的分析——到底何时使用分支限界而何时使用回溯法呢?

回溯法和分支限界法的一些区别:

  1. 方法对解空间树的搜索方式
  2. 储存节点的常用数据结构
  3. 节点储存特性常用应用
  4. 回溯法深度优先搜索堆栈活节点的所有可行子节点被遍历后才被从栈中弹出,找出满足约束条件的所有解
  5. 分支限界法广度优先或最小消耗优先搜索队列 ,优先队列每个节点只有一次成为活节点的机会找出满足约束条件的一个解或特定意义下的最优解
0 0
原创粉丝点击