搜索算法 PPT
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 这种以“深度优先”的方式系统地搜索问题地 解的算法称为回溯法。
28
深度优先搜索 DFS
• 深度优先搜索就是在搜索树的每一层始 终先只扩展一个子节点,不断地向纵深 前进直到不能再前进(到达叶子节点或 受到深度限制)时,才从当前节点返回 到上一级节点,从其它子节点处继续扩 展前进。
• 这种方法的搜索树是从树根开始一枝一 枝逐渐形成的。英语中用Depth-FirstSearch表示,所以我们也把深度优先搜 索法简称为DFS。
29
1
2
3
4
5
6
7
8
30
1
2
3
4
5
6
7
8
31
1
2
3
4
5
6
7
8
32
1
2
3
4
5
6
7
8
33
1
2
3
4
5
6
7
8
34
1
2
3
4
5
6
7
8
35
1
2
3
4
5
6
7
பைடு நூலகம்
8
36
1
2
3
4
5
6
7
8
37
1
2
3
4
5
6
7
8
38
每次搜索指定点,对于其所有未 访问过的近邻,每搜索到一个则先 去搜索其近邻,待对其近邻的 DFS完以后再搜索剩下的那些近 邻。
• 问题的一个可行解就是一条从起始节点 出发到目标状态集合中任意一个节点的 路径。
13
旅行商问题
15
16
• 经常采用树形结构表示解空间,称为解 空间树
• 常见的两种解空间树:子集树、排列树
17
• 子集树:当所给问题是从n个元素的集合 S中找出满足某种性质的子集时,相应的 解空间为子集树。(0-1背包)
18
遍历子集树需O(2n)计算时间
19
• 排列树:当所给问题是确定n个元素满足 某种性质的排列时,相应的解空间为排列 树。(旅行售货员问题)
20
1
2
3
2
3
1
31
2
3
23
12
1
遍历排列树需要O(n!)计算时间
21
状态空间搜索搜索算法
• 搜索过程实际上是根据初始条件和扩展 规则构造一棵解答树并寻找符合目标状 态的节点的过程。
9
• 哈密顿回路可以定义为n+1个相邻节点 vi0,…,vin-1,vi0的一个序列
• 可以通过生成n-1个中间城市的组合来 得到所有的旅行路线,计算这些路线的 长度,然后求得最短的线路
算法时间复杂度 O(n!)
10
• 对于枚举算法,程序优化的主要考虑方 向是:通过加强约束条件,缩小可能解 的集合的规模。
43
旅行售货员问题
1
39
DFS算法框架: 递归写法:(较常用)
DFS(NODE N) {
FOR N的每一个邻接结点V {
IF(V还没有被搜索过) DFS(V);
} }
40
回溯法
• 回溯法是一种通用性解法,可以将回溯法看 作是带优化的穷举法。
• 回溯法的基本思想是在一棵含有问题全部可 能解的状态空间树上进行深度优先搜索。搜 索过程中,每到达一个结点时,则判断该结 点为根的子树是否含有问题的解,如果可以 确定该子树中不含有问题的解,则放弃对该 子树的搜索,退回到上层父结点,继续下一 步深度优先搜索过程。
5
• 从可能的集合中一一枚举各元素,用题 目给定的检验条件判定哪些是无用的, 哪些是有用的。能使命题成立者,即为 问题的解。
6
• (1)建立问题的数学模型,确定问题 的可能解的集合(可能解的空间)。
• (2)逐一枚举可能解集合中的元素, 验证是否是问题的解。
7
• For each s in S //S是问题所有可能 解的集合
• 在回溯法中,并不是先构造出整棵状态空间 树,再进行搜索,而是在搜索过程,逐步构 造出状态空间树,即边搜索,边构造。
41
生成问题状态的基本方法
• 深度优先的问题状态生成法:如果对一个扩展 结点R,一旦产生了它的一个儿子C,就把C当 做新的扩展结点。在完成对子树C(以C为根的 子树)的穷尽搜索之后,将R重新变成扩展结点, 继续生成R的下一个儿子(如果存在)
• 回溯法 • 分枝限界法
25
搜索算法——回溯法
迷宫老鼠问题
入口
(8,1) (7,1) (6,1) (5,1) (4,1) (3,1) (2,1) (1,1)
出口
27
回溯法
• 回溯法在问题的解空间树中,按深度优先策略, 从根结点出发搜索解空间树。算法搜索至解空 间树的任意一点时,先判断该结点是否包含问 题的解。如果肯定不包含,则跳过对该结点为 根的子树的搜索,逐层向其祖先结点回溯;否 则,进入该子树,继续按深度优先策略搜索。
• 回溯法:为了避免生成那些不可能产生最佳解 的问题状态,要不断地利用限界函数 (bounding function)来处死那些实际上不可 能产生所需解的活结点,以减少问题的计算量。
42
0-1背包问题
可行解 可行解
n=3时,0-1背包问题解空间树 w=[16,15,15],p=[45,25,25],背包容量C=30
22
搜索算法框架
= 问题的解空间 + 遍历算法 + 结果判断条件 + 剪技条件
23
状态空间搜索算法通常的解题步骤: (1)针对所给问题,定义问题的解空间; (2)确定易于搜索的解空间结构,并构造结果判 断条件 (3)以适当方式搜索解空间,并在搜索过程中用 剪枝条件避免无效搜索。
24
状态空间搜索策略
搜索算法
• 搜索算法是利用计算机的高性能来有目 的的穷举一个问题的部分或所有的可能 情况,从而求出问题的解的一种方法。
3
搜索常用的方法
• 枚举 • 状态空间搜索算法
–深度优先搜索 –广度优先搜索 –双向广度优先搜索 –回溯法 –分枝限界法 –A*算法
4
枚举法
• 要求生成问题域中的每一个解元素,选 出其中满足问题约束的元素,然后再找 出一个期望元素(如使目标函数达到最 值的元素)
If s is a solution then begin write(s); exit; end;
8
旅行商问题
• 要求找出一条n个给定城市间的最短路 径,使到在回到出发的城市之前,对每 个城市都只访问一次
• 用图的顶点代表城市,边的权重表示城 市间的距离,这个问题可以转化为求一 个图的最短哈密顿回路
11
• 枚举法:生成方案验证方案 • 能不能在生成方案的中途也做一些验证,
从而避免一些肯定不会是解的方案生成 呢? • 需要把解的生成分成若干步骤,这样才 给每个步骤的验证提供了可能
12
问题的解空间表示
• 问题的解空间指的是问题的所有可能解 的集合
• 解空间的节点表示状态,即问题求解过 程的不同阶段,两节点之间的有向弧线 则代表状态转移。
28
深度优先搜索 DFS
• 深度优先搜索就是在搜索树的每一层始 终先只扩展一个子节点,不断地向纵深 前进直到不能再前进(到达叶子节点或 受到深度限制)时,才从当前节点返回 到上一级节点,从其它子节点处继续扩 展前进。
• 这种方法的搜索树是从树根开始一枝一 枝逐渐形成的。英语中用Depth-FirstSearch表示,所以我们也把深度优先搜 索法简称为DFS。
29
1
2
3
4
5
6
7
8
30
1
2
3
4
5
6
7
8
31
1
2
3
4
5
6
7
8
32
1
2
3
4
5
6
7
8
33
1
2
3
4
5
6
7
8
34
1
2
3
4
5
6
7
8
35
1
2
3
4
5
6
7
பைடு நூலகம்
8
36
1
2
3
4
5
6
7
8
37
1
2
3
4
5
6
7
8
38
每次搜索指定点,对于其所有未 访问过的近邻,每搜索到一个则先 去搜索其近邻,待对其近邻的 DFS完以后再搜索剩下的那些近 邻。
• 问题的一个可行解就是一条从起始节点 出发到目标状态集合中任意一个节点的 路径。
13
旅行商问题
15
16
• 经常采用树形结构表示解空间,称为解 空间树
• 常见的两种解空间树:子集树、排列树
17
• 子集树:当所给问题是从n个元素的集合 S中找出满足某种性质的子集时,相应的 解空间为子集树。(0-1背包)
18
遍历子集树需O(2n)计算时间
19
• 排列树:当所给问题是确定n个元素满足 某种性质的排列时,相应的解空间为排列 树。(旅行售货员问题)
20
1
2
3
2
3
1
31
2
3
23
12
1
遍历排列树需要O(n!)计算时间
21
状态空间搜索搜索算法
• 搜索过程实际上是根据初始条件和扩展 规则构造一棵解答树并寻找符合目标状 态的节点的过程。
9
• 哈密顿回路可以定义为n+1个相邻节点 vi0,…,vin-1,vi0的一个序列
• 可以通过生成n-1个中间城市的组合来 得到所有的旅行路线,计算这些路线的 长度,然后求得最短的线路
算法时间复杂度 O(n!)
10
• 对于枚举算法,程序优化的主要考虑方 向是:通过加强约束条件,缩小可能解 的集合的规模。
43
旅行售货员问题
1
39
DFS算法框架: 递归写法:(较常用)
DFS(NODE N) {
FOR N的每一个邻接结点V {
IF(V还没有被搜索过) DFS(V);
} }
40
回溯法
• 回溯法是一种通用性解法,可以将回溯法看 作是带优化的穷举法。
• 回溯法的基本思想是在一棵含有问题全部可 能解的状态空间树上进行深度优先搜索。搜 索过程中,每到达一个结点时,则判断该结 点为根的子树是否含有问题的解,如果可以 确定该子树中不含有问题的解,则放弃对该 子树的搜索,退回到上层父结点,继续下一 步深度优先搜索过程。
5
• 从可能的集合中一一枚举各元素,用题 目给定的检验条件判定哪些是无用的, 哪些是有用的。能使命题成立者,即为 问题的解。
6
• (1)建立问题的数学模型,确定问题 的可能解的集合(可能解的空间)。
• (2)逐一枚举可能解集合中的元素, 验证是否是问题的解。
7
• For each s in S //S是问题所有可能 解的集合
• 在回溯法中,并不是先构造出整棵状态空间 树,再进行搜索,而是在搜索过程,逐步构 造出状态空间树,即边搜索,边构造。
41
生成问题状态的基本方法
• 深度优先的问题状态生成法:如果对一个扩展 结点R,一旦产生了它的一个儿子C,就把C当 做新的扩展结点。在完成对子树C(以C为根的 子树)的穷尽搜索之后,将R重新变成扩展结点, 继续生成R的下一个儿子(如果存在)
• 回溯法 • 分枝限界法
25
搜索算法——回溯法
迷宫老鼠问题
入口
(8,1) (7,1) (6,1) (5,1) (4,1) (3,1) (2,1) (1,1)
出口
27
回溯法
• 回溯法在问题的解空间树中,按深度优先策略, 从根结点出发搜索解空间树。算法搜索至解空 间树的任意一点时,先判断该结点是否包含问 题的解。如果肯定不包含,则跳过对该结点为 根的子树的搜索,逐层向其祖先结点回溯;否 则,进入该子树,继续按深度优先策略搜索。
• 回溯法:为了避免生成那些不可能产生最佳解 的问题状态,要不断地利用限界函数 (bounding function)来处死那些实际上不可 能产生所需解的活结点,以减少问题的计算量。
42
0-1背包问题
可行解 可行解
n=3时,0-1背包问题解空间树 w=[16,15,15],p=[45,25,25],背包容量C=30
22
搜索算法框架
= 问题的解空间 + 遍历算法 + 结果判断条件 + 剪技条件
23
状态空间搜索算法通常的解题步骤: (1)针对所给问题,定义问题的解空间; (2)确定易于搜索的解空间结构,并构造结果判 断条件 (3)以适当方式搜索解空间,并在搜索过程中用 剪枝条件避免无效搜索。
24
状态空间搜索策略
搜索算法
• 搜索算法是利用计算机的高性能来有目 的的穷举一个问题的部分或所有的可能 情况,从而求出问题的解的一种方法。
3
搜索常用的方法
• 枚举 • 状态空间搜索算法
–深度优先搜索 –广度优先搜索 –双向广度优先搜索 –回溯法 –分枝限界法 –A*算法
4
枚举法
• 要求生成问题域中的每一个解元素,选 出其中满足问题约束的元素,然后再找 出一个期望元素(如使目标函数达到最 值的元素)
If s is a solution then begin write(s); exit; end;
8
旅行商问题
• 要求找出一条n个给定城市间的最短路 径,使到在回到出发的城市之前,对每 个城市都只访问一次
• 用图的顶点代表城市,边的权重表示城 市间的距离,这个问题可以转化为求一 个图的最短哈密顿回路
11
• 枚举法:生成方案验证方案 • 能不能在生成方案的中途也做一些验证,
从而避免一些肯定不会是解的方案生成 呢? • 需要把解的生成分成若干步骤,这样才 给每个步骤的验证提供了可能
12
问题的解空间表示
• 问题的解空间指的是问题的所有可能解 的集合
• 解空间的节点表示状态,即问题求解过 程的不同阶段,两节点之间的有向弧线 则代表状态转移。