80 likes | 209 Views
算法设计与分析. 山东师范大学计算机系 授课:徐连诚,软件工程研究所 (3432) 2005 年 9 月 5 日 —2006 年 1 月 20 日 主页: http://lchxu.welkind.net/ 邮箱: lchxu@163.com 镜像: http://lchxu1.welkind.net /( 迅腾 ) http://lchxu2.welkind.net / ( 网易 ). 第六章 分支限界法. 学习要点 理解分支限界法的剪枝搜索策略。 掌握分支限界法的算法框架 队列式 (FIFO) 分支限界法 优先队列式分支限界法
E N D
算法设计与分析 山东师范大学计算机系 授课:徐连诚,软件工程研究所(3432) 2005年9月5日—2006年1月20日 主页:http://lchxu.welkind.net/ 邮箱:lchxu@163.com 镜像:http://lchxu1.welkind.net/(迅腾) http://lchxu2.welkind.net/(网易)
第六章 分支限界法 • 学习要点 • 理解分支限界法的剪枝搜索策略。 • 掌握分支限界法的算法框架 • 队列式(FIFO)分支限界法 • 优先队列式分支限界法 • 通过应用范例学习分支限界法的设计策略。 • 单源最短路径问题 • 装载问题; • 布线问题 • 0-1背包问题; • 最大团问题; • 旅行售货员问题 • 电路板排列问题 • 批处理作业调度问题
引言 • 分支限界法类似于回溯法,也是一种在问题的解空间树T中搜索问题解的算法。 • 分支限界法与回溯法的求解目标不同: • 回溯法是找出满足约束条件的所有解 • 分支限界发誓找出满足条件的一个解,或某种意义下的最有解 • 搜索方式不同 • 回溯法:深度优先 • 分支限界法:广度优先或最小耗费优先
6.1 分支限界法的基本思想 • 一、基本思想 • 二、常见的两种分支限界法 • 三、0-1背包问题 • 四、旅行售货员问题
一、基本思想 • 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。 • 在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。 • 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
二、常见的两种分支限界法 • 从活结点表中选择下一扩展结点的不同方式导致不同的分支限界法: • 队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。 • 优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。 • 最大优先队列:使用最大堆,体现最大效益优先 • 最小优先队列:使用最小堆,体现最小费用优先
三、0-1背包问题 • 考虑如下0-1背包问题的实例: n=3, c=30, w=[16,15,15], p=[45,25,25] • 队列式分支限界法: [A] B, C => B, C [B, C] D, E => E [C, E] F, G => F, G [E, F, G] J, K => K(45) [1,0,0] [F, G] L, M =>L(50) [0, 1, 1] M(25) [G] N, 0 =>N(25), O(0) 不搜索一不可行结点为根的子树 • 优先队列式分支限界法: [A] B, C => B(45), C(0) [B, C] D, E => E(45) [E, C] J, K => K(45) [1, 0, 0] [C] F, G => F(25), G(0) [F, G] L, M => L(50), [0, 1, 1] M(25) [G] N, O => N(25), O(0) • 可用剪枝函数加速搜索 A 1 0 B C D E F G H I J K L M N O
四、旅行售货员问题 • 队列式分支限界法: [A] B, C, D [B, C, D] E, F [C, D, E, F] G, H [D, E, F, G, H] I, J [E, F, G, H, I, J] K(59) [1,2,3,4] [F, G, H, I, J] L(66) [G, H, I, J] M(25) [1, 3, 2, 4] [H, I, J] 1-3-4(26) [I, J] O(25) [J] P(59) • 优先队列式分支限界法: [A] B, C, D => B(30), C(6), D(4) [D, C, B] I, J => I(14), J(24) [C, I, J, B] G, H => G(11), H(26) [G, I, J, B, H] M => M(25) [1, 3, 2, 4] [I, J, B, H] O => O(25) [J, B, H] P => P(59) [B, H] B, H 限界掉 4 1 30 2 6 5 10 3 4 20 A B C D E F G H I J K L M N O P