- 20
- 0
- 约7.05千字
- 约 10页
- 2017-02-19 发布于湖北
- 举报
* 算法设计与分析 * 此时,堆中仅剩下一个活结点C,它成为当前扩展结点。它的2个儿子结点F和G均为可行结点。 Bestp 45,G.up 25 bestp,结点G被剪枝。 A B C D E F G H I J K L M N O 1 1 1 0 0 1 0 0 1 1 0 0 1 0 w [16, 15, 15],p [45, 25, 25],c 30 * 算法设计与分析 * 结点F的2个儿子结点L和M均为叶结点。 Bestp 45,M.up 25 bestp,结点M被剪枝。 叶结点L相应于价值为50的可行解。叶结点L所相应的解成为当前最优解。 Bestp 50。 存储活结点的堆已空,算法终止。算法搜索得到最优值为50。相应的最优解是从根结点A到结点L的路径 0,1,1 。 A B C D E F G H I J K L M N O 1 1 1 0 0 1 0 0 1 1 0 0 1 0 w [16, 15, 15],p [45, 25, 25],c 30 * 算法设计与分析 * 举例:0-1背包问题 设有4个物品,其重量分别为 4,7,5,3 ,价值分别为 40,42,25,12 ,背包容量c 10。 首先,将给定物品按单位重量价值从大到小排序,结果如下: 物品 重量 w 价值 v 价值/重量 v/w 1 4 40 10 2 7 42 6 3 5 25 5 4 3 12 4 * 算法设计与分析 * 应用分支限界法的关键问题 如何确定合适的限界函数; 如何组织待处理结点表; 如何确定最优解中的各个分量。 * 算法设计与分析 * 分支限界法的时间性能 分支限界法和回溯法实际上都属于蛮力穷举法,遍历具有指数阶个结点的解空间树,在最坏情况下,时间复杂性肯定为指数阶。 与回溯法不同的是,分支限界法首先扩展解空间树中的上层结点,并采用限界函数,有利于实行大范围剪枝。同时,根据限界函数不断调整搜索方向,选择最有可能取得最优解的子树优先进行搜索。所以,如果选择了结点的合理扩展顺序以及设计了一个好的限界函数,分支界限法可以快速得到问题的解。 * 算法设计与分析 * 结束 End 由于解空间树是排列树的特性,在最坏的情况下,栈的深度不会超过n。如果采取分支限界法,在解空间树的第一层就会产生n个活结点,如果不考虑剪枝,将在第二层产生n* n-1 个活节点,如此下去对队列空间的要求太高。 * 算法设计与分析 第6章 分支限界法 * 算法设计与分析 * 第6章 分支限界法 学习要点 理解分支限界法的剪枝搜索策略 掌握分支限界法的算法框架 队列式(FIFO)分支限界法 优先队列式分支限界法 通过应用范例学习分支限界法的设计策略 0-1背包问题 * 算法设计与分析 * 6.1 分支限界法的基本思想 分支限界法与回溯法的不同求解目标: 回溯法的求解目标:找出T(解空间状态树)中满足约束条件的所有解; 分支限界法的求解目标:找出满足约束条件的一个解,或是在满足约束条件的解中找出使用某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 * 算法设计与分析 * 分支限界法与回溯法的不同搜索方式 回溯法以深度优先的方式搜索解空间树T,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T。 分支限界法的搜索策略:在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展对点。为了有效地选择下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值(限界),并根据这些已计算出的函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以便尽快地找出一个最优解。 * 算法设计与分析 * 分支限界法的基本思想 分支限界法通常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。 问题的解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树。 * 算法设计与分析 * 回顾:两种典型的解空间树 子集树(Subset Trees):当所给问题是从n个元素的集合中找出满足某种性质的子集时,相应的解空间树称为子集树。在子集树中,|S0| |S1| … |Sn-1| c,即每个结点有相同数目的子树,通常情况下c 2,所以,子集树中共有2n个叶子结点,因此,遍历子集树需要O 2n 时间。 排列树(Permutation Trees):当所给问题是确定n个元素满足某种性质的排列时,相应的解空间树称为排列树。在排列树中,通常情况下,|S0| n,|S1| n-1,…,|Sn-1| 1,所以,排列树中共有n!个叶子结点,因此,遍历排列树需要O n! 时间。 * 算法设计与分析 * 分支限界法的基本思想 每一个活结点只有一次机会成为扩展结点 活结点一旦成
原创力文档

文档评论(0)