机器智能-高频问题-无信息搜索算法

首先,解释一下名词,什么是“树搜索算法”?

树搜索算法并不是特指一个算法,而是指一类基于树结构的搜索算法(如深度优先和广度优先等)

当然,还有一个名词,什么是“图搜索算法”?

图搜索不会重复搜索节点,树搜索允许重复搜索节点。图搜索是特殊的树搜索。

还有一个名词,什么是“无信息搜索策略”?

除了问题定义中提供的状态信息外没有任何附加信息,算法只能区分状态是不是目标状态,而无法比较非目标状态的好坏(即不知道是否靠近目标状态)
简单地讲,就是说,我不知道目标在哪里,我只知道我现在有没有到目标。

下面是几个比较经典的无信息搜索策略

宽度优先搜索

算法理念是一个先进先出的队列,先扩展根结点,再扩展根结点的所有后继,然后再扩展它们的后继。然后在每一个节点入队的时候判定当前节点是否是目标节点(之所以在入队的时候是为了减少节点数从而节省时间)。
实际上,和广度优先搜索一样,都是一层一层向下找。
由于能够找完所有的节点,所以结果必定是最优的

一致代价搜索

算法理念是扩展未扩展节点中代价最小的,这个代价是真实值。队列按照代价从小到大排列;代价小的先出队,代价大的后出队。出队时做目标检测;因为入队时不能保证是最优的,但出队时可以。
这里的代价和上文是不冲突的,他记录的是我目前已经走了多远了。实际上就是一个广度优先搜索和贪心算法的结合体,在一层一层向下找的时候,决定了节点的顺序,比方说有多个子节点的时候,哪一个子节点先入队。
这里解释一下为什么要出队的时候才进行目标检测,而入队的时候不行。因为入队的时候并没有进行排列,也就是说,这个时候我或许到达了目标,但是我的队列里面还隐藏着另一条路径,可以比我当前的路径更短
换句话说,我们可能像大禹一样,路过目标好几次,但只有走完了所有的路(极限情况)之后,才知道那条路是最近的。

深度优先搜索

首先扩展最深的为扩展节点,用LIFO队列来存储节点。
说白了,就是DFS,同名的深度优先搜索,当然结果不一定是最优的(深度有限的时候是最优的),这个的空间复杂度很小。
简单地讲,就是一条路走到黑,一直左拐一直左拐的感觉

深度受限搜索

前文说到,深度优先搜索在深度有限的时候是最优的,所以这里就有了深度受限搜索,实际上就是设定一个最大深度dmax,当搜索深度大于dmax的时候立即回溯,从而避免了在无穷状态空间中陷入深度无限的分支。
即一开始有一个深度限制,每深入一层减一,减到0为止

迭代加深的深度优先搜索

这个名字是不是特别长?实际上很简单,就是一个不断加深深度的深度优先搜索
不断加深深度,每一次都从根节点开始调用深度优先探索。

发布了275 篇原创文章 · 获赞 160 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/104740811