基于搜索的路径规划算法:什么是深度优先算法?什么是广度优先算法?

目录

小手一挥,来个赞吧!!!

通俗理解基于搜索的路径规划算法

深度优先算法概念

DFS的实现通常有两种方式:递归和非递归(使用栈)。

适用场景:

空间效率:

完整性与最优性:

深度优先算法图文结合讲法:一条路走到黑

广度优先算法概念

算法实现方法

适用场景:

空间效率:

完整性:

最优性:

广度优先算法图文结合讲法:洪水蔓延


小手一挥,来个赞吧!!!

依旧希望对你有帮助。


通俗理解基于搜索的路径规划算法

        基于搜索的路径规划算法通常运用在基于栅格地图中,寻找路径的方式是通过一个一个节点的搜索。

        可以将其理解为洪水,由根节点向四周不断遍历,直到遍历到目标点。当然随着路径规划算法的不断发展,已实现“洪水”可以向着目标的大致方向流动,而不是简单粗暴的向着四周全方位流动,大大减轻了算力资源的浪费,提高了算法质量。下图便是目标(星型)向着目标(差型)搜索过程

根据搜索方法的不同,又将搜索类算法分为了深度优先算法和广度优先算法。


深度优先算法概念

        虽然文字一般不是很招人喜欢,但还是要贴出来的,以便于我们深入理解。

        深度优先搜索算法(Depth-First Search,简称DFS)是一种用于遍历或搜索树或图的算法。DFS的核心思想是沿着树或图的深度遍历节点,尽可能深地搜索分支,直到这个分支结束,然后回溯到上一个分叉点,继续探索下一个分支。这个过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。

DFS的实现通常有两种方式:递归和非递归(使用栈)。

递归实现:从根节点(或任意选择的起始节点)开始,递归地访问其子节点,直到达到叶节点或无子节点的节点,然后回溯到父节点,继续访问其他未访问过的子节点。

非递归实现:使用栈来模拟递归过程。将起始节点压入栈中,然后不断从栈顶弹出节点并访问,同时将其未访问过的子节点压入栈中。当栈为空时,遍历结束。
算法应用与特点

适用场景:

        DFS适用于节点子节点数量不多,且树的层次不会太深的情况。它特别适用于需要找到从起点到终点的所有路径、检测图中的环或连通性等问题。

空间效率:

        与广度优先搜索(BFS)相比,DFS在空间上通常更加高效,因为它不需要存储所有可能的节点组合。

完整性与最优性:

        DFS能够确保遍历到图中的所有节点(如果图是连通的),但它不一定能找到最优解(如最短路径),因为它是按照深度优先的原则进行搜索的。


深度优先算法图文结合讲法:一条路走到黑

        深度优先搜索算法是一种强大的搜索策略,简单来说就是一条路走到黑,发现不行,再反向搜索父节点跟换分支搜索。下图就可以很好地表示出来:

如图假设0为起点,6为终点,以下就是深度优先算法的步骤:

1.一条支路走到黑:0->1->3

2.发现走不通,反向找到父节点1,跟换到支路,搜索4

3.再次不行,进一步找到父节点0,跟换到支路,搜索2

4.同理便找到了目标6

因此最终路线是0->2->5->6,显而易见,这不是最优路径,所以深度优先算法存在不一定找到最优路径的问题。深度的深就在于此。


广度优先算法概念

        广度优先搜索算法(Breadth-First Search,简称BFS)是一种用于遍历或搜索树或图的算法。与深度优先搜索(DFS)不同,BFS按照“广度”进行搜索,即先访问离起始节点近的节点,再访问离起始节点远的节点。BFS的核心思想是从起始节点开始,逐层访问其相邻节点,直到访问到目标节点或遍历完整个图。在访问过程中,使用队列数据结构来保存待访问的节点,确保按照广度优先的顺序进行访问。

算法实现方法

BFS的实现主要依赖队列(Queue)数据结构。具体步骤如下:

         1.创建一个空队列,并将起始节点入队。
        2.标记起始节点为已访问。
        3.进入循环,直到队列为空:
        4.从队列头部取出一个节点,并访问该节点。
        5.检查该节点的所有相邻节点,如果相邻节点未被访问过,则将其标记为已访问,并入队。
        6.当队列为空时,遍历结束。
        3. 算法应用与特点

适用场景

BFS适用于需要找到从起始节点到目标节点的最短路径(步数最少)的场景,如迷宫求解、网络爬虫等。

空间效率:

BFS需要存储所有待访问的节点,因此在空间上可能不如DFS高效。但是,由于它按照广度优先的原则进行搜索,因此可以更快地找到目标节点(如果存在)。

完整性:

如果图是连通的,BFS能够确保遍历到图中的所有节点。

最优性:

在无权图中,BFS可以找到从起始节点到目标节点的最短路径(步数最少)。


广度优先算法图文结合讲法:洪水蔓延

        偷个懒,还是用这个图吧!嘿嘿嘿。

如图假设0为起点,6为终点,以下就是广度优先算法的步骤:

1.广度探索:0作为父节点同时相邻点1、2搜索

2.下一个循环:1、2作为父节点,再次扩展相邻的节点

3.扩张到目标点6

因此最终路线是0->2->6,基本为最优路径,所以广度优先算法可以搜索从起始节点到目标节点的最短路径(步数最少)。广度的深就在于此。


下一期让我们一起深入常用的搜索类算法之一:迪杰斯特拉算法。敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值