分支限界算法
分支限界算法是另一种系统搜索解空间的方法。
分支限界算法也常把解空间组织成树的结构(常捡的,子集树和排列树),一般采用广度优先(BFS)或最小耗费来搜索树
主要思想
对一个扩展结点,一次生成其所有的子节点,将不可能产生可行解(或最优解)的结点舍去,其余的记入活结点表;按照一定规则,从活结点表中取出下一个结点作为新的扩展结点,重复展开,直到得到可行解(或最优解)或活结点表为空
限界函数
限界函数可以在求解最优解问题时,用来加速搜索
函数给出每个可行结点对应子树能获得的最大价值的上界,如果该上界没有比当前的最优值更大,则说明该子树不会产生问题的最优解,可以剪去
两种常见的分支限界
先进先出(FIFO)
从活结点表中取出结点的顺序与加入的顺序相同,活结点表采用队列实现
最小耗费或最大收益
每个活结点有一个对应的最小耗费(或最大收益),每次取出时选择最优的结点进行展开
分支限界和回溯
①分支限界法的结果是求出满足的一组可行解(或可行解中的一个最优解);回溯法的结果是求出所有满足的可行解
②搜索树的方法不同,分支限界通常用广度优先(BFS)或最小耗费;回溯通常用深度优先(DFS)
③扩展结点的展开方式不同,分支限界的结点只有一次成为活结点的机会
④分支限界算法对空间的需求比回溯算法大得多(活结点表),因此当内存容量有限时,使用回溯算法常常更容易成功