算法设计与分析-第8章-回溯法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.1.1 问题的解空间
对于n=3的0/1背包问题,其解空间树如图8.1.1-2所示,树中的 8个叶子结点分别代表该问题的8个可能解。
1
1 2 1 3 1 4 0 5 1 7 0 0 9
对物品1的选择
1 6
0 10
0 3 0 12 1 14 0 15
对物品2的选择
1
11 图8.1.1-2
对物品3的选择
8.1.3
简言之: 1) 逐级扩展解向量 2) 动态测试部分解
回溯法的求解过程
x1 ,x2 , … , xi-1 xi
用 Bi (x1 , x2 ,… ,xi-1 ,xi) ---剪枝函数动态测试,
判定路径
x1 x2 … xi-1 xi 是否可行。
从i=1开始构造i元组,如果i元组满足约束,i=i+1,扩展搜索; 如果试探了x[i]的所有值,仍不能满足约束,则i=i-1,回溯到上 一层重新选择x[i-1]的其他值。这种扩展回溯的搜索方法可以表 示为状态空间树上带剪枝函数的深度优先的搜索。
4 1
11 14 16 20 22 25 27 30 32 36 38 41 43 46 48 52 54 57 59 62 64 2 2
3
4
3
4
1
3
1
4wk.baidu.com
2
4
1
2
1
2
3
3
1
2
1
10 12 15 17 21 23 26 28 31 33 37 39 42 44 47 49 53 55 58 60 63 65
即选择Si+1的下一个元素作为解向量X的第i+1个分量;
② 如果xi+1= ai+1k是集合Si+1的最后一个元素,就回溯到X=(x1, x2, …, xi),选择Si的下一个元素作为解向量X的第i个分量,假设 xi= aik,如果aik不是集合Si的最后一个元素,则令xi= aik+1;否则, 就继续回溯到X=(x1, x2, …, xi-1);
8.1.3 回溯法的求解过程
(1)如果X=(x1, x2, …, xi+1)是问题答案解,则输出这个解。如 果问题只希望得到一个解,则结束搜索,否则继续搜索其他解; (2)如果X=(x1, x2, …, xi+1)是问题的部分解,则继续构造解向 量的下一个分量; (3)如果X=(x1, x2, …, xi+1)既不是问题的部分解也不是问题的 答案解,则存在下面两种情况: ① 如果xi+1= ai+1k不是集合Si+1的最后一个元素,则令xi+1= ai+1k+1,
二、算法设计思想
回溯法从根结点出发,按照深度优先策略遍历解空间树,
搜索满足约束条件的解。在搜索至树中任一结点时,先判断该结
点对应的部分解是否满足约束条件,或者是否超出目标函数的界 限,也就是判断该结点是否可能包含问题的答案解,如果肯定不 包含,则跳过对以该结点为根的子树的搜索,即所谓剪枝 (Pruning);否则,进入以该结点为根的子树,继续按照深度 优先策略搜索。
8.1.1 问题的解空间
显式约束条件常见的例子是: 当 xi≥0 当 xi=0或xi=1 当 li xi ui 即 即 Si={所有非负实数} Si={0,1}
即 Si {a : li a ui }
注意:“解空间”是指满足显式约束条件的元组,并非一般意 义上的解。 隐式约束:规定解空间中那些实际上满足目标约束的向量。
40
4 2
4 1
27
46 48 51 53 2 47 1 2 3 54
1
表示可以从任何城市i出发最后回到城市i的搜索过程
8.1.2 回溯法的设计思想
回溯法的搜索过程涉及的结点(称为搜索空间)只是整 个解空间树的一部分,在搜索过程中,通常采用两种策略避 免无效搜索:
(1)用约束条件剪去得不到可行解的子树;
(a) 二维搜索空间无解
(b) 三维搜索空间的解
图8.1.1-1 错误的解空间将不能搜索到正确答案
8.1.1 问题的解空间
对于任何一个问题,可能解的表示方式和它相应的解释隐 含了解空间及其大小。
例如,对于有n个物品的 0/1背包问题,其可能解的表示方 式可以有以下两种:
(1)可能解由一个不等长向量组成,当物品i(1≤i≤n)装入背包 时,解向量中包含分量i,否则,解向量中不包含分量i,当n=3 时,其解空间是: { ( ), (1), (2), (3), (1, 2), (1, 3), (2, 3), (1, 2, 3) } (2)可能解由一个等长向量{x1, x2, …, xn}组成,其中 xi=1(1≤i≤n)表示物品i装入背包,xi=0表示物品i没有装入背包, 当n=3时,其解空间是:
TSP问题的代价矩阵
8.1.2 回溯法的设计思想
1→2→3→4→1:代价为10
1 2 2 2 3 3 4 4 5 3 8 4 13 4 3 11 2 1 28 图8.1.2 TSP问题的搜索空间 4 2 1 1 18 3 24 4 29 35 3 2 4 1 1
1
4
3
34 2 4 45 4 1 2 3 50 2 1 1 2 55 3 58 1 24 3 60 2
1
0
9 0 13 0 15
不可行解
1
12
价值=55 价值=30 价值=25 价值=0
8.1.2 回溯法的设计思想
TSP问题搜索解空间的方法---应用目标函数剪枝
再如,对于n=4的TSP问题,其代价矩阵如图所示,
C=
∞ 12 8 3
3 6 7 ∞ 2 8 6 ∞ 2 7 6 ∞
3/12中3表示第一个城市到第二个 城市代价,12表示第二个城市到 第一个城市代价
解向量:由根结点到叶结点的路径所定义
图8.1.1-3 n=4的八皇后问题解空间树
8.1.1 问题的解空间
对于n=4的TSP问题,其解空间树如图8.1.1-4所示,树中 的24个叶子结点分别代表该问题的24个可能解,例如结点5代 表一个可能解,路径为1→2→3→4→1,长度为各边代价之和。
1 2 2 2 3 3 4 4 5 4 2 6 3 7 4 9 3 8 4 13 19 2 3 4 1 1 18 3 24 4 1 4 29 3 2 35 4 1 1 1 3 34 2 40 4 1 4 45 2 3 51 2 1 1
{(0, 0, 0), (0, 0, 1), (0, 1, 0), (1, 0, 0), (0, 1, 1), (1, 0, 1), (1, 1, 0), (1, 1, 1) }
8.1.1 问题的解空间
二、显式约束与隐式约束
用回溯法求解,它的解一般要求满足一组综合约束条件,这 些约束条件分为以下两类: 显式约束:限定每个xi只从一个给定的集合Si上取值。
8.1.1 问题的解空间
例 8皇后问题 。 1 2 3 4 5 6 7 8
1 Q 解的表示:X=(x1,x2,…,x8) 2 Q 3 Q 显式约束: 4 Q xi∈Si ,1≤i≤8, 5 Q Si={1,2,3,4,5,6,7,8} 6 Q 隐式约束: 7 Q 任何两个皇后不能相互攻击 8 Q
解空间大小: 88 8!
4 50 2
56 3 1 3 61 2
4 3
11 14 16 20 22 25 27 30 32 36 38 41 43 46 48 52 54 57 59 62 64 2 2 3 4 3
4
1
3
1
4
2
4
1
2
1
2
3
3
1
2
1
10 12 15 17 21 23 26 28 31 33 37 39 42 44 47 49 53 55 58 60 63 65 图8.1.1-4 n=4的TSP问题的解空间树
(2)用目标函数剪去得不到最优解的子树。 这两类函数统称为剪枝函数(Pruning Function)。 需要注意的是,问题的解空间树是虚拟的,并不需要在算 法运行时构造一棵真正的树结构,只需要存储从根结点到当 前结点的路径。
8.1.3
回溯法的求解过程
1. 针对所给问题,定义问题的解空间:
首先应明确定义问题的解空间,问题的解空间应至少包含问 题的一个(最优或最终)解。 2. 确定易于搜索的解空间结构: 问题的解空间结构通常以树的形式表示,常用的两类典型 的解空间树是子集树和排列树。 3. 以深度优先方式搜索解空间树,并在搜索过程中采用剪枝 函数来避免无效搜索。
为了用回溯法求解一个具有n个输入的问题,一般情况下, 将 其 可 能 解 表 示 为 满 足 某 个 约 束 条 件 的 等 长 向 量 X=(x1, x2, …, xn),其中分量xi (1≤i≤n)的取值范围是某个有限集合 Si={ai1, ai2, …, aimi},所有可能的解向量构成了问题的解空间。 假设集合Si的大小是mi ,解空间的大小为m=m1m2…mn。
一、解空间概述 复杂问题常常有很多的可能解,这些可能解构成了 问题的解空间。 解空间也就是进行穷举的搜索空间,所以,解空间中 应该包括所有的可能解。
确定正确的解空间很重要,如果没有确定正确的解空 间就开始搜索,可能会增加搜索很多无用解,或者根本 就搜索不到正确的解。
8.1.1 问题的解空间
例如:桌子上有6根火柴棒,要求以这6根火柴棒为边搭建4 个等边三角形。
8.1.1 问题的解空间
状态空间树的特点 树中的结点:求解过程的一个状态 树中的边:标示 xi 的一个可能的值
解向量: 由根结点到任意(叶)结点的路径定义
解空间:由根结点到所有(叶)结点的路径定义
8.1.2 回溯法的设计思想
一、什么是回溯法
以深度优先的方式系统地搜索问题的解且结合剪枝函数的算 法称为回溯法,它适合于解一些组合数较大的问题。
8.1.2 回溯法的设计思想
例如,对于n=3的0/1背包问题,三个物品的重量为{20, 15, 10},价值为{20, 30, 25},背包容量为25,从图8.1.2所示 的解空间树的根结点开始搜索,搜索过程如下: ---应用约 束条件剪枝
1 2
1 0 6 10 0 8 不可行解 价值=20 1 11 0 1 14 1
8.1.4 回溯法的算法描述
一、回溯法的非递归形式描述
假定回溯法要找出所有的解而不是仅仅只找出一个。设 ( x1, x2,…,xi-1 )是状态空间树中由根到一个结点的路径, 而 R ( x1, x2,…,xi-1 )是下述所有结点 xi 的集合,它使得对 于每一个xi,(x1,x2,…,xi)是一条由根到结点 xi的路径; 还假定剪枝函数Ci,如果路径(x1,x2,…,xi)不可能延伸到 一个答案解,则Ci(x1,x2,…,xi)取假值,否则取真值。于 是解向量 X ( 1 : n )中第 i 个分量就是那些选自集合 R ( x1, x2,…,xi-1)且使Ci为真的xi。算法BACKTRACK是使用R和Ci的 回溯方法的抽象化描述。
• 关键:提炼剪枝函数 方法:找出显式约束和隐式约束
注意:尽早避免无效检索
8.1.3 回溯法的求解过程
由 于 问 题 的 解 向 量 X=(x1, x2, …, xn) 中 的 每 个 分 量 xi(1≤i≤n)都属于一个有限集合 Si={ai1, ai2, …, airi},因此, 回溯法可以按某种顺序(例如字典序)依次考察笛卡儿积 S1×S2×…×Sn中的元素。 初始时,令解向量 X 为空,然后,从根结点出发,选 择S1的第一个元素作为解向量X的第一个分量,即x1= a11, 如果X=(x1)是问题的部分解,则继续扩展解向量X,选择S2 的第一个元素作为解向量 X的第2个分量,否则,选择S1的 下一个元素作为解向量X的第一个分量,即x1= a12。依此类 推,一般情况下,如果X=(x1, x2, …, xi)是问题的部分解, 则选择Si+1的第一个元素作为解向量X的第i+1个分量时,有 下面三种情况:
?
8.1.1 问题的解空间
三、状态空间树:解空间的树结构 问题的解空间一般用解空间树(Solution Space Trees, 也称状态空间树)的方式组织,树的根结点位于第1层,
表示搜索的初始状态,第2层的结点表示对解向量的第一
个分量做出选择后到达的状态,第1层到第2层的边上标出 对第一个分量选择的结果,依此类推,从树的根结点到叶 子结点的路径(也可能是根节点到任何一个树中结点,但 不含搜索失败的结点),就构成了解空间的一个可能解。
第8章 回溯法
8.1 概 述 8.2 图问题中的回溯法 8.3 组合问题中的回溯法 8.4 实验项目——0/1背包问题
8.1 概 述
8.1.1 问题的解空间 8.1.2 回溯法的设计思想 8.1.3 回溯法的求解过程 8.1.4 回溯法的算法描述 8.1.5 回溯法的时空性能
8.1.1 问题的解空间
8
8.1.1 问题的解空间
4皇后问题的解空间树
1 1
4
3 34 50 4 45 4 1 2 3 51 2 1 1 2 56 3 1 3 61 2
2
2 2 3 3 4 4 5 4 2 6 3 7 4 9 3 8 4 3 4 1 18 3 24 4 1 4 1 4
1
2 40
13
2 3
19
29
3 2
35