广度优先搜索与深度优先搜索
Posted AI科技结晶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广度优先搜索与深度优先搜索相关的知识,希望对你有一定的参考价值。
在了解了目标树之后,我们接下来学习搜索算法的概念。
搜索算法的应用还是很广的,这是属于算法的基础。在机器人的应用也有,比如机器人的路径规划问题。
而小编也是打算以路径规划为例子讲解搜索算法。
今天就先来学习入门级的搜索算法:广度优先搜索和深度优先搜索。
广度优先搜索和深度优先搜索都是属于盲目搜索算法,除此之外还有更加聪明的搜索算法,那就是启发式搜索算法。
所谓盲目搜索,就是不管怎么样,把所有的路径都搜索一遍,自然就能得到一条或是不止一条到达终点的路。而对于这种盲目搜索也有两种方式。
我们来看一张地图,接下来就针对这一张图进行路径规划。
题目:现在处于S点,要去G点。
有了题目之后,我们就尝试利用目标树来建立搜索路径。现在我们不管三七二十一,先把全部可能的路径都列出来:
接下来我们使用列表的方式来讲解两种盲目搜索算法。
深度优先搜索:
所谓深度优先搜索,就是先针对一条路径,先一直搜索到底,如果最终没有到达终点,那么就返回上一个节点继续向下搜索。
所以可以列表:
搜索次数 |
列表情况 | ||
1 |
S |
||
2 |
SA |
SB |
|
3 |
SAB |
SAD |
SB |
4 |
SABC |
SAD |
SB |
5 |
SABCE |
SAD | SB |
6 |
SADG | SB |
确认到达终点,搜索结束。
虽然最终搜索到了一条路径,而且看上去搜索量也不大,但深度优先搜索有一很明显的弊端,那就是搜索到的路径很有可能不是最优路径。
这就跟你打的士一样,你打到了黑车,司机带你绕远路,虽然最终是到达了目的地,但是你却要因为绕远路而付出更多的钱。
广度优先搜索:
所谓广度优先搜索,那就是一层一层往下搜索下去,直到搜索到路径为止,所以列表:
搜索次数 |
列表情况 |
|||
1 |
S |
|||
2 |
SA |
SB |
||
3 |
SAB |
SAD |
SBA |
SBC |
4 |
SABC |
SADG |
SBAD |
SBCE |
已经搜索到终点,搜索结束。
这个看上去貌似是最优解,但真的是这样吗?
虽说对于这道题目来说,这个搜索结果就是最优解,但若是拓展到其它地图呢?这种搜索算法是没有算上路程来搜索的,所以这个搜索结果,只能说是经过节点最少的一条路径,所以它依然可能不是最优解。
而且最最重要的就是,广度优先搜索搜索量非常庞大。或许在这种小地图看不到,但若是放到大地图呢?在路径复杂的情况下,节点众多的情况下,那个数据量就会非常庞大了。
所以两种盲目搜索都是笨办法,虽然简单,但是很有可能它们会带你绕远路。所以要用的时候,只能祈祷,地图刚好适用这两种搜索算法。
不过即使是这样,其实我们还可以对搜索树进行“剪枝”。
可以发现一个问题,列表里有重复搜索的路径。比方说在搜索到SAB的时候,在这个之前就已经有搜索了SB,两者对比,自然是两者之间线段最短。所以我们呢可以对列表进行优化,剪掉这些重复,这就是扩展列表。
扫一下这个二维码,点击关注,获取更多知识。
以上是关于广度优先搜索与深度优先搜索的主要内容,如果未能解决你的问题,请参考以下文章