Lintcode 关于分支限界算法的总结

来源:互联网 发布:货代软件系统 编辑:程序博客网 时间:2024/05/16 14:43

1.分支限界法是一个用途十分广泛的算法,运用这种算法的技巧性很强,不同类型的问题解法也各不相同。

2.分支限界法的基本思想是对有约束条件的最优化问题的所有可行解(数目有限)空间进行搜索。

(1)该算法在具体执行时,把全部可行的解空间不断分割为越来越小的子集(称为分支),并为每个子集内的解的值计算一个下界或上界(称为限界)。

(2)在每次分支后,对凡是界限超出已知可行解值那些子集不再做进一步分支。这样,解的许多子集(即搜索树上的许多结点)就可以不予考虑,从而缩小了搜索范围。

(3)这一过程一直进行到找出可行解为止,该可行解的值不大于任何子集的界限。

(4)这种算法一般可以求得最优解。

4.在分支限界法中,每一个活结点只有一次机会成为扩展结点。
(1)活结点一旦成为扩展结点,就一次性产生其所有儿子结点。
(2)在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
(3)从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。

(4)这个过程一直持续到找到所需的解或活结点表为空时为止。

5.从活结点表中选择下一个活结点作为新的扩展结点,分支限界算法通常可以分为两种形式:
(1)FIFO(First In First Out)分支限界算法
按照先进先出(FIFO)原则选择下一个活结点作为扩展结点,即从活结点表中取出结点的顺序与加入结点的顺序相同。
(2)最小耗费或最大收益分支限界算法
在这种情况下,每个结点都有一个耗费或收益。
根据问题的需要,可能是要查找一个具有最小耗费的解,或者是查找一个具有最大收益的解。

6.实现分支限界算法时,首先确定目标值的上下界,边搜索边减掉搜索树的某些分支,提高搜索效率。
7.在搜索时,绝大部分需要用到剪枝。“剪枝”是搜索算法中优化程序的一种基本方法,需要通过设计出合理的判断方法,以决定某一分支的取舍。
8.若我们把搜索的过程看成是对一棵树的遍历,那么剪枝就是将树中的一些“死结点”,不能到达最优解的枝条“剪”掉,以减少搜索的时间。
9.分支限界法类似于回溯法,是一种在问题的解空间树T上搜索问题解的算法。

10.一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。