题目
-
什么是图搜索过程?其中,重排Open表意味着什么?重排的原则是什么? 图搜索过程:一种系统地探索图的点和边、在图中寻找路径的过程 重排Open表:根据评价函数
f
f
f,重新对当前的搜索状态进行评估,以期找到当前最有希望的结点 重排的原则:评价函数
f
f
f -
试给出爬山法和分支界限搜索算法搜索图所示的从A到J的搜索路径,其中g(n)用节点深度表示,h(n)的值在图中显示。   -
怎么用一架天平3次称出13个硬币中唯一的然而未知轻重的假币(已知有标准的硬币) 方法一:状态空间 状态设置:
-
标记每枚硬币的状态为
-
标准币:
S
S
S -
标准币或轻币:
L
S
LS
LS -
标准币或重币:
H
S
HS
HS -
标准币或轻币或重币:
L
H
S
LHS
LHS -
记当前剩余称量次数为
t
t
t 用五元组
(
l
h
s
,
l
s
,
h
s
,
s
,
t
)
(lhs,ls,hs,s,t)
(lhs,ls,hs,s,t)描述当前状态,其中
l
h
s
,
l
s
,
h
s
,
s
,
t
lhs,ls,hs,s,t
lhs,ls,hs,s,t表示对应状态的硬币的枚数。则题设可以翻译为由初始状态
(
13
,
0
,
0
,
0
,
3
)
(13,0,0,0,3)
(13,0,0,0,3)到目标状态
(
0
,
1
,
0
,
12
,
0
)
(0,1,0,12,0)
(0,1,0,12,0)或
(
0
,
0
,
1
,
12
,
0
)
(0,0,1,12,0)
(0,0,1,12,0),约束条件为
t
≥
0
t\geq0
t≥0。 变化设置: 用函数PICKUP([lhs_1,ls_1,hs_1,s_1],[lhs_2,ls_2,hs_2,s_2]) 表示本次分别从
(
l
h
s
,
l
s
,
h
s
,
s
,
t
)
(lhs,ls,hs,s,t)
(lhs,ls,hs,s,t)中取出了
l
h
s
1
,
l
s
1
,
h
s
1
,
s
1
lhs_1,ls_1,hs_1,s_1
lhs1?,ls1?,hs1?,s1?个硬币放到了天平的左边,取出了
l
h
s
2
,
l
s
2
,
h
s
2
,
s
2
lhs_2,ls_2,hs_2,s_2
lhs2?,ls2?,hs2?,s2?个硬币放到了天平的右边。令PICKUP()=-1,0,1 分别表示天平左倾、平衡、右倾,每次称量后状态转化为
(
l
h
s
′
,
l
s
′
,
h
s
′
,
s
′
,
t
?
1
)
(lhs',ls',hs',s',t-1)
(lhs′,ls′,hs′,s′,t?1)。
-
左倾 PICKUP=-1 ,
s
′
=
s
+
l
s
1
+
h
s
2
+
(
l
h
s
?
l
h
s
1
?
l
h
s
2
)
+
(
l
s
?
l
s
1
?
l
s
2
)
+
(
h
s
?
h
s
1
?
h
s
2
)
=
s
+
l
s
?
l
s
2
+
h
s
?
h
s
1
+
l
h
s
?
(
l
h
s
1
+
l
h
s
2
)
l
s
′
=
l
s
2
+
l
h
s
2
h
s
′
=
h
s
1
+
l
h
s
1
l
h
s
′
=
0
\begin{aligned} s' &= s+ls_1+hs_2+(lhs-lhs_1-lhs_2)+(ls-ls_1-ls_2)+(hs-hs_1-hs_2) \\ &= s+ls-ls_2+hs-hs_1+lhs-(lhs_1+lhs_2) \\ ls' &= ls_2+lhs_2 \\ hs' &= hs_1+lhs_1 \\ lhs' &= 0 \end{aligned}
s′ls′hs′lhs′?=s+ls1?+hs2?+(lhs?lhs1??lhs2?)+(ls?ls1??ls2?)+(hs?hs1??hs2?)=s+ls?ls2?+hs?hs1?+lhs?(lhs1?+lhs2?)=ls2?+lhs2?=hs1?+lhs1?=0?
- 在左天平状态为
L
S
LS
LS的硬币,在右天平的状态为
H
S
HS
HS和天平下的硬币都是标准型;
- 右天平原有的
l
s
2
ls_2
ls2?个轻标准型硬币仍然为轻标准型,右天平的
l
h
s
2
lhs_2
lhs2?个轻重标准型硬币改为轻标准型;0
- 左天平原有的
h
s
1
hs_1
hs1?个重标准型硬币仍然为重标准型,左天平的
l
h
s
1
lhs_1
lhs1?个轻重标准型硬币改为重标准型;
- 只要不平衡,就不存在轻重标准型的硬币,
l
h
s
′
=
0
lhs'=0
lhs′=0
-
平衡 PICKUP=0 ,
s
′
=
s
+
l
s
1
+
l
s
2
+
h
s
1
+
h
s
2
+
l
h
s
1
+
l
h
s
2
l
s
′
=
l
s
?
l
s
1
?
l
s
2
h
s
′
=
h
s
?
h
s
1
?
h
s
2
l
h
s
′
=
l
h
s
?
l
h
s
1
?
l
h
s
2
\begin{aligned} s' &= s+ls_1+ls_2+hs_1+hs_2+lhs_1+lhs_2 \\ ls' &= ls-ls_1-ls_2 \\ hs' &= hs-hs_1-hs_2 \\ lhs' &= lhs-lhs_1-lhs_2 \end{aligned}
s′ls′hs′lhs′?=s+ls1?+ls2?+hs1?+hs2?+lhs1?+lhs2?=ls?ls1??ls2?=hs?hs1??hs2?=lhs?lhs1??lhs2??
- 在天平上的所有硬币都是标准型
- 左右天平上的轻标准型、重标准型均改为标准型
- 平衡情况下,轻重标准型硬币需要减去天平上的轻重标准型
-
右倾 PICKUP=1 ,
s
′
=
s
+
l
s
?
l
s
1
+
h
s
?
h
s
2
+
l
h
s
?
(
l
h
s
1
+
l
h
s
2
)
l
s
′
=
l
s
1
+
l
h
s
1
h
s
′
=
h
s
2
+
l
h
s
2
l
h
s
′
=
0
\begin{aligned} s' &= s+ls-ls_1+hs-hs_2+lhs-(lhs_1+lhs_2) \\ ls' &= ls_1+lhs_1 \\ hs' &= hs_2+lhs_2 \\ lhs' &= 0 \end{aligned}
s′ls′hs′lhs′?=s+ls?ls1?+hs?hs2?+lhs?(lhs1?+lhs2?)=ls1?+lhs1?=hs2?+lhs2?=0?
搜索路径
与或图中省略:

方法二:逻辑推理
第一次称量:
将13个硬币(标记为
c
1
,
c
2
,
?
?
,
c
13
c_1,c_2,\cdots,c_{13}
c1?,c2?,?,c13?)分为三堆,其中两堆各有
4
4
4枚,余下一堆有
5
5
5枚,三堆分别记为
C
(
1
,
4
)
,
C
(
5
,
8
)
,
C
(
9
,
13
)
C(1,4),C(5,8),C(9,13)
C(1,4),C(5,8),C(9,13),称量
C
(
1
,
4
)
,
C
(
5
,
8
)
C(1,4),C(5,8)
C(1,4),C(5,8),
-
若天平平衡,说明假币在
C
(
9
,
13
)
C(9,13)
C(9,13)中。任取
C
(
9
,
13
)
C(9,13)
C(9,13)中的
3
3
3枚,以
C
(
9
,
11
)
C(9,11)
C(9,11)为例,与
C
(
1
,
3
)
C(1,3)
C(1,3)称量, 第二次称量:
-
若天平平衡,说明假币为
c
12
c_{12}
c12?或
c
13
c_{13}
c13?,称量
c
12
c_{12}
c12?与
c
1
c_{1}
c1?, 第三次称量:
- 若天平平衡,则假币为
c
13
c_{13}
c13?;
- 若天平不平衡,则假币为
c
12
c_{12}
c12?。
-
若天平不平衡,说明假币为
c
9
c_{9}
c9?或
c
10
c_{10}
c10?或
c
11
c_{11}
c11?;且若
C
(
9
,
11
)
C(9,11)
C(9,11)更轻/重,则假币重量更轻/重。称量
c
9
c_9
c9?与
c
10
c_{10}
c10?, 第三次称量:
- 若天平平衡,则假币为
c
11
c_{11}
c11?;
- 若天平不平衡,则
c
9
,
c
10
c_9,c_{10}
c9?,c10?中较重的那枚为假币。
-
若天平不平衡,则
C
(
9
,
13
)
C(9,13)
C(9,13)中均为良币;假设
C
(
1
,
4
)
C(1,4)
C(1,4)更重,则
C
(
1
,
4
)
C(1,4)
C(1,4)中有一枚重币或
C
(
5
,
8
)
C(5,8)
C(5,8)中有一枚轻币。任取
C
(
1
,
4
)
C(1,4)
C(1,4)中的
3
3
3枚和
C
(
5
,
8
)
C(5,8)
C(5,8)中的
2
2
2枚,以
c
1
,
c
2
,
c
3
,
c
5
,
c
6
c_1,c_2,c_3,c_5,c_6
c1?,c2?,c3?,c5?,c6?为例,与
C
(
9
,
13
)
C(9,13)
C(9,13)称量, 第二次称量:
-
若天平平衡,则称量
c
7
,
c
8
c_7,c_8
c7?,c8?, 第三次称量
- 若天平平衡,则假币为
c
4
c_4
c4?;
- 若天平不平衡,则
c
7
,
c
8
c_7,c_8
c7?,c8?中较轻的那枚为假币。
-
若天平不平衡,假设
c
1
,
c
2
,
c
3
,
c
5
,
c
6
c_1,c_2,c_3,c_5,c_6
c1?,c2?,c3?,c5?,c6?重于
C
(
9
,
13
)
C(9,13)
C(9,13),则假币更重,则假币在
C
(
1
,
3
)
C(1,3)
C(1,3)中,称量
c
1
,
c
2
c_1,c_2
c1?,c2?, 第三次称量:
- 若天平平衡,则假币为
c
3
c_3
c3?;
- 若天平不平衡,则
c
1
,
c
2
c_1,c_2
c1?,c2?中较重的那枚为假币。
-
给定4升和3升的水壶各一个。水壶上没有刻度。可以向水壶中加水。如何在4升的壶中准确的得到2升水? 用
(
X
,
Y
)
(X,Y)
(X,Y)表示当前两壶中的水量,其中
X
X
X表示
4
4
4升壶的水量,
Y
Y
Y表示
3
3
3升壶的水量,题设可翻译为初始状态
(
0
,
0
)
(0,0)
(0,0)到目标状态
(
2
,
y
)
(2,y)
(2,y)的路径。用数组closed 记录已出现过的状态,open 记录当前状态可以转化成的状态。遍历open ,将遍历到的状态移出open ,若遍历到closed 中的状态,那么当前搜索停止,探索open 中的下一个情况;若遍历到新状态,则将新状态加入closed ,在当前层搜索结束后更新open 表。  -
对于A* 算法,证明下面的结论: a) 对于有限图,A* 算法一定会在有限步内终止; b) 对于无限图,只要从初始节点到目标节点有路径存在,则A* 算法也必然会终止; c) 若存在路径,则A* 算法一定会终止在最优路径上。 证明 a) A*算法终止有两种情况:
- 成功找到解,退出;
- 查找失败,
open 表为空时退出。 对于情况1,有限图条件下必然为有限步;对于情况2,每次循环会弹出open 表中的一个结点,且open 表中结点个数为有限个,于是循环次数一定有限。得证。 b) 下用反证法证明:假设无限图从初始节点到目标节点有路径存在,A*不终止,
-
先证引理1:对无限图,若有从初始节点s 到目标节点T 的路径,则A*不结束时,在open 表中即使最小的一个
f
f
f值也将增到任意大,或有
f
(
n
)
>
f
?
(
S
)
f(n)>f^*(S)
f(n)>f?(S)。 设n 为open 表中任意一点,记
d
?
(
n
)
d^*(n)
d?(n)为从初始节点S 到n 最短路径的长度,记
?
\epsilon
??为边耗散值的最小值,则
g
(
n
)
≥
g
?
(
n
)
≥
d
?
(
n
)
?
?
g(n)\geq g^*(n)\geq d^*(n)\cdot \epsilon
g(n)≥g?(n)≥d?(n)?? 易得
f
(
n
)
≥
g
(
n
)
≥
d
?
(
n
)
?
?
f(n)\geq g(n)\geq d^*(n)\cdot \epsilon
f(n)≥g(n)≥d?(n)?? 若A*不终止,open 表中总有后续节点加入,又因为图为无限图,所以
d
?
(
n
)
d^*(n)
d?(n)会增加到任意大;又有
?
>
0
\epsilon>0
?>0,所以
f
(
n
)
f(n)
f(n)会增加到无限大。而因为小于当前
f
f
f值的结点都会被考察后放入closed 表,所以
f
(
n
)
≥
f
?
(
S
)
f(n)\geq f^*(S)
f(n)≥f?(S)。 -
再证引理2:若从初始节点到目标节点有路径存在,A*结束前,open 表中必存在
f
(
n
)
≤
f
?
(
S
)
f(n)\leq f^*(S)
f(n)≤f?(S)。 存在一个结点n ,n 在最佳路径上,则有
f
(
n
)
=
g
(
n
)
+
h
(
n
)
=
g
?
(
n
)
+
h
(
n
)
≤
g
?
(
n
)
+
h
?
(
n
)
=
f
?
(
n
)
=
f
?
(
S
)
\begin{aligned} f(n) &= g(n)+h(n) \\ &= g^*(n)+h(n) \\ &\leq g^*(n)+h^*(n) \\ &= f^*(n) \\ &= f^*(S) \end{aligned}
f(n)?=g(n)+h(n)=g?(n)+h(n)≤g?(n)+h?(n)=f?(n)=f?(S)? 由引理1,若A*不结束,则对open 表中的所有结点n 有
f
(
n
)
>
f
?
(
S
)
f(n)>f^*(S)
f(n)>f?(S);而由引理2,由于从初始节点到目标节点有路径存在,那么必存在结点n' ,使得
f
(
n
′
)
≤
f
?
(
S
)
f(n')\leq f^*(S)
f(n′)≤f?(S)。矛盾,所以假设不成立。得证。 c) 根据a}和b),A*一定找到一条路径结束。 下用反证法证明:假设找到的路径s
→
\rightarrow
→?T 不是最佳路径,则
f
(
T
)
=
g
(
T
)
>
f
?
(
S
)
f(T)=g(T)> f^*(S)
f(T)=g(T)>f?(S) 由引理2,open 中存在结点n 使得
f
(
n
)
≤
f
?
(
S
)
f(n)\leq f^*(S)
f(n)≤f?(S),则
f
(
n
)
≤
f
?
(
S
)
<
f
(
T
)
f(n)\leq f^*(S) < f(T)
f(n)≤f?(S)<f(T) 此时A*应选择n 扩展,而不是T ,与A*选择了T 作为结束矛盾,所以假设不成立。得证。
定找到一条路径结束。
下用反证法证明:假设找到的路径s
→
\rightarrow
→?T 不是最佳路径,则
f
(
T
)
=
g
(
T
)
>
f
?
(
S
)
f(T)=g(T)> f^*(S)
f(T)=g(T)>f?(S) 由引理2,open 中存在结点n 使得
f
(
n
)
≤
f
?
(
S
)
f(n)\leq f^*(S)
f(n)≤f?(S),则
f
(
n
)
≤
f
?
(
S
)
<
f
(
T
)
f(n)\leq f^*(S) < f(T)
f(n)≤f?(S)<f(T) 此时A*应选择n 扩展,而不是T ,与A*选择了T 作为结束矛盾,所以假设不成立。得证。
|