1
1. 什么是图搜索过程?其中,重排Open表意味着什么?重排的原则是什么?
【图搜索过程】
一种在图中寻找路径的方法
将初始点和目标节点传入function中
将初始点通过某种限定条件下不断迭代变换到另一个点,一直到所有点遍历完or变换到目标节点,最后得到路径的过程。
【重排OPEN表】
按照某个试探值(或准则、启发信息等)重新对未扩展的节点进行排序。
换句话说也就是将优先扩展哪个节点不同的排序标准
【重排原则】
重排的原则当视具体需求而定,不同的原则对应着不同的搜索策略,如果想尽快地找到一个解,则应当将最有可能达到目标节点的那些节点排在OPEN表的前面部分,如果想找到代价最小的解,则应当按代价从小到大的顺序重排OPEN表。
比如启发式搜索中就是按照(当前节点到起始节点的耗散值+当前节点到终点的**最小**耗散值)来进行排序,并且拿其中最小耗散值点来进行下一步的拓展
2
2. 试给出爬山法和分支界限搜索算法搜索图1 所示的从A到J的搜索路径,其中g(n)用节点深度表示,h(n)的值在图中显示
在下方图中,红色字迹标注为f(n),画圈部分为搜索的顺序
爬山法,每次只挑选最优可能往下搜索,并且不回溯,次序依次为ADEJ
分支界限搜索法,以f(n)最小来进行搜索,次序依次为ADBGEJ
3
3. 怎么用一架天平3次称出13个硬币中唯一的然而未知轻重的假币(已知有标准的硬币)
将硬币标为 1,2,3,4,5,6,7,8,9,10,11,12,13。
第一次称量:将硬币分为三组,a = {1, 2, 3, 4},b {5, 6, 7, 8},c ={9, 10, 11, 12, 13}。称量 a 与 b,有三种结果:
-
平衡;
-
左边重
-
右边重
分别进行第二次称量(1)、第二次称量(2)与第二次称量(3)。
第二次称量(1):现假设假币在 c 中。我们任意从a中拿三个硬币(1,2,3)作为d组,9,10,11放置为e组,12、13放在f组,所以 d 中都是标准硬币。称量 d 与 e
有三种结果:
-
平衡;
-
左边重;
-
右边重。
分别进行第三次称量(1-1)、第三次称量(1-2、3)。
第三次称量(1-1):现已知假币在 f 中。
取 1 与 12 称量
如果平衡,那么假币是 13,
否则假币是 12。称量完毕
第三次称量(1-2、3):现已知假币在 e 中,且假币比标准硬币轻(重)。
取 9 与 10 称量,
如果平衡,那么假币是 11,
否则假币的较轻(重)的一枚。称量完毕。
第二次称量(2):现已知假币在 a 或 b 中,且要么 {1, 2, 3, 4} 中某一枚较重,要么 {5, 6, 7, 8} 中某一枚较轻。取 d = {1, 2, 5},e = {3, 4, 6},f = {7, 8}。称量 d 与 e,
有三种结果:
-
平衡;
-
左边重;
-
右边重。
分别进行第三次称量(2-1)、第三次称量(2-2)与第三次称量(2-3)。
第三次称量(2-1):现已知假币在 f 中,由第二次称量(2、3)中的讨论,假币应该是 7、8 中较轻的那一枚,
于是进行一次 7 与 8 的称量即可得到答案。称量完毕
第三次称量(2-2):由第二次称量(2、3)中的讨论,要么 {1, 2, 3, 4}中某一枚较重,要么 {5, 6, 7, 8} 中某一枚较轻。而由第二次称量(2、3)的结果,要么 {1, 2, 5} 中某一枚较重,要么 {3, 4, 6} 中某一枚较轻,于是取交集,假币应该在 {1, 2, 6} 中。
取 1 与 2 称重
若平衡则假币为 6
否则为 1与 2 中较重的一枚。称量完毕。
第三次称量(2-3):类似第三次称量(2-2)的讨论,取交集后假币范围为 {3, 4, 5}。
取 3 与 4 称重,
若平衡则假币为 5
否则为 3 与 4 中较轻的一枚。称量完毕。
第二次称量(3):类似第二次称量(2)的一系列讨论,不再赘述。
4
4. 给定4升和3升的水壶各一个。水壶上没有刻度。可以向水壶中加水。如何在4升的壶中准确的得到2升水?
法一
1.装满3升水壶
2.3升水全倒入4升水壶
3.再次装满3升水壶
4.将水倒入 4 升水壶直至水壶满(此时3升水壶内有两升水
5.倒空4升水壶
6.3升水壶的2升水倒入4升水壶
法二
1.装满4升水壶
2.4升水壶装满3升水壶
3.3升水壶倒空
4.4升水壶中剩余的1升水倒入3升水壶中
5.装满4升水壶
6.4升水壶倒入3升水壶到3升水壶满的情况,此时4升水壶剩余2升水
5
5.对于A* 算法,证明下面的结论:
a) 对于有限图,A* 算法一定会在有限步内终止;
对于有限图,解空间一定是有限集合,A*算法一定会在有限步内停止
b) 对于无限图,只要从初始节点到目标节点有路径存在,则A* 算法也必然会终止;
假设 A ∗ A^* A∗算法不中止,则 ∀ n ∈ O p e n , f ( n ) > f ∗ ( S ) \forall n \in Open, f(n)>f^*(S) ∀n∈Open,f(n)>f∗(S)
但由于初始节点到目标节点路径存在,必存在某点 n n n在Open表中,在此路径上 f ( n ) ≤ f ∗ ( S ) f(n)\le f^*(S) f(n)≤f∗(S)
存在矛盾
c) 若存在路径,则A* 算法一定会终止在最优路径上。
设 A ∗ A^* A∗ 算法找到的路径 s → t s → t s→t 不是最佳的,则有 f ( t ) = g ( t ) > f ∗ ( s ) f(t) = g(t) > f^∗(s) f(t)=g(t)>f∗(s),
而在结束前
∃
n
∈
O
p
e
n
,
f
(
n
)
≤
f
∗
(
s
)
<
g
(
t
)
∃n ∈ Open, f(n) ≤ f^∗(s) < g(t)
∃n∈Open,f(n)≤f∗(s)<g(t),所以
A
∗
A^*
A∗ 算法
应选择
n
n
n 结束,而非
t
t
t,与
A
∗
A^*
A∗ 算法找到的路径终点为
t
t
t 矛盾