6-1分支限界法
1.分支限界法与回溯法的不同
(1)求解目标:
回溯法的求解目标是找出解空间树中满足约束条件的所有解(或一个最优解),
而分支限界法的求解目标则是找出满足约束条件的一个解(或最优解)。
(2)搜索方式的不同∶
回溯法以深度优先的方式搜索解空间树,
而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。
2.分支限界法基本思想
以广度优先或最小耗费(最大效益)优先的方式搜索问题的解空间树。
每个活结点只有一次机会成为扩展结点并一次性产生其所有儿子结点。
儿子结点中导致不可行解或非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
如是最小耗费优先,活结点表需要重新排序。
此后从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
3.广度优先和最小耗费优先的区别
4.常见的两种分支限界法
(1)队列式(FIFO)分支限界法
按照队列先进先出(FIFO)原则选取下一个结点为扩展结点。
(2)优先队列式分支限界法
按照优先队列中规定的优先级选取优先级最高的结点成为当前扩展结点。
5.小结
1.队列式:活结点表是一个队列,新扩展出的满足条件的活结点追加在队尾。
这里需要加入层次标志(如-1),或记录下层编号在活结点中。
2.优先队列式∶活结点表是优先队列,一般使用堆(大顶堆或小顶堆)存储,
优点是只需要O(logn )时间复杂性完成插入或者删除(取堆顶结点,即优先级最高的结点)
3.构造解方法:活结点通过记录其父节点地址,及左孩子标志去构造最优解。
在找到最优值时,回溯方法找到最优解。也可在扩展出的结点中记录构造的解,如问题规模较大时,应考虑压缩存储。
4.分支限界法的剪枝方法:
(1)对于子集树,左右分支剪枝策略不同,
(2)对于排列树,n叉树,剪枝策略是相同的。
5.算法的结束控制:
(1)队列式分支限界,活结点表为空
(2)优先队列式,叶子结点成为扩展结点(在确认后面的活结点不存在更好的解)或队列为空。通常叶子结点加入优先队列中。