第6章-分支限界v1.0

合集下载

第六章 分支限界法.ppt

第六章 分支限界法.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值。

第六章 分支与界限

第六章 分支与界限
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

第6章 分支限界法

第6章 分支限界法
源最短路径问题的优先队 列式分支限界法用一极小堆来存储 活结点表。 活结点表。 其优先级是结点所对应的当前路长。 优先级是结点所对应的当前路长。
16
算法从图G的源顶点s和空优先队列开始。 算法从图G的源顶点s和空优先队列开始。 结点s被扩展后,它的儿子结点被依次插入堆中。 结点s被扩展后,它的儿子结点被依次插入堆中。 此后, 此后,算法从堆中取出具有最小当前路长的结点 作为当前扩展结点, 作为当前扩展结点,并依次检查与当前扩展结点 相邻的所有顶点。 相邻的所有顶点。 如果从当前扩展结点i到顶点j有边可达, 如果从当前扩展结点i到顶点j有边可达,且从源 出发,途经顶点i再到顶点j 出发,途经顶点i再到顶点j的所相应的路径的长 度小于当前最优路径长度, 度小于当前最优路径长度,则将该顶点作为活结 点插入到活结点优先队列中。 点插入到活结点优先队列中。 这个结点的扩展过程一直继续到活结点优先队列 为空时为止。 为空时为止。
r=14, p=45 不可解 r=14, r=15, p=45 p=25 r=30, p=0
不可解
r=14, p=45
r=0, p=50
7
用队列式分支限界法解此问题时,用一个队列 用队列式分支限界法解此问题时,用一个队列 来存储活结点表。 来存储活结点表。
不可解
队头 B C E F
不可解 G K L M N O
第6章 分支界限法
学习要点
• 理解分支限界法的剪枝搜索策略。 理解分支限界法的剪枝搜索策略。 • 掌握分支限界法的算法框架 (1)队列式(FIFO)分支限界法 队列式(FIFO)分支限界法 (2)优先队列式分支限界法 • 通过应用范例学习分支限界法的设计策略。 通过应用范例学习分支限界法的设计策略。
11

六章分支限界法

六章分支限界法
(2)搜索方式的不同:回溯法以深度优先的方式搜索解 空间树,而分支限界法则以广度优先或以最小耗费优先 的方式搜索解空间树。
6.1 分支限界法的基本思想
分支限界法与回溯法
• 回溯与分支限后评估这个部分
解: – 如果加上剩下的分量也不可能求得一个解,就不再生
首先把物品按照P(i)/W(i)≥P(i+1)/W(i+1)的衡量标准排序, 以此顺序读入物品。并且定义一个大小为物品多少的解向量X, X的一个分量就代表某个物品的装入情况。
6.2 0-1背包问题 (0-1 Knapsack Problem)
[问题描述] 设有n个物体和一个背包,物体i的重量为wi , 价值为pi ,背包的载荷为M,找一个装载方案,使得能放入 背包的物体总价值最高。
6.1 分支限界法的基本思想
(用于求解最优化问题)
目标函数限界U: 初始U可取,若x*是任一答案结点,且 c(x*)<U, 则更新U=c(x*), x*为已知答案结点值最小者。当搜索 到结点x,而c(x)>U时, x将不必扩展(剪枝)。
活动结点表: 通常采用优先队列方式组织, c(x)小者优先。
6.1 分支限界法的基本思想
E-结点一直保持到死为止的状态生成方法导致分枝-限 界方法(branch-and-bound)。
6.1 分支限界法的基本思想
分支限界法常以广度优先或以最小耗费(最大效 益)优先的方式搜索问题的解空间树。对已处理的 各结点根据限界函数估算目标函数的可能取值,从 中选取使目标函数取得极值(极大/极小)的结点 优先进行广度优先搜索不断调整搜索方向,尽快 找到解。
• 然而,如果评价函数选择得好,采用分支限界法可 能有一个小得多的常数因子。
• 好的评价函数应该有一个尽可能高的下界估计和一 个尽可能低的上界估计,从而使得搜索空间能够得 到有效的压缩,从而提高效率。

算法 第6章 分枝限界法

算法 第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)优先队列式分支限界法 将活结点表组织成一个优先队列,并按照优先队列中规定的 优先级选取优先级最高的结点成为当前扩展结点。

分支限界法

分支限界法

• 在子树X中离X最近的那个 在子树X中离X
答案结点到X的路径长度。 答案结点到X的路径长度。
X
a
6
分支限界法的基本思想
用c(·)表示有智力的排序函数,又称为结点成本函数。 c(·)表示有智力的排序函数,又称为结点成本函数。 表示有智力的排序函数 它的定义如下: 它的定义如下: 如果X是答案结点, c(X)是由解空间树的根结点 1. 如果X是答案结点,则c(X)是由解空间树的根结点 到X的成本; 的成本; 如果X不是答案结点且子树X不包含任何答案结点, 2. 如果X不是答案结点且子树X不包含任何答案结点, 则c(X)=∞; 否则c(X)等于子树X c(X)等于子树 3. 否则c(X)等于子树X中具有最小成本的答案结点的 成本。 成本。 但要指出的事,要得到结点成本函数c(·)所用的计算工作量 但要指出的事,要得到结点成本函数 所用的计算工作量 与解原问题具有相同复杂度, 与解原问题具有相同复杂度,这是因为计算一个结点的代价 通常要检索包含一个答案结点的子树X才能确定 才能确定, 通常要检索包含一个答案结点的子树 才能确定,因此要得 到精确的成本函数一般是不现实的。 到精确的成本函数一般是不现实的。在算法中检索活结点的 ˆ 来排出。 次序通常根据能大致估计结点成本函数 c(⋅)来排出。 7
10 0 20 2 20 10 4


10
• •
LC没能达到这个最小成本答案结点的原因在于有两个这样 LC没能达到这个最小成本答案结点的原因在于有两个这样 ˆ ˆ 的节点X 的节点X和Y,当 c ( X ) > c (Y ) 时,却有 c ( X ) < c (Y ) ˆ ˆ 那么, 如果是每对 c ( X ) < c (Y ) 的X、Y都有 c ( X ) < c (Y ) ,那么, LC总会找到一个最小成本答案结点 总会找到一个最小成本答案结点。 LC总会找到一个最小成本答案结点。 12

《算法设计与分析》-第六章 分支限界


例:n=3,w=[16,15,15],p=[45,25,25],c=30 队列式(FIFO)分支限界法
1 1 D 1 H 0 I 1 J B 0 E 0 K 1 L 1 F M 1 N A 0 C 0 G 0 O
6.2
0-1背包问题 背包问题
优先队列式分支限界法 算法的思想
首先,要对输入数据进行预处理,将各物品依其单位重量价值从大 到小进行排列。 在下面描述的优先队列分支限界法中,节点的优先级由已装袋的物 品价值加上剩下的最大单位重量价值的物品装满剩余容量的价值和。 算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子 结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展 结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才 将它加入子集树和活结点优先队列。当扩展到叶节点时为问题的最优值。
6.1 分支限界法的基本思想
3. 常见的两种分支限界法
(两种选择下一个E节点的方法:) (1)队列式(FIFO)分支限界法 按照队列先进先出(FIFO)原则选取下一个节点为 扩展节点。 (2)优先队列式分支限界法 按照优先队列中规定的优先级选取优先级最高的节 点成为当前扩展节点。
6.2
Байду номын сангаас
0-1背包问题 背包问题
6.3 回溯法与分支限界法对比
优先队列分支限界法能够有效地减少搜索的结点数目, 从而减少计算时间。因此比较适合于求解目标则是找出 满足约束条件的一个解或最优解;而回溯法则比较适合 于找出解空间树中满足约束条件的所有解。 回溯法比分支限界在占有内存方面具有优势。 – 回溯法占用的内存是O(解空间的最大路径长度),而 分支定界所占的内存为O(解空间的大小)。 对于子集空间,回溯法需O(n)的内存空间,而分 支定界需O(2n) 对于排列空间,回溯法需O(n)的内存空间,而分 支定界需O(n!)

第6章 分支限界法


25
6.2装载问题
while (true) { // 检查扩展结点的左孩子 T wt = Ew + w[i]; // 左孩子的权值 if (wt <= c) { // 可行的左孩子 if (wt > bestw) bestw = wt; // 若不是叶子,则添加到队列 if (i < n) Q.Add(wt); }
12
6.1分支限界法的基本思想


当寻求问题的一个最优解时,可以用剪枝函数来 加速搜索,该函数给出每一个可行结点相应的子 树可能获得的最大价值的上界。如果这个上界不 会比当前最优值更大,则说明相应的子树中不含 问题的最优解,因而可以剪去, 另一方面,我们也可以将上界函数确定的每个结 点的上界值作为优先级,以该优先级的非增序抽 取当前扩展结点,这种策略有时可以更迅速地找 到最优解。
19
6.2装载问题

该算法包含两个函数 MaxLoading函数具体实施对解空间的分支限 界搜索。 EnQueue用于将活结点加入到活结点队列中, 该函数首先检查i是否等于n,如果i=n,则表示 当前活结点为一个叶结点,由于叶结点不会被 进一步扩展,因此不必加入到活结点,如果该 叶结点表示的可行解优于当前最优解,更新最 优解。当i<n时,当前活结点是一个内部结点, 加入到活结点队列中。
21
6.2装载问题
template<class T> void EnQueue( Queue<T> &Q, T wt, T& bestw, int i, int n) //该函数负责加入活结点 { // 如果不是叶结点,则将结点权值w t加入队列Q if (i == n) { // 叶子 if (wt > bestw) bestw = wt; } else Q.Add(wt); // 不是叶子 }

第6章 分支限界法


2. 算法思想
解单源最短路径问题的优先队列式分支限界法用一极小
堆来存储活结点表。其优先级是结点所对应的当前路长。 算法从图G的源顶点s和空优先队列开始。结点s被扩展后, 它的儿子结点被依次插入堆中。
算法每次从堆中取出具有最小当前路长的结点作为当前扩 展结点,并依次检查与当前扩展结点相邻的所有顶点。
class QNode {QNode *parent; // 指向父结点的指针
bool LChild;
Type weight;
// 左儿子标志
// 结点所相应的载重量
找到最优值后,可以根据parent回溯到根节点,找到 最优解。
// 构造当前最优解 for (int j = n - 1; j > 0; j--) { bestx[j] = bestE->LChild; //bestx存储最优解路径 bestE = bestE->parent; //回溯构造最优解 }
直到找到所需的解或活动结点表为空为止
5
分支限界法与回溯法的差别
分支限界法不仅通过约束条件, 而且可通过 目标函数的限界来减少无效搜索.
回溯法是深度优先搜索, 而分支限界法是广 度优先搜索. 采用广度优先搜索策略的目的是: 尽早发现 剪枝点.
6
常见的两种分支限界法
(1)队列式(FIFO)分支限界法 将活结点表组织成一个队列,按照先进先出 (FIFO)原则选取下一个结点为扩展结点。 (2)优先队列式分支限界法
将活结点表组织成一个优先队列,按照规定的优先 级选取优先级最高的结点成为当前扩展结点。
• 算法实现时,通常用极大(小)堆来实现 最大(小)优先队列,提取堆中下一个结 点为当前扩展结点,体现最大(小)费用 优先的原则。 • 极大堆满足一个节点必定不小于其子节点, 极小堆正好相反。 • 极大堆中最大的元素必定是其根节点,堆 排序算法正是根据这个特性而产生的:对 一个序列,将其构造为极大堆,然后将根 节点(数组首元素)和数组的尾元素交换, 之后对除了尾元素之外的序列继续以上过 程,直到排序完成。

第6章__分支限界法

20
算法的改进

节点的左子树表示将此集装箱装上船,右 子树表示不将此集装箱装上船。

设bestw是当前最优解;ew是当前扩展结点所相 应的重量;r是剩余集装箱的重量。则当 ew+rbestw时,可将其右子树剪去,因为此时 若要船装最多集装箱,就应该把此箱装上船。

另外,为了确保右子树成功剪枝,应该在 算法每一次进入左子树的时候更新bestw的 值。
28
优先队列式分支限界法

在优先队列式分支限界法中,一旦有一个叶结 点成为当前扩展结点,则可以断言该叶结点所 相应的解即为最优解。此时可终止算法。 最大优先级队列中的活节点都是互相独立的, 因此每个活节点内部必须记录从子集树的根到 此节点的路径。 一旦找到了最优装载所对应的叶节点,就利用 这些路径信息来计算x 值。
分支限界法
1
提纲
分支限界法的基本思想 装载问题 布线问题 0-1背包问题 小结

2
提纲
分支限界法的基本思想 装载问题 布线问题 0-1背包问题 小结

3
分支限界法的基本思想

分支限界法与回溯法的不同

求解目标

回溯法:所有解 分支限界法:找出满足约束条件的一个解,或是满 足约束条件的解中找出在某种意义下的最优解。 回溯法:深度优先搜索解空间树 分支限界法:广度优先或以最小耗费(最大收益)优先 的方式搜索解空间树。
25
构造最优解
算法EnQueue做如下修改: void EnQueue(…..) {// 如不是叶节点,向Q中添加一个i 层、重量为wt的活节点 // 新节点是E的孩子。当且仅当是左孩子时,ch为true。 if (i == n) // 叶子 { if (wt == bestw) // 目前的最优解 { bestE = E; bestx[n] = ch;} return; } QNode<T> *b; // 不是叶子, 添加到队列中 b = new QNode<T>; b->weight = wt; b->parent = E; b->LChild = ch; Q.Add(b); }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本策略
– 对每一活结点计算一个优先级(某些信息的函数值),并根据这 些优先级; – 从当前活结点表中优先选择一个优先级最高(最有利)的结点作 为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以便 尽快地找出一个最优解。 – 再从活结点表中下一个优先级别最高的结点为当前扩展结点,……, 直到找到一个解或活结点队列为空为止。
3 6 D:(1,3,-,-)
7 11 H(1,3,2,-)
9 8 26 14 I(1,3,4,-) J(1,4,2,-) >25
10 24 K(1,4,3,-)
36 21 19 60 29 M(1,2,4,3) N(1,3,2,4) O(1,3,4,2) P(1,4,2,3) Q(1,4,3,2) 25 25 66 >25
13
算法设计与分析
© ZZU
第六章 分支限界
6.2 单源最短路径问题
while (true) { for (int j = 1; j <= n; j++) if ((c[E.i][j]<inf)&&(E.length+c[E.i][j]<dist[j])) { // 顶点i到顶点j可达,且满足控制约束 dist[j]=E.length+c[E.i][j]; 顶点i和j间有边,且此 prev[j]=E.i; 路径长小于原先从原点 // 加入活结点优先队列 到j的路径长 MinHeapNode<Type> N; N.i=j; N.length=dist[j]; H.Insert(N);} try {H.DeleteMin(E);} // 取下一扩展结点 catch (OutOfBounds) {break;} // 优先队列空 } }
算法设计与分析
4
© ZZU
第六章 分支限界
分支限界法的搜索策略 按照广度优先的原则,一个活结点一旦成为扩展结 点(E-结点)R后,算法将依次生成它的全部孩子结 点,将那些导致不可行解或导致非最优解的儿子舍 弃,其余儿子加入活结点表中。 然后,从活结点表中取出一个结点作为当前扩展结 点。 重复上述结点扩展过程,直至找到问题的解或判定 无解为止。
5
算法设计与分析
© ZZU
第六章 分支限界
6.1 分支限界法的基本思想
常见的两种分支限界法
(1)队列式(FIFO)分支限界法 按照队列先进先出(FIFO)原则选取下一个节点 为扩展节点。活结点表是先进先出队列。 (2)优先队列式分支限界法 按照优先队列中规定的优先级选取优先级最高的节 点成为当前扩展节点。活结点表是优先权队列。
9 算法设计与分析 © ZZU
第六章 分支限界
6.2 单源最短路径问题
1. 问题描述
下面以一个例子来说明单源最短路径问题:在下图所给的有 向图G中,每一边都有一个非负边权。要求图G的从源顶点s到目 标顶点t之间的最短路径。
10
算法设计与分析
© ZZU
第六章 分支限界
6.2 单源最短路径问题
1. 问题描述
38
算法设计与分析
© ZZU
第六章 分支限界
6.7 旅行售货员问题
1 6 4
30
5
2 10 4
1. 问题描述
3
20
某售货员要到若干城市去推销商品,已知各城市之间的路程(或 旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻 地的路线,使总的路程(或总旅费)最小。 路线是一个带权图。图中各边的费用(权)为正数。图的一条 周游路线是包括V中的每个顶点在内的一条回路。周游路线的费用是 这条路线上所有边的费用之和。 旅行售货员问题的解空间可以组织成一棵树,从树的根结点到 任一叶结点的路径定义了图的一条周游路线。旅行售货员问题要在 图G中找出费用最小的周游路线。
42
算法设计与分析
© ZZU
第六章 分支限界
TSP问题
1.队列式分支限界
A:(-,-,-,-) 1 B:(1,-,-,-) 2 30 C:(1,2,-,-) 5 35 F (1,2,3,-) 55 L(1,2,3,4) 59 6 40 G(1,2,4,-)
1 6 3 4
30 5
2 10 4
20 4 4 E:(1,4,-,-)
23 算法设计与分析 © ZZU
第六章 分支限界
6.4 布线问题
1. 算法思想
解此问题的队列式分支限界法从起始位置 a开始将它作 为第一个扩展结点。与该扩展结点相邻并且可达的方格成为 可行结点被加入到活结点队列中,并且将这些方格标记为 1, 即从起始方格a到这些方格的距离为1。
接着,算法从活结点队列中取出队首结点作为下一个扩 展结点,并将与当前扩展结点相邻且未标记过的方格标记为 2,并存入活结点队列。这个过程一直继续到算法搜索到目 标方格b或活结点队列为空时为止。即加入剪枝的广度优先 搜索。
3
4 5 7 26 6 24 11 14 40 G(1,2,4,-) H(1,3,2,-) I(1,3,4,-) J(1,4,2,-) K(1,4,3,-) >25 36 21 19 60 M(1,2,4,3) N(1,3,2,4) O(1,3,4,2) P(1,4,2,3) 25 25 29 Q(1,4,3,2) >25
第六章 分支限界
郑州大学
© ZZU © ZZU
第六章 分支限界
学习要点
理解分支限界法的剪枝搜索策略。 掌握分支限界法的算法框架
(1)队列式(FIFO)分支限界法
(2)优先队列式分支限界法 通过应用范例学习分支限界法的设计策略。 (1)单源最短路径问题;(2)装载问题; (3)布线问题; (4)0-1背包问题;(5)最大团问题;
© ZZU
47
算法设计与分析
12
算法设计与分析
© ZZU
第六章 分支限界
6.2 单源最短路径问题
3. 剪枝策略
在算法扩展结点的过程中,一旦发现一个结点的下界不小 于当前找到的最短路长,则算法剪去以该结点为根的子树。
在算法中,利用结点间的控制关系进行剪枝。从源顶点s出 发, 2条不同路径到达图 G的同一顶点。由于两条路径的路长不 同,因此可以将路长长的路径所对应的树中的结点为根的子树 剪去。
布线问题的解空间是一个图,适合采用队列式分支限界法来解决。从起始位置a开始 将它作为第一个扩展结点。与该结点相邻并且可达的方格被加入到活结点队列中,并 且将这些方格标记为1,表示它们到a的距离为1。接着从活结点队列中取出队首作为 下一个扩展结点,并将与当前扩展结点相邻且未标记过的方格标记为 2,并存入活节 点队列。这个过程一直继续到算法搜索到目标方格 b或活结点队列为空时为止(表示 没有通路)。
下图是用优先队列式分支限界法解有向图G的单源最短路径问 题产生的解空间树。其中,每一个结点旁边的数字表示该结点所对 应的当前路长。
11
算法设计与分析
© ZZU
第六章 分支限界
6.2 单源最短路径问题
2. 算法思想
解单源最短路径问题的优先队列式分支限界法用一极小堆来 存储活结点表。其优先级是结点所对应的当前路长。 算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它 的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当 前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相 邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源 出发,途经顶点i再到顶点j的所相应的路径的长度小于当前最优 路径长度,则将该顶点作为活结点插入到活结点优先队列中。这 个结点的扩展过程一直继续到活结点优先队列为空时为止。
35 算法设计与分析 © ZZU
第六章 分支限界
6.6 最大团问题 不要求
1. 问题描述
给定无向图G=(V,E)。如果UV,且对任意u,vU有(u,v)E, 则称U是G的完全子图。G的完全子图U是G的团当且仅当U不包含在G的 更大的完全子图中。G的最大团是指G中所含顶点数最多的团。 下图G中,子集{1,2}是G的大小为2的完全子图。这个完全子图 不是团,因为它被G的更大的完全子图{1,2,5}包含。{1,2,5}是 G的最大团。{1,4,5}和{2,3,5}也是G的最大团。
(2)将剩余的集装箱装上第二艘轮船。
15 算法设计与分析 © ZZU
第六章 分支限界
6.4 布线问题
布线问题 :印刷电路板将布线区域划分成n*m个方格阵列。精确的电路布线问题要 求确定连接方格a的中点到方格 b的中点的最短布线方案。在布线时,电路只能沿 直线或直角布线。为了避免线路相交,已布了线的方格做了封锁标记,其他线路不 允许穿过被封锁的方格。
14 算法设计与分析 不讲
1. 问题描述
有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集
装箱i的重量为Wi,且
w
i 1
n
i
c1 c2
装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上 这2艘轮船。如果有,找出一种装载方案。 容易证明:如果一个给定装载问题有解,则采用下面的策略可得到 最优装载方案。 (1)首先将第一艘轮船尽可能装满;
3
算法设计与分析
© ZZU
第六章 分支限界
什么是分支限界法
采用广度优先产生状态空间树的结点, 并使用剪枝函数的方法称为分枝限界法。
–所谓“分支”是采用广度优先的策略,依次 生成扩展结点的所有分支(即:儿子结点)。
–所谓“限界”是在结点扩展过程中,计算结 点的上界(或下界),边搜索边减掉搜索树 的某些分支,从而提高搜索效率
第六章 分支限界
33
算法设计与分析
© ZZU
第六章 分支限界
34
算法设计与分析
© ZZU
第六章 分支限界
6.5
相关文档
最新文档