1、第6章分支限界法 学习要点 理解分支限界法的广度优先搜索策略 掌握用分支限界法的算法框架 FIFO队列式优先队列式通过范例学习分支限界法的设计策略 分支限界法仍然是在问题的解空间上搜索问题解的算法 回溯法的求解目标是找出满足约束条件的所有解分支限界法的求解目标是找出满足约束条件的一个解 最优解 分支限界法的搜索策略是广度优先搜索 6 1分支限界法的基本思想 用分支限界法解问题时 应明确定义问题的解空间 问题的解空间至少应包含一个解 分支限界法常以广度优先或以最小耗费优先的方式搜索问题的解答树 在分支限界法中 一个结点一旦成为扩展结点 就一下产生它的所有儿子结点 优化策略 1利用限界函数在搜索过
2、程中 剪枝子树2利用优先函数选择同层结点作为扩展结点 6 2分支限界法的算法框架 1定义根结点t0作为初始扩展结点 2根结点t0进入队列3while 队不空 出队 t for j r0 j rn j 对t利用规则j发展新结点tj 利用限界函数判断tj是否可行 if 可行 若是目标结点则找到解 结束 否则进队 例1八数码难题 在3 3棋盘上 摆有8个旗子 标有数字1 8 棋盘上有一个空格 空格周围的棋子可以移到空格中 问题 给出一个初始布局 你能否找到一种最少的移动步骤变换到目标布局 分析八数码难题 1如何表示棋盘 2如何描述移动 二维数组 转化为空格的移动规则 上 下 左 右1234 算法策略 分支限界法 1从初始布局出发 先把移动一步后的布局全部找出 检查是否有目标布局 若有一定是最少移动步骤 2若没有 再从这些一步的布局出发 找到移动两步后的所有布局 再检查是否有目标布局 若有一定是最少移动步骤 如此继续 直到找到目标布局 由于是按移动步数从少到多产生布局的 所以 找到的第一个目标布局一定是最少步骤的 程序见文档 例2装载问题P196 程序见文档 例3布线问题P203 程序见文档