当前位置:文档之家› 第3章 图搜索与问题求解

第3章 图搜索与问题求解


( 4 )对其余子节点配上指向 N 的返回指针后放入 OPEN 表 中某处,或对OPEN表进行重新排序,转步2。
3.1.2 状态图搜索

树式算法的几点说明


返回指针指的是父节点在CLOSED表中的编号。 步6中修改指针的原因是返回初始节点的路径有两 条,要选择“短”的那条路径。 这里路径长短以节点数来衡量,在后面将会看到以 代价来衡量。按代价衡量修改返回指针的同时还要 修改相应的代价值。
3.1.2 状态图搜索
1 搜索方式


树式搜索 在搜索过程中记录所经过的所有节点和边。树式搜 索所记录的轨迹始终是一棵树,这棵树也就是搜索过 程中所产生的搜索树。 线式搜索 在搜索过程中只记录那些当前认为在所找路径上的 节点和边。

不回溯线式搜索 可回溯线式搜索
3.1.2 状态图搜索
2 搜索策略
3.1.2 状态图搜索



搜索:从初始节点出发,沿着与之相连的边试探 地前进,寻找目标节点的过程。 搜索过程中经过的节点和边,按原图的连接关系, 便会构成一个树型的有向图,这种树型有向图称 为搜索树。 搜索进行中,搜索树会不断增长,直到当搜索树 中出现目标节点,搜索便停止。这时从搜索树中 就可很容易地找出从初始节点到目标节点的路径 (解)来。
八数码深度优先搜索

3.1.4 启发式搜索
• 启发式搜索的目的 利用知识来引导搜索,达到减少搜索范围,降低问题复 杂度。 • 启发性信息的强弱 强:降低搜索的工作量,但可能导致找不到最优解。 弱:一般导致工作量加大,极限情况下变为盲目搜索, 但可能可以找到最优解。
3.1.4 启发式搜索

启发函数
步5 扩展N,选取其一个未在CLOSED表中出现过的
子节点N1放入 CLOSED表中,令N=N1,转步3。
3.1.2 状态图搜索

可回溯的线式搜索
步1 把初始节点S0放入CLOSED表中; 步 2 令 N = S0 ; 步3 若N是目标节点,则搜索成功,结束。 步4 若N不可扩展,则移出CLOSED表中的末端节点Ne ,若Ne=S0, 则搜索失败,退出。否则以CLOSED表新的末端节点Ne作为 N,即令N= Ne,转步4; 步5 扩展N,选取其一个未在CLOSED表中出现过的子节点N1放入 CLOSED表中,令N= N1 ,转步3。
CLOSED
24
广度优先搜索
B C G M
A
D
E
K S L T
F
H
O
I
J
Q
N
P
U
R
OPEN
A B C D E F G H I J A B C D
CLOSED
25
广度优先搜索
B C G M
A
D
E
K S L T
F
H
O
I
J
Q
N
P
U
R
OPEN
A B C D E F G H I J K L A B C D E
CLOSED
26
3.1.3 穷举式搜索

广度优先搜索的特点



广度优先中 OPEN表是一个队列, CLOSED表是一 个顺序表,表中各节点按顺序编号,正被考察的节 点在表中编号最大。 广度优先策略是完备的,即如果问题的解存在,则 它一定可以找到解,并且找到的解还是最优解。 广度优先搜索策略与问题无关,具有通用性。 缺点搜索效率低。
(1)删除N的先辈节点(如果有的话)。
(2)对已存在于OPEN表中的节点(如果有的话)也删除 之;删除之前要比较其返回初始节点的新路径与原路 径,如果新路径“短”,则修改这些节点在 OPEN 表中 的原返回指针,使其沿新路径返回。
( 3 )对已存在于 CLOSED 表的节点,作与( 2 )同样的处 理,并且将其移出 CLOSED 表,放入 OPEN 表中重新扩展 。
a.P在n之前已是某一节点m的 后继,所以需要做如同(2) 同样的处理,如图右部所示。 继也在n之前已经生成,称为 Ps。对Ps而言同样可能 由于 n→P这一路径的加入,又必 须比较多条路径之后而取代价 小的一条,如图左部所示。
Ps
P
3.1.2 状态图搜索
例:设当前搜索图和搜索树如图所示
S0
S0
n
八数码广度优先搜索
3.1.3 穷举式搜索

深度优先搜索

搜索策略
在搜索树的每一层始终先扩展一个子节点,不断地向纵深前进, 直到不能再前进,才从当前节点返回到上一级节点,从另一方向 继续前进。

开始 把S0送入OPEN表
OPEN表空 ? N 把OPEN表的第一个节 点(节点N)从表中移 出,放入CLOSED表中

树式搜索算法
步1
步2
把初始节点S0放入OPEN表中。
若OPEN表为空,则搜索失败,退出。
步 3 取 OPEN 表中第一个节点 N 放在 CLOSED 表中; 并冠以顺序编号n; 步4 若目标节点Sg=N,成功退出。
步5
若N不可扩展,转步2。
步6 扩展N,生成一组节点,对这组子节点作如 下处理:
3.1.2 状态图搜索
O
I
J
Q
N
P
U
R
OPEN
A
CLOSED
深度优先搜索
B C G M
A
D
E
K S L T
F
H
O
I
J
Q
N
P
U
R
OPEN
D C B A
CLOSED
深度优先搜索
B C G M
A
D
E
K S L T
F
H
O
I
J
Q
N
P
U
R
OPEN
J I C B A D
CLOSED
深度优先搜索
B C G M
A
D
E
K S L T
F
n
F
P
F
P
m
Ps Ps’ Ps Ps’
m
3.1.2 状态图搜索

若启发函数f(n)为从 S0到节点n的最短路径的长度,用 边的数目来考察,当前扩展的节点是搜索图中的n,P是 n的后继
S0 S0
n
n
F
F P m Ps’ P m Ps’
Ps
Ps
3.1.2 状态图搜索

不回溯线式搜索算法
步1 把初始节点S0放入CLOSED表中; 步2 令N= S0 ; 步3 若N是目标节点,则搜索成功,结束。 步4 若N不可扩展,则搜索失败,退出。



盲目搜索 无向导的搜索,树式盲目搜索就是穷举搜索,不 回溯的线式搜索是随机碰撞式搜索,回溯的线式搜 索也是穷举式搜索。 启发式搜索 是利用“启发性信息”引导的搜索策略。“启发 性信息”就是与问题有关的有利于尽快找到问题解 的信息或知识。启发式搜索分为不同的策略,如全 局择优,局部择优,最佳图搜索。 按扩展顺序不同分为广度优先和深度优先。


启发函数是用来估计搜索树节点x与目标节点接近 程度的一种函数,通常记为h(x)。 定义启发函数的参考思路



一个节点到目标节点的某种距离或差异的量度。 一个节点处在最佳路径上的概率 根据主观经验的主观打分等。
m P P在n之前已是某一节点m的后继 先扩展
n 后扩展
3.1.2 状态图搜索

对已存在于CLOSED表的节点,作与(2)同样的处理,并将 其移出CLOSED表,放入OPEN表中重新扩展。
S0
过去对Ps的 n 最优路径 k
现在生成 P的路径 m
过去生成 P的路径 b.P在Closed表中,说明P的后
2 8 3 7 1 4 6 5
16
2 3 4 1 8 7 6 5
17
1 2 3 8 4 7 6 5
18
2 8 1 4 3 7 6 5
19
2 8 3 1 4 5 7 6
20
2 8 3 6 4 1 7 5
21
2 8 3 1 6 7 5 4
22
8 3 2 1 4 7 6 5
23
8 1 3 2 4 7 6 5
A
D
E
K S L T
F
H
O
I
JQNPU NhomakorabeaR
OPEN
A B C D A
CLOSED
22
广度优先搜索
B C G M
A
D
E
K S L T
F
H
O
I
J
Q
N
P
U
R
OPEN
A B C D E F A B
CLOSED
23
广度优先搜索
B C G M
A
D
E
K S L T
F
H
O
I
J
Q
N
P
U
R
OPEN
A B C D E F G H A B C
H
O
I
J
Q
N
P
U
R
OPEN
R I C B A D J
CLOSED
3.1.3 穷举式搜索

深度优先搜索的特点

OPEN表为一个堆栈。 深度优先又称纵向搜索。 一般不能保证找到最优解。 当深度限制不合理时,可能找不到解,可以将算法 改为可变深度限制,即有界深度优先搜索。
3.1.3 穷举式搜索
LOGO
第 3章 图搜索与问题求解
主讲:李 辉
Email:lihui@
相关主题