第5章 回溯法

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
◎四川师范大学 计算机科学学院 刘芳 9
算法设计与分析<<回溯法
子集树
可以用一棵满二叉树表示解空间树
例如:W= (20,15, 15) ,V= (40,25, 25), C=30
问题的求解过程:相当于在解空间树中搜索满足条件的叶结点 。
◎四川师范大学 计算机科学学院 刘芳 10
算法设计与分析<<回溯法
◎四川师范大学 计算机科学学院 刘芳
17
算法设计与分析<<回溯法
回溯法的基本思想
主要应用
解决一些复杂问题在求解的过程中,需要经过若干步
骤,而每一个步骤都有若干种可能的分支,为了完成 这一过程,又必须遵守一些规则,
但这些规则又无法精确地用数学公式或语言来描述的
一类问题中。
◎四川师范大学 计算机科学学院 刘芳
7
◎四川师范大学 计算机科学学院 刘芳
算法设计与分析<<回溯法
子集树
例1:
可以用一棵满二叉树表示解空间树(如n=3) 。
◎四川师范大学 计算机科学学院 刘芳
8
算法设计与分析<<回溯法
子集树
例2:0-1背包问题
分析:
可能解由一个等长向量(x1, x2, …, xn)组成, 其中 如:
显约束:每个xi的范围都给定的约束。
隐约束:元组的分量间满足函数关系
f(x1,...xn)
4
◎四川师范大学 计算机科学学院 刘芳
算法设计与分析<<回溯法
问题的解空间
问题的解空间
由笛卡儿积A=S1×S2×…×Sn构成,且
第1层的根结点有|S1|棵子树, 第2层共有|S1|个结点, 第3层共有|S1|×|S2|个结点, 第n+1层共有|S1|×|S2|×…×|Sn|个结点,他们都是叶
算法设计与分析<<回溯法
例: 排列与组合
分析:
设(x1,x2, ……,xn)一组解 约束条件:
i≤ xi ≤m-n+i
显约束:1≤xi≤m 隐约束:x1<x2< ……<xn
即: xi-1 < xi ≤m-n+i
参考程序:
◎四川师范大学 计算机科学学院 刘芳 25
算法设计与分析<<回溯法
◎四川师范大学 计算机科学学院 刘芳 11
算法设计与分析<<回溯法
子集树
所以:
解空间有2n个元素。 若表示为树形结构就是一棵有2n个叶结点的满
二叉树,遍历子集树需Ω(2n)的计算时间。
◎四川师范大学 计算机科学学院 刘芳
12
算法设计与分析<<回溯法
排列树
排列树(Permutation Trees):
各个城市之间的路程(或旅费)。
要选定一条从驻地出发,经过每个城市一遍
,最后回到驻地的路线,使得总的路程(或 总旅费)最小。
◎四川师范大学 计算机科学学院 刘芳
15
算法设计与分析<<回溯法
排列树
分析
求赋权图G的具有最小权的Hamilton圈
解空间: 30
1 6 4 5 10 3 20 4 4 1 2 3 2 4 3 2 4 3 4 4 2 3 2
◎四川师范大学 计算机科学学院 刘芳 22
( 1≤i<j≤n )
算法设计与分析<<回溯法
例: 排列与组合
计算组合数
C
n m
1 n 0m n C n n1 Cm1 Cm1 0 n m
n m
m! C n !(m n)!
n m
◎四川师范大学 计算机科学学院 刘芳 23
子结点,代表问题的所有可能解。
依此类推,
显式图和隐式图
◎四川师范大学 计算机科学学院 刘芳 5
算法设计与分析<<回溯法
两类典型的解空间
两类典型的解空间
子集树 排列树
◎四川师范大学 计算机科学学院 刘芳
6
算法设计与分析<<回溯法
子集树
例1:
集合A={a1,a2,…,an},求A的所有子集合。
中用剪枝函数避免无效搜索。
◎四川师范大学 计算机科学学院 刘芳
21
算法设计与分析<<回溯法
例: 排列与组合
计算排列数
如何找出m个自然数(1,2,3,…,m)中n个数的所有排列。
分析
设(x1,x2, ……,xn)一组解 约束条件:
显wk.baidu.com束:1≤xi≤m 隐约束:xi ≠ xj
参考程序:
xi=1(1≤i≤n)表示物品i装入背包 xi=0(1≤i≤n)表示物品i没有装入背包
当n=3时,其解空间是:
{ (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)}
18
算法设计与分析<<回溯法
回溯法的基本思想
1.基本思想
设问题的解可表示为n元组(x1, x2,… xn), xisi , si为
有限集, 设已有满足约束条件的部分解(x1, x2,… xi)添 加xi+1 si+1,
若(x1, x2,… xi xi+1)满足约束条件, 则继续添加xi+2 ; 若所有可能的xi+1 si+1均不满足约束条件,则去掉xi ,
◎四川师范大学 计算机科学学院 刘芳 27
算法设计与分析<<回溯法
算法的框架
迭代回溯的一般框架
void iterativeBacktrack (){ int i=1; while (i>0) { if (f(n,i)<=g(n,i)) for (int j=f(n,i);j<=g(n,i);j++) { x[i]=h(j); if (constraint(i)&&bound(i)) { if (solution(i)) output(x); else i++; } }//for else i- -; }//while }//iterativeBacktrack
算法的框架
递归回溯的一般框架
void backtrack (int i) { if (i>n) output(x);
else
for (int j=f(n,i);j<=g(n,i);j++) { x[i]=h(j); if (constraint(i)&&bound(i)) backtrack(i+1); } }
子集树
子集树(Subset Trees)
当所给问题是从n个元素的集合中找出满足某种性质
的子集时,相应的解空间树称为子集树。
在子集树中,一般地: |S1|=|S2|=…=|Sn|=2, 即每
个结点有2棵的子树。
解空间为:
(0,0,……,0,0) (0,0,……,0,1) …… (1,1,……,1,1)
2 3
当起点1固定时,上图有3!个周游路线(排列问题)
◎四川师范大学 计算机科学学院 刘芳 16
算法设计与分析<<回溯法
回溯法的基本思想
回溯法
回溯法是一种选优搜索法,按选优条件向前搜索,以
达到目标。
但当探索到某一步时,发现原先选择并不优或达不到
目标,就退回一步重新选择,这种走不通就退回再走 的技术为回溯法,而满足回溯条件的某个状态的点称 为“回溯点”。
第5章 回溯法
学习要点
5.1 回溯法概述 5.2 回溯法的典型示例 5.3 回溯法的效率分析 本章小结
算法设计与分析<<回溯法
5.1 回溯法概述
5.1.1 问题的解空间
问题的解空间 两类典型的解空间
5.1.2
回溯法的基本思想
回溯法的基本思想 算法的框架 例:排列与组合 小结
算法设计与分析<<回溯法
例: 排列与组合
计算组合数:
1
1 1 1 1
2
2 2 3 3 4 3 3 4 4 Total=10种
3
4 5 4 5 5 4 5 5 5
24
找出m个自然数(1,2,3,…,m)中n
个数的组合。
要求:
输入:m,n=5 输出:
3
1 2 2 2 3
◎四川师范大学 计算机科学学院 刘芳
◎四川师范大学 计算机科学学院 刘芳
31
算法设计与分析<<回溯法
应用专题一
图问题中的回溯法
例1:n后问题 排列树的算法框架 例2:图的m着色问题 例3:TSP问题
回溯到(x1, x2,… xi-1), 添加尚未考虑过的xi;
如此反复进行,直到(x1, x2,… xk) kn满足所有的约束
条件或证明无解。
◎四川师范大学 计算机科学学院 刘芳 19
算法设计与分析<<回溯法
回溯法的基本思想
2.求解过程
求解过程可表示为在一棵解空间树作深度优先搜索。 具体过程:
当所给问题是确定n个元素满足某种性质的排列时,
相应的解空间树称为排列树。
通常情况下:|S1|=n,|S2|=n-1,…,|Sn|=1, 解空间为:
(1,2,3,……,n-1,n) (2,1,3,……,n-1,n)
……
(n,n-1,……,3,2,1)
◎四川师范大学 计算机科学学院 刘芳 13
用约束条件(约束函数)剪去得不到可行解的子树; 用目标函数(限界函数)剪去得不到最优解的子树。
这两类函数统称为剪枝函数(Pruning Function)。
◎四川师范大学 计算机科学学院 刘芳
30
算法设计与分析<<回溯法
5.2 回溯法的典型用例
几个应用专题
图问题中的回溯法 组合问题中的回溯法 其他应用
算法设计与分析<<回溯法
排列树
所以:
解空间有n!个元素 若表示为树形结构就是一个n度树,这样的树
有n! 个叶结点,遍历排列树需Ω(n!)计算时间。
◎四川师范大学 计算机科学学院 刘芳
14
算法设计与分析<<回溯法
排列树
例:旅行商问题
问题提出:
某售货员要到若干个城市去推销商品。已知
需要注意的是:
问题的解空间树是虚拟的,并不需要在算法运行时构
造一棵真正的树结构。在任何时刻,算法只保存从根 结点到当前扩展结点的路径。
◎四川师范大学 计算机科学学院 刘芳
29
算法设计与分析<<回溯法
小结
避免无效搜索的策略
回溯法搜索空间(搜索过程涉及的结点),只是整
个解空间树的一部分,在搜索过程中,通常采用两 种策略避免无效搜索:
◎四川师范大学 计算机科学学院 刘芳 2
算法设计与分析<<回溯法
问题的解空间
复杂问题的求解
复杂问题常常有很多的可能解,这些可能解构成了问
题的解空间。
解空间也就是进行穷举的搜索空间,所以,解空间中
应该包括所有的可能解。
问题解的求解方法
搜索问题的解空间,获得问题的解,依据搜索策略的
不同,可以分为:
搜索按深度优先策略从根开始, 当搜索到任一结点时,判断该点是否满足约束条件(
剪枝函数)
若满足,则继续向下深度优先搜索,
否则,跳过该结点以下的子树(剪枝),向上逐级
回溯。
◎四川师范大学 计算机科学学院 刘芳 20
算法设计与分析<<回溯法
回溯法的基本思想
3.回溯法解题的步骤:
(1)针对所给问题,定义问题的解空间; (2)确定易于搜索的解空间结构; (3)以深度优先方式搜索解空间,并在搜索过程
◎四川师范大学 计算机科学学院 刘芳 26
剪枝函数
算法设计与分析<<回溯法
算法的框架
一般来说,非递归回溯(迭代回溯)的算法过程:
1.数据初始化 2. 如果当前状态合法
判断是否到达目标: 是,打印结果;然后换下一种情况 不是,则继续向前探索 否则: 选择下一种可能;
检查是否合法
4.重复上述过程,直至所有情况都搜索完毕,结束。
回溯法 分支限界法
◎四川师范大学 计算机科学学院 刘芳 3
算法设计与分析<<回溯法
问题的解空间
问题的解向量:
问题的解可以表示成一个n元式(x1, x2,… xn)的形式。
问题的解空间
E={(x1, x2,… xn)| xi si , si为有限集 }称为问题的解空

约束条件
分析:
问题的解(子集)可以表示为X=(x1, x2, …, xn) 其中
如:
xi=1(1≤i≤n) :ai属于X xi=0(1≤i≤n) :ai不属于X
0), (1, 0, 1), (1, 1, 0), (1, 1, 1)}
当n=3时,解空间: { (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0,
◎四川师范大学 计算机科学学院 刘芳 28
算法设计与分析<<回溯法
小结
回溯法解题的特征
在深度优先搜索过程中动态产生问题的解空间。 几个术语
扩展结点:一个正在产生儿子的结点称为扩展结点 活结点:一个自身已生成但其儿子还没有全部生成的
结点称做活结点 死结点:一个所有儿子已经产生的结点称做死结点。
相关文档
最新文档