第六章 分支限界法
合集下载
第6章 分支限界法(1-例子)

5
6.3 装载问题
3. 算法的改进
// 检查右儿子结点 // 检查左儿子结点 Type wt = Ew + w[i]; if (wt <= c) { // 可行结点 右儿子剪枝
if (Ew + r > bestw && i < n) Q.Add(Ew); // 可能含最优解 Q.Delete(Ew);// 取下一扩展结点 提前更新 bestw
5. 优先队列式分支限界法
解装载问题的优先队列式分支限界法用最大优先队列存 储活结点表。 活结点x在优先队列中的优先级定义为从根结点到结点x的 路径所相应的载重量再加上剩余集装箱的重量之和。 优先队列中优先级最大的活结点成为下一个扩展结点。 在优先队列式分支限界法中,一旦有一个叶结点成为当 前扩展结点,则可以断言该叶结点所相应的解即为最优解。 此时可终止算法。
while6.3 (true)装载问题 { // 检查左儿子结点 2. 队列式分支限界法 if (Ew + w[i] <= c) // x[i] = 1 EnQueue(Q, Ew + w[i], bestw, i, n); // 右儿子结点总是可行的 EnQueue(Q, Ew, bestw, i, n); // x[i] = 0 Q.Delete(Ew); // 取下一扩展结点 if (Ew == -1) { // 同层结点尾部 if (Q.IsEmpty()) return bestw; Q.Add(-1); // 同层结点尾部标志 Q.Delete(Ew); // 取下一扩展结点 i++; // 进入下一层 } }
if (wt > bestw) bestw = wt; // 加入活结点队列 if (i < n) Q.Add(wt); }
6.3 装载问题
3. 算法的改进
// 检查右儿子结点 // 检查左儿子结点 Type wt = Ew + w[i]; if (wt <= c) { // 可行结点 右儿子剪枝
if (Ew + r > bestw && i < n) Q.Add(Ew); // 可能含最优解 Q.Delete(Ew);// 取下一扩展结点 提前更新 bestw
5. 优先队列式分支限界法
解装载问题的优先队列式分支限界法用最大优先队列存 储活结点表。 活结点x在优先队列中的优先级定义为从根结点到结点x的 路径所相应的载重量再加上剩余集装箱的重量之和。 优先队列中优先级最大的活结点成为下一个扩展结点。 在优先队列式分支限界法中,一旦有一个叶结点成为当 前扩展结点,则可以断言该叶结点所相应的解即为最优解。 此时可终止算法。
while6.3 (true)装载问题 { // 检查左儿子结点 2. 队列式分支限界法 if (Ew + w[i] <= c) // x[i] = 1 EnQueue(Q, Ew + w[i], bestw, i, n); // 右儿子结点总是可行的 EnQueue(Q, Ew, bestw, i, n); // x[i] = 0 Q.Delete(Ew); // 取下一扩展结点 if (Ew == -1) { // 同层结点尾部 if (Q.IsEmpty()) return bestw; Q.Add(-1); // 同层结点尾部标志 Q.Delete(Ew); // 取下一扩展结点 i++; // 进入下一层 } }
if (wt > bestw) bestw = wt; // 加入活结点队列 if (i < n) Q.Add(wt); }
第六章 分支限界法.ppt

得到的解 继续搜索
13
单源最短路径问题
1. 问题描述
下面以一个例子来说明单源最短路径问题:在下 图所给的有向图G中,每一边都有一个非负边权。要 求图G的从源顶点s到目标顶点t之间的最短路径。
14
单源最短路径问题
1. 问题描述
下图是用优先队列式分支限界法解有向图G的 单源最短路径问题产生的解空间树。其中,每一个结 点旁边的数字表示该结点所对应的当前路长。
// 取下一扩展结点
i++;}
// 进入下一层
}
26
装载问题
3. 算法的改进
结点的左子树表示将此集装箱装上船,右子树 表示不将此集装箱装上船。设bestw是当前最优解; ew是当前扩展结点所相应的重量;r是剩余集装箱 的重量。则当ew+rbestw时,可将其右子树剪去, 因为此时若要船装最多集装箱,就应该把此箱装 上船。
(2)回溯求解TSP也是盲目的(虽有目标函数,也 只有找到一个可行解后才有意义)
7
解空间树的动态搜索
分支限界法首先确定一个合理的限界函数,并根据限 界函数确定目标函数的界[down, up]; 然后按照广度优先策略遍历问题的解空间树,在某一 分支上,依次搜索该结点的所有孩子结点,分别估算 这些孩子结点的目标函数的可能取值(对最小化问题, 估算结点的down,对最大化问题,估算结点的up)。 如果某孩子结点的目标函数值超出目标函数的界,则 将其丢弃(从此结点生成的解不会比目前已得的更 好),否则入待处理表。
A->E->Q->M
21
单源最短路径问题
Dijakstra算法和分支限法在解决该问题的异同:
优先队列式分支限界法的搜索方式是根据活结点的优先级确 定下一个扩展结点。结点的优先级常用一个与该结点有关的 数值p来表示。最大优先队列规定p值较大的结点点的优先级 较高。在算法实现时通常用一个最大堆来实现最大优先队列, 体现最大效益优先的原则。类似地,最小优先队列规定p值 较小的结点的优先级较高。在算法实现时,常用一个最小堆 来实现,体现最小优先的原则。采用优先队列式分支定界算 法解决具体问题时,应根据问题的特点选用最大优先或最小 优先队列,确定各个结点点的p值。
13
单源最短路径问题
1. 问题描述
下面以一个例子来说明单源最短路径问题:在下 图所给的有向图G中,每一边都有一个非负边权。要 求图G的从源顶点s到目标顶点t之间的最短路径。
14
单源最短路径问题
1. 问题描述
下图是用优先队列式分支限界法解有向图G的 单源最短路径问题产生的解空间树。其中,每一个结 点旁边的数字表示该结点所对应的当前路长。
// 取下一扩展结点
i++;}
// 进入下一层
}
26
装载问题
3. 算法的改进
结点的左子树表示将此集装箱装上船,右子树 表示不将此集装箱装上船。设bestw是当前最优解; ew是当前扩展结点所相应的重量;r是剩余集装箱 的重量。则当ew+rbestw时,可将其右子树剪去, 因为此时若要船装最多集装箱,就应该把此箱装 上船。
(2)回溯求解TSP也是盲目的(虽有目标函数,也 只有找到一个可行解后才有意义)
7
解空间树的动态搜索
分支限界法首先确定一个合理的限界函数,并根据限 界函数确定目标函数的界[down, up]; 然后按照广度优先策略遍历问题的解空间树,在某一 分支上,依次搜索该结点的所有孩子结点,分别估算 这些孩子结点的目标函数的可能取值(对最小化问题, 估算结点的down,对最大化问题,估算结点的up)。 如果某孩子结点的目标函数值超出目标函数的界,则 将其丢弃(从此结点生成的解不会比目前已得的更 好),否则入待处理表。
A->E->Q->M
21
单源最短路径问题
Dijakstra算法和分支限法在解决该问题的异同:
优先队列式分支限界法的搜索方式是根据活结点的优先级确 定下一个扩展结点。结点的优先级常用一个与该结点有关的 数值p来表示。最大优先队列规定p值较大的结点点的优先级 较高。在算法实现时通常用一个最大堆来实现最大优先队列, 体现最大效益优先的原则。类似地,最小优先队列规定p值 较小的结点的优先级较高。在算法实现时,常用一个最小堆 来实现,体现最小优先的原则。采用优先队列式分支定界算 法解决具体问题时,应根据问题的特点选用最大优先或最小 优先队列,确定各个结点点的p值。
算法分析与设计(第2版)分支限界法

(1)求解目标:回溯法的求解目标是找出解空间树中满 足约束条件的所有解,而分支限界法的求解目标则是找出 满足约束条件的一个解,或是在满足约束条件的解中找出 在某种意义下的最优解。 (2)搜索方式的不同:回溯法以深度优先的方式搜索解 空间树,而分支限界法则以广度优先或以最小耗费优先的 方式搜索解空间树。
2. 分支限界法基本思想
分支限界法常以广度优先或以最小耗费(最大效益) 优先的方式搜索问题的解空间树。在分支限界法中,每一 个活结点只有一次机会成为扩展结点。活结点一旦成为扩 展结点,就一次性产生其所有儿子结点。在这些儿子结点 中,导致不可行解或导致非最优解的儿子结点被舍弃,其 余儿子结点被加入活结点表中。此后,从活结点表中取下 一结点成为当前扩展结点,并重复上述结点扩展过程。这 个过程一直持续到找到所需的解或活结点表为空时为止。
第6章 分支限界法
本章主要知识点
• 6.1 分支限界法的基本思想
•
• • • •
6.2 单源最短路径问题
6.3 装载问题 6.4 布线问题 6.5 6.6 0-1背包问题 最大团问题
•
• •
6.7
6.8 6.9
旅行售货员问题
电路板排列问题 批处理作业调度
6.1 分支限界法的基本思想
1. 分支限界法与回溯法的不同
2. 算法思想
解单源最短路径问题的优先队列式分支限界法用一 极小堆来存储活结点表。其优先级是结点所对应的当前 路长。 算法从图G的源顶点s和空优先队列开始。结点s被扩 展后,它的儿子结点被依次插入堆中。此后,算法从堆 中取出具有最小当前路长的结点作为当前扩展结点,并 依次检查与当前扩展结点相邻的所有顶点。如果从当前 扩展结点i到顶点j有边可达,且从源出发,途经顶点i再 到顶点j的所相应的路径的长度小于当前最优路径长度, 则将该顶点作为活结点插入到活结点优先队列中。这个 结点的扩展过程一直继续到活结点优先队列为空时为止。
第6章 分支限界法

通常采用最大堆或最小堆来实现优先队列式分支限界法求解问 题。
可以用如下方法求得最优解中的分量:1)对每个扩展结点保存
该结点到根结点的路径;2)在搜索过程中构建搜索经过的树结
构,在求得最优解时,从叶子结点不断回溯到根结点,以确定最
优202解0年中7月的19日各个分量。
21
提纲
一、分支限界法的基本思想 二、单源最短路径问题 三、装载问题 四、0-1背包问题 五、最大团问题 六、旅行售货员问题
E 使总的路程最短。
23
F GH I J K 43 42 32
L MN O P Q
2020年7月19日
17
分支限界法解旅行售货员问题
FIFO队列:
活结点队列: {{F{CED}G,{,GH,FD{,E{IH,,J{,GHIJEK{F,IJK,,}KIHG,J},KJ},}KI,K}}}}
B
2
3
4
1 30 2
2020年7月19日
24
2.2单源最短路径问题算法思想
用一最小堆来存储活结点表。其优先级是结点所对应的 当前路长。
算法从图G的源顶点s和空优先队列开始。结点s被扩展 后,它的儿子结点被依次插入堆中。此后,算法从堆中 取出具有最小当前路长的结点作为当前扩展结点,并依 次检查与当前扩展结点相邻的所有顶点。如果从当前扩 展结点i到顶点j有边可达,且从源出发,途经顶点i再到 顶点j的所相应的路径的长度小于当前最优路径长度,则 将该顶点作为活结点插入到活结点优先队列中。这个结 点的扩展过程一直继续到活结点优先队列为空时为止。
[G] N, 0 =>N(25), O(0)
不搜索以不可行结点为根的子树
优先队列式分支限法:
[A] B, C => B(45), C(0)
算法设计与分析(第6章 分支限界法)

11
2014-8-27
西安邮电学院
12
2014-8-27
西安邮电学院
13
2014-8-27
西安邮电学院
14
2014-8-27
西安邮电学院
15
2014-8-27
西安邮电学院
16
2014-8-27
西安邮电学院
17
2014-8-27
西安邮电学院
18
2014-8-27
西安邮电学院Leabharlann 192014-8-27
两种方法的搜索方式比较:
回溯法:深度优先
分支限界法:广度优先或最小费用优先
2014-8-27
西安邮电学院
2
分支限界法的搜索策略:
在扩展节点处,先生成其所有的儿子节点(分支的过 程),在从当前的活节点表中选择下一个扩展节点。为了有 效选择下一个扩展节点,以加速搜索进程,在每一个活节点 处,计算一个函数值(限界的过程),并根据这些已计算出 的函数值,从当前活节点表中选择一个最有利的活节点作为 扩展节点,使得搜索向解空间树上有最优解的分支进行,以 尽快找出一个最优解。
第六章 分支限界法 Branch and Bound
2014-8-27
西安邮电学院
1
分支限界法也是一种在问题解空间上进行尝试搜索算法。 它类似于回溯法,但分支限界法和回溯法的求解目标不同。 回溯法的求解目标是找出满足约束条件的所有解,而分支限 界法的求解目标则是找出满足约束条件的一个解,或者是在 满足约束条件的解中找出使得某一目标函数值达到某种意义 下的最优解。
优先队列: (1)最大优先队列:数值大则优先级高 实现方式:最大堆 (2)最小优先队列:数值小则优先级高 实现方式:最小堆
第六章 分支与界限

4
• 在整个搜索过程中,每遇到一个活结点,就对它的各个孩 子结点进行目标函数可能取得值得估算,然后把以此来更 新表结点:丢弃不再需要的结点,加入新的结点。再从表 中选取“界”取极值的结点,并重复上述过程。 • 随着过程的不断深入,结点表中所估算的目标函数的极值, 越来越接近问题的解。当搜索到一个叶子结点时,如果对 该结点所估算的目标函数的值就是结点表中最大或最小值, 那么沿叶子结点到根结点的路径确定的解就是问题的解。
∞ 5 20 10 23
25 ∞ 16 51 9
41 18 ∞ 25 7
32 31 7 ∞ 11
28 26 1 6 ∞
13
14
6.2.1 费用矩阵的行归约(列归约)
• 费用矩阵c的第i行(或第j列)中的每个元素减去一个正常 数lhi(或chj),得到一个新的费用矩阵,使得新矩阵中第i 行(或第j列)中的最小值为0,称为费用矩阵的行归约 (列归约),称lhi为行归约常数,称chj为列归约常数。 0 0 1 2 3 4 1 2 3 4 0
∞ 13 3 43 4 0
0 2
3 lh0=3 4
13 ∞ 19 0
0 2 ∞ 0
0 0 0 ∞
∞ 0 19 4 16
0 ∞ 15 45 2
16 13 ∞ 19 0
3 22 2 ∞ 0
3 21 0 0 ∞
的选择中,必然包含第i行 的最小元素和第j列的最小 元素(除cij之外的)。
ch1=2
25 26
0 ∞ 15 45 2
16 13 ∞ 19 0
3 22 2 ∞ 0
3 21 0 0 ∞
h lhi ch j
j 0
3 4
∞ 5 20 10 23
• 在整个搜索过程中,每遇到一个活结点,就对它的各个孩 子结点进行目标函数可能取得值得估算,然后把以此来更 新表结点:丢弃不再需要的结点,加入新的结点。再从表 中选取“界”取极值的结点,并重复上述过程。 • 随着过程的不断深入,结点表中所估算的目标函数的极值, 越来越接近问题的解。当搜索到一个叶子结点时,如果对 该结点所估算的目标函数的值就是结点表中最大或最小值, 那么沿叶子结点到根结点的路径确定的解就是问题的解。
∞ 5 20 10 23
25 ∞ 16 51 9
41 18 ∞ 25 7
32 31 7 ∞ 11
28 26 1 6 ∞
13
14
6.2.1 费用矩阵的行归约(列归约)
• 费用矩阵c的第i行(或第j列)中的每个元素减去一个正常 数lhi(或chj),得到一个新的费用矩阵,使得新矩阵中第i 行(或第j列)中的最小值为0,称为费用矩阵的行归约 (列归约),称lhi为行归约常数,称chj为列归约常数。 0 0 1 2 3 4 1 2 3 4 0
∞ 13 3 43 4 0
0 2
3 lh0=3 4
13 ∞ 19 0
0 2 ∞ 0
0 0 0 ∞
∞ 0 19 4 16
0 ∞ 15 45 2
16 13 ∞ 19 0
3 22 2 ∞ 0
3 21 0 0 ∞
的选择中,必然包含第i行 的最小元素和第j列的最小 元素(除cij之外的)。
ch1=2
25 26
0 ∞ 15 45 2
16 13 ∞ 19 0
3 22 2 ∞ 0
3 21 0 0 ∞
h lhi ch j
j 0
3 4
∞ 5 20 10 23
第六部分 分支限界法

Ki ≤ K2i 或 Ki ≤ K2i+1 Ki ≥ K2i+1 Ki ≥ K2i i=1,2,…,n/2
单源最短路经
• 有向图G中,每一边都有一个非负边权。求 图G的从源顶点s到目标顶点t之间的最短路 径。
2
9
12
14>8 9>8
5>3
12>4
10>7
0
3
4
7
8>7
8
4
5
6>5
6
• 剪枝:结点间的控制关系。从s出发,经过两条不同路径 到达同一顶点,这两条路径相应于解空间树的2个不同的 结点A和B,如果结点A所相应的路长小于结点B所相应的路 长,则可以将结点B为根的子树剪去,称结点A控制了结点 B。 • 优先队列中结点的优先级:结点所对应的当前路长。
• 在使用分支限界法解具体问题时,可以采 用下面两种典型方式实现活结点表
– 队列式分支限界(先进先出) – 优先队列式分支限界
1 1
2
3
4
2
3
4
队列式: 活结点表L=(2,3,4)
优先队列式: 活结点表L=(2,3,4按限界函数值确定 优先级),即哪个分支能够花最小 代价 E.length c[E.i][j] dist[j]是否更新?
j
i
j
最大团问题
• 给定一个无向图G=(V,E)。如果U包含于V,且对任 意u,v属于U有(u,v)属于E,则称U是G的一个完全子 图。G的完全子图U是G的一个团当且仅当U不包含 在G的更大的完全子图中。G的最大团是指G中所 含顶点数最多的团。
• (当前扩展结点)顶点数上界=已确定的顶点数+未确定的顶点 数的上界
单源最短路经
• 有向图G中,每一边都有一个非负边权。求 图G的从源顶点s到目标顶点t之间的最短路 径。
2
9
12
14>8 9>8
5>3
12>4
10>7
0
3
4
7
8>7
8
4
5
6>5
6
• 剪枝:结点间的控制关系。从s出发,经过两条不同路径 到达同一顶点,这两条路径相应于解空间树的2个不同的 结点A和B,如果结点A所相应的路长小于结点B所相应的路 长,则可以将结点B为根的子树剪去,称结点A控制了结点 B。 • 优先队列中结点的优先级:结点所对应的当前路长。
• 在使用分支限界法解具体问题时,可以采 用下面两种典型方式实现活结点表
– 队列式分支限界(先进先出) – 优先队列式分支限界
1 1
2
3
4
2
3
4
队列式: 活结点表L=(2,3,4)
优先队列式: 活结点表L=(2,3,4按限界函数值确定 优先级),即哪个分支能够花最小 代价 E.length c[E.i][j] dist[j]是否更新?
j
i
j
最大团问题
• 给定一个无向图G=(V,E)。如果U包含于V,且对任 意u,v属于U有(u,v)属于E,则称U是G的一个完全子 图。G的完全子图U是G的一个团当且仅当U不包含 在G的更大的完全子图中。G的最大团是指G中所 含顶点数最多的团。
• (当前扩展结点)顶点数上界=已确定的顶点数+未确定的顶点 数的上界
算法 第6章 分枝限界法

5
分支限界法的基本思想
堆的补充知识
堆的定义
满足下列性质的数列{R1, R2, …, Rn}被称为堆
Ri R2i (1) Ri R2i 1
或
(2)
Ri R2i Ri R2i 1
i 1, 2,,[n 2]
若满足条件(1)则称最小堆; 若满足条件(2)则称最大堆。
解空间树:
9
0-1背包问题
设有n个物体和一个背包, 物体i的重量为wi , 价值为vi, 背包的承 重量为c, 若将物体i (1 i n)装入背包, 则有价值为vi . 目标是找到一个方案, 使得能放入背包的物体总价值最高。
当n=3时, 问题的解空间树:
10
0-1背包问题
例:n=3,w=[16,15,15],v=[45,25,25],c=30 队列式分支限界法:
6
分支限界法的基本思想
堆对应一棵完全二叉树,如
最小堆
最大堆
7
分支限界法的基本设有n个物体和一个背包, 物体i的重量为wi , 价值为vi, 背包的承 重量为c, 若将物体i (1 i n)装入背包, 则有价值为vi . 目标是找到一个方案, 使得能放入背包的物体总价值最高。
此后,从活结点表中取下一结点成为当前扩展结点,并重 复上述结点扩展过程。这个过程一直持续到找到所需的解 或活结点表为空时为止。
3
分支限界法的基本思想
从活结点表中选择下一扩展结点的不同方式导致不同的分支 限界法。
常见的两种分支限界法:
(1)队列式(FIFO)分支限界法 将活结点表组织成一个队列,并按队列先进先出(FIFO)原 则选取下一个结点为当前扩展结点。 (2)优先队列式分支限界法 将活结点表组织成一个优先队列,并按照优先队列中规定的 优先级选取优先级最高的结点成为当前扩展结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
w=[16, 15, 15],p=[45, 25, 25],c=30
1
A E
0
1
1
B
0 1
0
0 1
1
C
0 1
0
D
F
G
0
H
I
J
K
L
M
N
O
当前活结点队列的队首结点F成为下一个扩展结点。它的2个儿子结点L和M均为叶结点。 L表示获得价值为50的可行解;M表示获得价值为25的可行解。 G是最后的一个扩展结点,其儿子结点N和O均为可行叶结点。最后,活结点队列已空, 算法终止。
算法搜索得到最优值为50。
w=[16, 15, 15],p=[45, 25, 25],c=30
1 1 1
A
0 1
B
0 1
0
C
0 1
0
D
E
0
1
F
G
0
H
I
J
K
L
M
N
O
优先队列式分支限界法也是从根结点A开始搜索解空间树的。
用一个极大堆来表示活结点表的优先队列,该优先队列的优先级定义为活结
点所拥有的价值。
1 1 1
A
0 1
B
0 1
0
C
0 1
0
D
E
0
1
F
G
0
H
I
J
K
L
M
N
O
此时,堆中仅剩下一个活结点C,它成为当前扩展结点。它的2个儿子结点F和 G均为可行结点,因此被插入到当前堆中。 结点F的价值为25,是堆中最大元素,成为下一个扩展结点。
w=[16, 15, 15],p=[45, 25, 25],c=30
w=[16, 15, 15],p=[45, 25, 25],c=30
1 1 1
A
0 1
B
0 1
0
C
0 1
0
D
E
0
1
F
G
0
H
I
J
K
L
M
N
O
由于结点B的价值大于结点C的价值,所以结点B是堆中最大元素,从而成为
下一个扩展结点。
扩展结点B得到结点D和E。D不是可行结点,被舍去。E是可行结点被加入到 堆中。E的价值为45,成为当前堆中最大元素,从而成为下一个扩展结点。
用队列式分支限界法解此问题时,用一个队列来存储活结点表。 算法从根结点A开始。初始时活结点队列为空,结点A是当前扩展结点。结
点A的2个儿子结点B和C均为可行结点,所以将这2个儿子结点按从左到右
的顺序加入活结点队列,并且舍弃当前扩展结点A。
w=[16, 15, 15],p=[45, 25, 25],c=30
关联的(a1,a11),(a1,a12),…,(a1,a1m),(a2,a21),(a2,a22),…,
(a2,a2m),……,(ak,ak1),(ak,ak2),…,(ak,akm)。依次类推,直到所有的边
被检查,即所有顶点均被访问为止。
图的广度优先遍历
广度优先搜索过程
广度优先生成树
广度优先遍历序列:ABCDEFGHI
w=[16, 15, 15],p=[45, 25, 25],c=30
1 1 1
A
0 1
B
0 1
0
C
0 1
0
D
E
0
1
F
G
0
H
I
J
K
L
M
N
O
扩展结点E得到2个叶结点J和K。J是不可行结点,被舍弃。K是一个可行叶
结点,表示所求问题的一个可行解,其价值为45。
此时,堆中仅剩下一个活结点C。
w=[16, 15, 15],p=[45, 25, 25],c=30
两个重要机制:产生分支(解空间树)
产生一个界限,能够终止许多分支(剪枝)
分支限界法的基本思想
分支限界法的适用范围:
分支限界法类似于回溯法,有一些问题其实无论用回溯法还是分支限界法都 可以得到很好的解决,但是另外一些则不然。 下表列出了回溯法和分支限界法的一些区别:
方法 对解空间树的 存储结点的常用 搜索方式 数据结构 结点存储特性 常用应用
w=[16, 15, 15],p=[45, 25, 25],c=30
1 1 1
A
0 1
B
0 1
0
C
0 1
0
D
E
0
1
F
G
0
H
N
O
初始时堆为空,扩展结点A得到它的2个儿子结点B和C。 这2个结点均为可行结点,因此被加入到堆中,结点A被舍弃。结点B获得的当
前价值是45,而结点C的当前价值为0。
1 1 1
A
E
0
1
B
0 1
0 0 1
C
0 1
0
D
F
G
0
H
I
B
J
C E
K
L
M
N
O
活结点队列:
依先进先出原则,下一个扩展结点是活结点队列的队首结点B。扩展结点 B得到其儿子结点D和E。 由于D是不可行结点,被舍去。
E是可行结点,被加入活结点队列。
w=[16, 15, 15],p=[45, 25, 25],c=30
分支限界法的基本思想
算法实现时,通常用极大(小)堆来实现最大(小)优先队列,提取堆中下一
个结点为当前扩展结点,体现最大(小)费用优先的原则。
极大堆满足一个节点必定不小于其子节点,极小堆正好相反。
极大堆中最大的元素必定是其根节点,堆排序算法正是根据这个特性而产生
的:对一个序列,将其构造为极大堆,然后将根节点(数组首元素)和数组 的尾元素交换,之后对除了尾元素之外的序列继续以上过程,直到排序完成。
1 1 1
A
0 1
B
0 1
0
C
0 1
0
D
E
0
1
F
G
0
H
I
J
K
L
M
N
O
结点F的2个儿子结点L和M均为叶结点。叶结点L相应于价值为50的可行解。 叶结点M相应于价值为25的可行解。叶结点L所相应的解成为当前最优解。
w=[16, 15, 15],p=[45, 25, 25],c=30
1 1 1
A
活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点 中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入 活结点表中。 从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程 这个过程一直持续到找到所求的解或活结点表为空时为止。 活结点表:具有先进先出的性质,是队列。
回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以
最小耗费优先的方式搜索解空间树。
分支限界法的搜索策略:在扩展结点处,先生成其所有的儿子结点(分
支),然后再从当前的活结点表中选择下一个扩展对点。为了有效地选择
下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值 (限界),并根据这些已计算出的函数值,从当前活结点表中选择一个最 有利的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进, 以便尽快地找出一个最优解。
0 1
B
0 1
0
C
0 1
0
D
E
0
1
F
G
0
H
I
J
K
L
M
N
O
最后,结点G成为扩展结点,其儿子结点N和O均为叶结点,它们的价值分别 为25和0。 接下来,存储活结点的堆已空,算法终止。算法搜索得到最优值为50。相应
的最优解是从根结点A到结点L的路径(0,1,1)。
分析
当要寻求问题的一个最优解时,与回溯法时类似地可以用剪枝函数来加速搜
回溯法 深度优先搜索
栈
活结点的所有可行子 找出满足约束条件的所 结点被遍历后才被从 有解 栈中弹出
分支限 广度优先或最 界法 小消耗优先搜 索
队列、优先队列 每个结点只有一次成 找出满足约束条件的一 为扩展结点的机会 个解或特定意义下的最 优解
分支限界法的基本思想
适合采用回溯法解决的问题 — n后问题
分支限界法的基本思想
分支限界法通常以广度优先或以最小耗费(最大效益)优先的方式搜索问 题的解空间树。
问题的解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列
树。
分支限界法的基本思想
两种典型的解空间树:
子集树(Subset Trees):当所给问题是从n个元素的集合中找出满足某种性 质的子集时,相应的解空间树称为子集树。在子集树中,|S0|=|S1|=…=|Sn1|=c,即每个结点有相同数目的子树,通常情况下c=2,所以,子集树中共有 2n个叶子结点,因此,遍历子集树需要O(2n)时间。
分支限界法引言
分支限界法与回溯法的不同求解目标:
回溯法的求解目标:找出解空间树中满足约束条件的所有解;
分支限界法的求解目标:找出满足约束条件的一个解,或是在满足约束条
件的解中找出使用某一目标函数值达到极大或极小的解,即在某种意义下
的最优解。
分支限界法引言
分支限界法与回溯法的不同搜索方式:
分支限界法两种方式:
从活结点表中选择下一扩展结点的不同方式导致不同的分支限界法。
最常见的有以下两种方式: 队列式(FIFO)分支限界法:队列式分支限界法将活结点表组织成一个 队列,并按队列的先进先出原则选取下一个结点为当前扩展结点。 优先队列式分支限界法:优先队列式分支限界法将活结点表组织成一个 优先队列,按优先队列中规定的结点优先级选取优先级最高的下一个结 点成为当前扩展结点。常用堆来实现优先队列