第5章回溯法PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
放置方案有C
n n
2种,而这个数字是非常庞大的,直接
枚举肯定会超时。
n皇后问题
考虑到皇后攻击的特性,所有的皇后不能同 行、同列,那么不妨我们先人为规定第k个皇 后在第k行,这样的话我们只要给出每个皇后 所处的列号就可以描述皇后的位置了。如图 放置方式就可以被表示为: 3、1、4、2 即第1个皇后在第3列,第2个 皇后在第1列,……
二、回溯的一般描述
一旦某个j元组(x1,x2,…,xj)违反D中仅涉及 x1,x2,…,xj 的一个约束,就可以肯定,以(x1, x2,…,xj)为前缀的任何n元组
(x1,x2,…,xj,xj+1,…,xn)都不会是问题P 的解。
三、回溯的一般步骤
回溯法正是针对这类问题,利用这类问题的 上述性质而提出来的比枚举法效率更高的算 法。
解问题P的最朴素的方法就是枚举法,即对E 中的所有n元组逐一地检测其是否满足D的全 部约束,显然,其计算量是相当大的。
二、回溯的一般描述
对于许多问题,所给定的约束集D具有完备 性。即i元组(x1,x2,…,xi)满足D中仅 涉及到x1,x2,…,xi的所有约束意味着j (j<i)元组(x1,x2,…,xj)一定也满足D 中仅涉及到x1,x2,…,xj的所有约束。
A2 A1
A
跳马问题
2. 当到达A1点后,又有三条线路可以选择, 于是再任意选择一条,到达B1。
3. 从B1再出发,又有两条线路可以选择,先 选一条,到达C1。
B3
A2 A1
A
B2 C2
C1 B1
跳马问题
4. 从C1出发,可以有三条路径,选择D1。但到了 D1以后,我们无路可走且D1也不是最终目标点, 因此,选择D1是错误的,我们退回C1重新选择 D2。同样D2也是错误的。再回到C1选择D3。 D3只可以到E1,但E1也是错误的。返回D3后, 没有其他选择,说明D3也是错误的,再回到C1。 此时C1不再有其他选择,故C1也是错误的,退回 B1,选择C2进行尝试。
从E-节点可移动到一个新节点。 如果能从当前的E-节点移动到一个新节点,那么这个新
节点将变成一个活节点和新的E-节点,旧的E-节点仍是 一个活节点。 如果不能移到一个新节点,当前的E-节点就“死”了 (即不再是一个活节点),那么便只能返回到最近被考 察的活节点(回溯),这个活节点变成了新的E-节点。 当我们已经找到了答案或者回溯尽了所有的活节点时, 搜索过程结束。
跳马问题
马走日字,当马一开始在黄点时,它下一步 可以到达的点有以下的八个,但由于题目规 定了只能往右走的限制,所以它只能走到四 个绿色点之一。
跳马问题
1. 当马一开始位于左下角的时候,根据规则, 它只有两条线路可以选择(另外两条超出棋 盘的范围),我们无法预知该走哪条,故任 意选择一条,到达A1。
回溯算法(一)
什么是回溯
入口回溯
▪迷宫游戏
回溯
➢什么是回溯法
回溯
▪回溯法是一个既带
有系统性又带有跳跃
性的的搜索算法
回溯
▪回溯法是以深度优先的方式系统地搜索问题 出口 的解, 它适用于解一些组合数较大的问题。
回溯(Trackback)是什么?
为什么回溯?
怎样回溯?
What
Why
How
一、回溯的概念
n皇后问题的解空间就应该是1~n全排列的一部分。
解空间的长度是n。
解空间的组织形式是一棵n叉树,一个可行的解就 是从根节点到叶子节点的一条路径。
控制策略则是当前皇后与前面所有的皇后都不同列 和不同对角线。
三、回溯的一般步骤
开始节点既是一个活节点又是一个E-节点(expansion node、扩展节点)。
实例—n皇后问题
在一个n×n的棋盘上放置n个国际象棋中 的皇后,要求所有的皇后之间都不形成攻 击。请你给出所有可能的排布方案数。
n
4
5
6
7
8
总数
2
10
4
40
92
n皇后问题
对于n皇后问题而言,我们很难找出很合适的方法 来快速的得到解,因此,我们只能采取最基本的枚 举法来求解。
但我们知道,在n×n的棋盘上放置n个棋子的所有
一、回溯的概念
回溯算法是一种有条不紊的搜索问题答案的 方法,是一种能避免不必要搜索的穷举式的 搜索算法,其基本思想就是穷举搜索。常用 于查找问题的解集或符合某些限制条件的最 佳解集。
一、回溯的概念
回溯算法常被用来解决自然数排列问题、皇 后问题、迷宫问题、数的拆分、0/1背包问 题、骑士问题、货船装箱问题和图形覆盖问 题等。
n皇后问题
既然回溯算法是由一个节点开始逐步扩展的, 因此我们采用把皇后一个一个的放到棋盘上 的方式来分析问题。
n皇后问题
首先要把第一个皇后放到棋盘上由于第一个皇后有 n列可以放,因此可扩展出n种情况。先选其中一列 放下这个皇后;
然后开始放第二个皇后。同样第二个皇后也有n列 可以放,因此也能扩展出n种情况,但第二个皇后 可能会和第一个皇后发生攻击,而一旦发生攻击, 就没有必要往下扩展第三个皇后,而如果没有发生 攻击,则继续放第三个皇后;
依此类推,直到n个皇后全都放下后,即得到一组 可行解。
扩展全部完成后即可得到结果。
n皇后问题
1
2
3
4
123
4123 4
12341
234
12341234
1234123412
341234
12341234
12341234
二、回溯的一般描述
可用回溯法求解的问题P,通常要能表达为:对于已知的由n元组 (x1,x2,…,xn)组成的一个状态空间
E={(x1,x2,…,xn)∣xi∈Si ,i=1,2,…,n},
给定关于Leabharlann Baidu元组中的一个分量的一个约束集D,要求E中满足D的全部约 束条件的所有n元组。其中Si是分量xi的定义域,且 |Si| 有限,i=1, 2,…,n。我们称E中满足D的全部约束条件的任一n元组为问题P的一 个解。
二、回溯的一般描述
像走迷宫这样,遇到死路就回头的搜索思路 就叫做“回溯”。
从问题的某种可能情况出发,搜索所有能到 达的可能情况,然后以其中一种可能的情况 为新的出发点,继续向下探索,当所有可能 情况都探索过且都无法到达目标的时候,再 回退到上一个出发点,继续探索另一个可能 情况,这种不断回头寻找目标的方法称为 “回溯法”。
实例—跳马问题
在n×m棋盘上有一中国象棋中的马:
1. 马走日字; 2. 马只能往右走。
请你找出一条可行路径,使得马可以从棋盘 的左下角(1,1)走到右上角(n,m)。
跳马问题
输入:9 ,5 输出:
(1,1)->(3,2)->(5,1)->(6,3)->(7,1)->(8,3)->(9,5)