[ML]无信息搜索 Uninformed Search


特别说明:下文的 b 代表宽度,d代表深度,ε 表示每个行动的代价

一、广度优先搜索 Breadth-First Search

广度优先搜索,即是从最原始的节点开始,依次扩展起始节点的后继(跟当前节点挨着的下面的所有节点)。

1. 算法图解

A点为起始节点,也即当前节点:
在这里插入图片描述
按照广度优先策略,即扩展当前节点A的所有后继,那么接下来应扩展 B 节点:
在这里插入图片描述
此时,当前节点依然是A点,扩展完B点后,应继续扩展A的其他后继节点,即C点:
在这里插入图片描述
此时,当前节点A的所有后继均扩展,接下来当前节点变为B节点,继续按照扩展所有后继节点的策略扩展节点D:
在这里插入图片描述
同理,讲按顺序扩展 E,F,G节点,那么总的扩展顺序为:
A → \rightarrow B → \rightarrow C → \rightarrow D → \rightarrow E → \rightarrow F → \rightarrow G

2. 算法性能

广度优先搜索的性能表:

完成情况时间复杂度空间复杂度评价
可完成(如果横向节点数b有限)O(bd)O(bd)空间复杂度是个问题,可以轻易的达到10MB/s的节点产生速度

二、一致代价搜索 Uniform-Cost Search

该算法只扩展对于当前节点来说,代价(成本)最小的节点。

1. 算法图解

在这里插入图片描述
以上图为例,Sibiu为起点,Bucharest为终点。Sibiu的后继为Rimnicu和Fagaras,代价分别为80和99,那么算法选择扩展代价更小的Rimnicu,若是继续扩展Rimnicu的后继Ritesti,则Sibiu到Pitesti的总代价为 80 + 97 = 177。

此时,总代价只有99的Fagaras为最小代价节点,然后扩展Fagaras的后继Bucharest,该路线的总代价为 99 + 211 = 310. 虽然已经到达了终点Bucharest,但是算法还在继续。

此时,Sibiu到Pitesti的总代价最小,开始扩展Pitesti的后继Buchrest, 这个路径的总代价为 80 + 97 + 101 = 278 < 310

那么最终路线为: Sibiu → \rightarrow Rimnicu → \rightarrow Pitesti → \rightarrow Bucharest

总的扩展顺序为:Sibiu → \rightarrow Rimnicu → \rightarrow Fagaras → \rightarrow Petesti → \rightarrow Bucharest

2.算法性能

一致代价搜索的性能表:

完成情况时间复杂度空间复杂度评价
可完成(具有最优性)O(b[1+ C*/ε])O(b[1+ C*/ε])具有最优解

三、深度优先搜索

扩展最深的为扩展的节点

1. 算法图解

在这里插入图片描述
由于节点过多,就不一一贴图了。

从上图看,扩展顺序为 A → \rightarrow B → \rightarrow D → \rightarrow H → \rightarrow I → \rightarrow E → \rightarrow J → \rightarrow K → \rightarrow C → \rightarrow F → \rightarrow L → \rightarrow M → \rightarrow G → \rightarrow N → \rightarrow O

另外,遍历后不是结果的部分将被从内存删除,如下图的黑色部分:
在这里插入图片描述

2.算法性能

深度优先搜索的性能表:

完成情况时间复杂度空间复杂度评价
当没有最深节点时不能完成O(bm)O(bm)没有最优解,但删除无用节点会降低空间复杂度

注:m代表任一节点的最大深度。

四、深度受限搜索 Depth-limited search

深度优先搜索算法的缺点是,如果深度无限,该算法就废了,或者深度特别深,而目标相对来说没有那么深,那么该算法性能也不好。深度受限搜索在一定程度上解决了这个问题,即设定一个深度的限制,每次在限制深度内采用深度优先搜索。

1.算法图解

在这里插入图片描述

如上图,限制 limit = 2,在限制深度内采用深度优先搜索。

2.算法性能

深度受限搜索的性能表:

完成情况时间复杂度空间复杂度评价
当 l < d 时不能完成O(bl)O(bl)当 l > d 时没有最优解

注:l代表限制深度。

五、迭代深度搜索 Iterative Deepening Search

深度限制搜索的性能很大程度上依赖 限制深度 l,所以,为了解决 l 的不确定性,采用迭代深度搜索,每次递增 l,知道搜索到目标节点

1.算法图解

在这里插入图片描述
如上图,每次递增 l,知道找到目标。

2.算法性能

迭代深度搜索的性能表:

完成情况时间复杂度空间复杂度评价
可以找到目标节点O(bd)O(bd)可以找到最优解
3.小例题

d = 10, d = 5时,迭代深度搜索 IDS 和 广度搜索 BFS 生成节点数目:
N(IDS) = 50+400+3000+20000+100000 = 123450

这里,理解为 第一层10个节点重复生成了5次,第二层 10*10个节点被生成了4次,以此类推。

N(BFS) = 10+100+1000+10000+100000 = 111110

这里理解为 第一层生成10个节点,第二层 10*10,以此类推。

可以看出迭代深度算法的性能并不比广度优先搜索差太多。

六、双向搜索

如果同时从正向和反向搜索,最后两个方向的算法遍历的节点能遇见。

但反向搜索难以实现,甚至在一些问题中无法实现。

若能实现,则空间和时间复杂度均为 O(bd/2),能否找到解和最优解,就取决于选择的搜索策略。

七、无信息搜索算法性能总结

在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是土豆大叔啊!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值