算法回溯法 ppt课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
组,则该状态为解状态; ➢ 若从根到某个解状态的路径代表一个可行解元组,
则该解状态为答案状态; ➢ 如果求解的是最优化问题,还要用目标函数衡量
每个答案结点,找出其中目标函数取最优值的最 优答案结点。
ch8.9
穷举法的一般方法
使用深度优先或广度优先搜索方法,检查状态空间树中每 个问题状态;
如果是解状态则用判定函数判定它是否是答案结点; 对于最优化问题,搜索过程中还需对每个答案结点计算其
ch8.2
章节内容:
8.1 一般方法 8.2 n-皇后 8.3 子集和数 8.4 图的着色 8.5 哈密顿环 8.6 0/1背包
ch8.3
8.1 回溯法的一般方法
回溯法是比贪心法和动态规划法更一般的方法。
解为n-元组(x0,x1,...,xn-1)形式。 通过搜索状态空间树来求问题的可行解(满足 约束条件)或最优解(使目标函数取最大或最小 值)。
1
1
0
2
1
0
9
1
0
3
6
10
13
1 01 01 01 0
4 5 7 8 11 12 14 15
有2n个解状态
当所给的问题是从n个元素的集合中找出满足某种性质的 子集时,相应的状态空间树为子集树,通常有2n个叶节点。
ch8.8
பைடு நூலகம் 状态空间树
状态空间树:描述问题解空间的树形结构。
➢ 树中每个结点称为一个问题状态; ➢ 若从根到树中某个状态的路径代表一个候选解元
ch8.10
回溯法的一般方法
算含的按法问搜深采方搜题索度用法索的,优称深至解逐先为度任层策。优—一向略如先—结其果搜产回点祖肯索生溯时先定。状法,结不态。先点包空判含回间在产断,溯树搜生以则;的索问跳否该结过题过则结点程的对,点,中解该进为并空动结入根使间态点该的用。为子子剪根树树枝的,是函子继否数树续包的 回溯法:
// Bk(x0,x1,...,xk)为约束函数。若子树上不含任何答案状态,则 为false;否则,为true。
if ((x[0],x[1],...,x[k])是一个可行解)
//判断是否可行解
输出(x[0],x[1],...,x[k]);
//输出可行解
RBacktrack(k+1);
//深度优先进入下一层
目标函数值,记录下其中最优者。 ——这种遍历状态空间树的求解方法是问题求解的穷举法。
回溯法与穷举搜索不同:回溯法使用约束函数,剪去那些可 以断定不含答案状态的子树,从而提高算法效率。回溯法适用 于解一些组合数相当大的问题。
事实上,状态空间树并不需要事先生成,而只需在求解的过 程中,随着搜索算法的进展,逐个生成状态空间树的问题状态 结点。
对于问题的一个实例,解向量满足显式约束条件的所有多 元组,构成了该实例的一个解空间。
隐式约束:给出了判定一个候选解是否为可行解的条件。
为满足问题的解而对不同分量之间施加的约束。
通常情况下,回溯法的求解目标是在状态空间树上找出满足 约束条件的所有可行解.
目标函数(代价函数):衡量每个可行解的优劣,使
目标函数取最大(或最小)值的可行解为问题的最优解ch。8.5
使用约束函数和限界函数来压缩需要实际生成 的状态空间树的结点数。
通常情况下,回溯法是为了找出满足约束条件 的所有可行解。
ch8.4
问题的解空间
回溯法要求问题的解向量具有n-元组(x0,x1,…,xn-1)的形 式,每个解分量xi从一个给定的集合Si取值。
显式约束:规定每个xi取值的约束条件。
(显式约束规定了问题的候选解集——解空间)
ch8.11
递归回溯
回溯法对解空间作深度优先搜索,因此,在一般情况下用递 归方法实现回溯法。
程序8-1 递归回溯算法框架
void RBacktrack (int k)
{ for (每个x[k],使得x[k]T(x[0],...,x[k-1])&&(Bk(x[0],...,x[k])) {
// T(x0,x1,...,xk-1)表示沿路径(x0,x1,...,xk-1)从根到某个问题状态 时,孩子结点xk可取值的集合。
例如(例8-1):对n个元素(a0,a1,……,an-1)进行排序,求
元素下标(0,1,……n-1)的一种排列X=(x0,x1,……,xn-1)。使
a a xi
xi+1
(0≤i<n-1)
一种方法: 显式约束:xiSi,Si={0,1,......,n-1}。此时解空间大小为nn。 隐式约束:axi axi+(10≤i<n-1),且xi≠xj (i≠j)
}
}
由于叶结点的孩子集合T( )为空集合,因此对于有限状态空
间树,算法必能终止。
ch8.12
迭代回溯
另一种方法: 显式约束:xiSi,Si={0,1,......,n-1}且xi≠xj (i≠j) 。此时解空 间大小为n!。 隐式约束:axi axi+1(0≤i<n-1)
注意:同一个问题可以有多种表示。(其中某些表示方法更 简单,所需表示的状态空间更小,搜索方法更简单!)
ch8.6
如:(例8-1)n个元素排序问题。若n=3则状态空间树为:
1
0
2
1
2
7
12
12 02 0 1 3 5 8 10 13 15
212010
4 6 9 11 14 16
排序问题一般不 用回溯法求解
有n!个叶结点(解状态)
当所给的问题是用于确定n个元素满足某种性质的排列时, 相应的状态空间树为排列树,通常有n!个叶节点。 ch8.7
又如:0-1背包问题。若n=3则状态空间树为一个完全二叉树:
在求解的过程中,以深度优先方式 逐个生成状态空间树中 结点,求问题的可行解或最优解。
为提高搜索效率,在搜索过程中用约束函数和限界函数 (统称剪枝函数)来剪去不必要搜索的子树,减少问题求 解所需实际生成的状态空间树结点数,从而避免无效搜索。
常用的剪枝函数:
用约束函数剪去已知不含答案状态(可行解)的子树; 用限界函数剪去得不到最优答案结点(最优解)的子树。
第8章 回溯法
学习要点:
理解回溯法的深度优先搜索策略 理解剪枝函数(约束函数和限界函数)的作用 掌握回溯法解题的算法框架
(1)递归回溯的算法框架 (2)迭代回溯的算法框架 (3)蒙特卡罗方法进行效率分析 通过应用范例学习回溯法的设计策略。 (1)n-皇后问题 (2)子集和数问题 (3)图的着色 (4)哈密顿环 (5)0/1背包
则该解状态为答案状态; ➢ 如果求解的是最优化问题,还要用目标函数衡量
每个答案结点,找出其中目标函数取最优值的最 优答案结点。
ch8.9
穷举法的一般方法
使用深度优先或广度优先搜索方法,检查状态空间树中每 个问题状态;
如果是解状态则用判定函数判定它是否是答案结点; 对于最优化问题,搜索过程中还需对每个答案结点计算其
ch8.2
章节内容:
8.1 一般方法 8.2 n-皇后 8.3 子集和数 8.4 图的着色 8.5 哈密顿环 8.6 0/1背包
ch8.3
8.1 回溯法的一般方法
回溯法是比贪心法和动态规划法更一般的方法。
解为n-元组(x0,x1,...,xn-1)形式。 通过搜索状态空间树来求问题的可行解(满足 约束条件)或最优解(使目标函数取最大或最小 值)。
1
1
0
2
1
0
9
1
0
3
6
10
13
1 01 01 01 0
4 5 7 8 11 12 14 15
有2n个解状态
当所给的问题是从n个元素的集合中找出满足某种性质的 子集时,相应的状态空间树为子集树,通常有2n个叶节点。
ch8.8
பைடு நூலகம் 状态空间树
状态空间树:描述问题解空间的树形结构。
➢ 树中每个结点称为一个问题状态; ➢ 若从根到树中某个状态的路径代表一个候选解元
ch8.10
回溯法的一般方法
算含的按法问搜深采方搜题索度用法索的,优称深至解逐先为度任层策。优—一向略如先—结其果搜产回点祖肯索生溯时先定。状法,结不态。先点包空判含回间在产断,溯树搜生以则;的索问跳否该结过题过则结点程的对,点,中解该进为并空动结入根使间态点该的用。为子子剪根树树枝的,是函子继否数树续包的 回溯法:
// Bk(x0,x1,...,xk)为约束函数。若子树上不含任何答案状态,则 为false;否则,为true。
if ((x[0],x[1],...,x[k])是一个可行解)
//判断是否可行解
输出(x[0],x[1],...,x[k]);
//输出可行解
RBacktrack(k+1);
//深度优先进入下一层
目标函数值,记录下其中最优者。 ——这种遍历状态空间树的求解方法是问题求解的穷举法。
回溯法与穷举搜索不同:回溯法使用约束函数,剪去那些可 以断定不含答案状态的子树,从而提高算法效率。回溯法适用 于解一些组合数相当大的问题。
事实上,状态空间树并不需要事先生成,而只需在求解的过 程中,随着搜索算法的进展,逐个生成状态空间树的问题状态 结点。
对于问题的一个实例,解向量满足显式约束条件的所有多 元组,构成了该实例的一个解空间。
隐式约束:给出了判定一个候选解是否为可行解的条件。
为满足问题的解而对不同分量之间施加的约束。
通常情况下,回溯法的求解目标是在状态空间树上找出满足 约束条件的所有可行解.
目标函数(代价函数):衡量每个可行解的优劣,使
目标函数取最大(或最小)值的可行解为问题的最优解ch。8.5
使用约束函数和限界函数来压缩需要实际生成 的状态空间树的结点数。
通常情况下,回溯法是为了找出满足约束条件 的所有可行解。
ch8.4
问题的解空间
回溯法要求问题的解向量具有n-元组(x0,x1,…,xn-1)的形 式,每个解分量xi从一个给定的集合Si取值。
显式约束:规定每个xi取值的约束条件。
(显式约束规定了问题的候选解集——解空间)
ch8.11
递归回溯
回溯法对解空间作深度优先搜索,因此,在一般情况下用递 归方法实现回溯法。
程序8-1 递归回溯算法框架
void RBacktrack (int k)
{ for (每个x[k],使得x[k]T(x[0],...,x[k-1])&&(Bk(x[0],...,x[k])) {
// T(x0,x1,...,xk-1)表示沿路径(x0,x1,...,xk-1)从根到某个问题状态 时,孩子结点xk可取值的集合。
例如(例8-1):对n个元素(a0,a1,……,an-1)进行排序,求
元素下标(0,1,……n-1)的一种排列X=(x0,x1,……,xn-1)。使
a a xi
xi+1
(0≤i<n-1)
一种方法: 显式约束:xiSi,Si={0,1,......,n-1}。此时解空间大小为nn。 隐式约束:axi axi+(10≤i<n-1),且xi≠xj (i≠j)
}
}
由于叶结点的孩子集合T( )为空集合,因此对于有限状态空
间树,算法必能终止。
ch8.12
迭代回溯
另一种方法: 显式约束:xiSi,Si={0,1,......,n-1}且xi≠xj (i≠j) 。此时解空 间大小为n!。 隐式约束:axi axi+1(0≤i<n-1)
注意:同一个问题可以有多种表示。(其中某些表示方法更 简单,所需表示的状态空间更小,搜索方法更简单!)
ch8.6
如:(例8-1)n个元素排序问题。若n=3则状态空间树为:
1
0
2
1
2
7
12
12 02 0 1 3 5 8 10 13 15
212010
4 6 9 11 14 16
排序问题一般不 用回溯法求解
有n!个叶结点(解状态)
当所给的问题是用于确定n个元素满足某种性质的排列时, 相应的状态空间树为排列树,通常有n!个叶节点。 ch8.7
又如:0-1背包问题。若n=3则状态空间树为一个完全二叉树:
在求解的过程中,以深度优先方式 逐个生成状态空间树中 结点,求问题的可行解或最优解。
为提高搜索效率,在搜索过程中用约束函数和限界函数 (统称剪枝函数)来剪去不必要搜索的子树,减少问题求 解所需实际生成的状态空间树结点数,从而避免无效搜索。
常用的剪枝函数:
用约束函数剪去已知不含答案状态(可行解)的子树; 用限界函数剪去得不到最优答案结点(最优解)的子树。
第8章 回溯法
学习要点:
理解回溯法的深度优先搜索策略 理解剪枝函数(约束函数和限界函数)的作用 掌握回溯法解题的算法框架
(1)递归回溯的算法框架 (2)迭代回溯的算法框架 (3)蒙特卡罗方法进行效率分析 通过应用范例学习回溯法的设计策略。 (1)n-皇后问题 (2)子集和数问题 (3)图的着色 (4)哈密顿环 (5)0/1背包