算法分析与设计详解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这个结点的扩展过程一直继续到活结点优先队列为空时
为止。
16
6.2单源最短路径
剪枝策略
在算法扩展结点的过程中,一旦发现一个结点的下界 不小于当前找到的最短路长,则算法剪去以该结点为 根的子树。
在算法中,利用结点间的控制关系进行剪枝。从源顶 点s出发,2条不同路径到达图G的同一顶点。由于两 条路径的路长不同,因此可以将路长长的路径所对应 的树中的结点为根的子树剪去。
在扩展结点处,先生成其所有的儿子结点(分支), 然后再从当前的活结点表中选择下一个扩展结点。
为了有效的选择下一扩展结点,以加速搜索的进程, 在每一活结点处,计算一个函数值,并根据这些已 计算出的函数值,从当前活结点表中选择一个最有 利的结点作为扩展结点,使搜索朝着解空间树上有 最优解的分支推进,以便尽快地找出一个最优解 。
4
w = [16,15,15], v = [45, 25, 25], c = 30
6.1分支限界法的基本思想
5
分支限界法的基本思想
6.1分支限界法的基本思想
分支限界法常以广度优先或以最小耗费(最大效益) 优先的方式搜索问题的解空间树。
在分支限界法中,每一个活结点只有一次机会成 为扩展结点。活结点一旦成为扩展结点,就一次 性产生其所有儿子结点。在这些儿子结点中,导 致不可行解或导致非最优解的儿子结点被舍弃, 其余儿子结点被加入活结点表中。
此后,从活结点表中取下一结点成为当前扩展结 点,并重复上述结点扩展过程。这个过程一直持 续到找到所需的解或活结点表为空时为止。
6
常见的两种分支限界法
6.1分支限界法的基本思想
ห้องสมุดไป่ตู้列式(FIFO)分支限界法
按照队列先进先出(FIFO)原则选取下一 个节点为扩展节点。
优先队列式(priority queue)分支限界法
12
6.1分支限界法的基本思想
当寻求问题的一个最优解时,可以用剪枝函数来 加速搜索,该函数给出每一个可行结点相应的子 树可能获得的最大价值的上界。如果这个上界不 会比当前最优值更大,则说明相应的子树中不含 问题的最优解,因而可以剪去,
另一方面,我们也可以将上界函数确定的每个结 点的上界值作为优先级,以该优先级的非增序抽 取当前扩展结点,这种策略有时可以更迅速地找 到最优解。
13
30 1
5 6
4 3
20
队列 BCDEFGHIJK,,J,G,KFDEIH,,K,,J,G,HFEI,,K,,JGHI,JK,I,K
59 66 25
3 F 4 L
2 10
4
C 4 G 3 M
6.1分支限界法的基本思想
A
1
B
2
3
D
2
4
H
I
4
2
N
O
4
E
2
3
J
K
3
2
P
Q
14
1
6 3
优先队列 B,0
17
6.2单源最短路径
18
6.2单源最短路径
template< class Type > class Graph {
friend void main(void); public:
void ShortestPaths( int ); private:
int n, *prev; //前驱顶点数组 Type **c, //图G的邻接矩阵
C,30 D,6 E,4 J,14 K,24 H,11 I, 26
30 5 4
20
3 F 4 L
2 10
4
C 4 G 3 M
6.1分支限界法的基本思想
A
1
B
2
3
D
2
4
H
I
4
2
N
O
4
E
2
3
J
K
3
2
P
Q
25
15
6.2 单源最短路径
算法思想
6.2单源最短路径
解单源最短路径问题的优先队列式分支限界法用一 极小堆来存储活结点表。其优先级是结点所对应的当前 路长。
0
45
0
45
25
00
45 5500
2255 25
00
11
6.1分支限界法的基本思想
优先队列中规定的结点优先级常用一个 与该结点相关的数值p来表示,结点优先 级的高低与p值的大小相关,最大优先队 列规定p值较大的结点优先级较高,用大 堆来实现。 小优先队列规定p值较小的结点优先级较 高,用小堆来实现。
按照优先队列中规定的优先级选取优先级 最高的节点成为当前扩展节点。
7
6.1分支限界法的基本思想
例:考虑n =3 时0-1背包问题的一个实例如下: w =[16,15,15], p= [45, 25,25],c = 30。其子集树
8
6.1分支限界法的基本思想
用队列式分支限界法解此问题
队列式分支限界法搜索解空间树的方式与 解空间树的广度优先遍历算法极为相似, 唯一的不同之处是队列式分支限界法不搜 索以不可行结点为根的子树。
9
6.1分支限界法的基本思想
队列式
w =[16,15,15], p= [45, 25,25],c = 30
活结点队列
BCFGE,,,GFEC,G
45 50 25 25 0
0
16 16
0
15
0
16 30
15 15
0
10
6.1分支限界法的基本思想
用优先队列式分支限界法解此问题
也是从根结点A开始搜索解空间树,用一个 极大堆来表示活结点表的优先队列,该优先 队列的优先级定义为活结点所获得的价值。 初始时堆为空。 w =[16,15,15], p= [45, 25,25],c = 30
算法从图G的源顶点s和空优先队列开始。结点s被扩展 后,它的儿子结点被依次插入堆中。
此后,算法从堆中取出具有最小当前路长的结点作为当 前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。
如果从当前扩展结点i到顶点j有边可达,且从源出发, 途经顶点i再到顶点j的所相应的路径的长度小于当前最优路 径长度,则将该顶点作为活结点插入到活结点优先队列中。
树中满足约束条件的所有解,而分支限界法的求 解目标则是找出满足约束条件的一个解,或是在 满足约束条件的解中找出在某种意义下的最优解。
(2)搜索方式的不同:回溯法以深度优先的方式 搜索解空间树,而分支限界法则以广度优先或以 最小耗费优先的方式搜索解空间树。
3
6.1分支限界法的基本思想
分支限界法的搜索策略
第6章 分支限界法 Branch and Bound
1
主要内容
6.1 分支限界法的基本思想 6.2 单源最短路径问题 6.3 装载问题 6.4 0-1背包问题
2
6.1分支限界法的基本思想
6.1 分支限界法的基本思想
Breadth-first search
分支限界法与回溯法 (1)求解目标:回溯法的求解目标是找出解空间
相关文档
最新文档