当前位置:网站首页 > 数据科学与大数据 > 正文

广度优先搜索(广度优先搜索时需要用到的数据结构是)



在理解DFS算法之前,我们首先需要对什么是遍历进行了解,遍历的概念就是:从某一个点出发(一般是首或尾),依次将数据结构中的每一个数据访问且只访问一遍。

DFS(Depth-First-Search,深度优先搜索)算法的具体做法是:从某个点一直往深处走,走到不能往下走之后,就回退到上一步,直到找到解或把所有点走完。

在实现这一个依次的访问顺序时,操作动作存储与数据结构(栈)的思想及其相似,同时也由于栈的性质,我们可以通过递归来简化栈的创建,因此DFS算法的两种做法分别时利用栈或者递归实现。

算法步骤(递归或栈实现)

a)访问指定起始地点。

b)若当前访问顶点的邻接顶点有未被访问的顶点,就任选一个访问。如果没有就回退到最近访问的顶点,直到与起始顶点相通的所有点被遍历完。

c)若途中还有顶点未被访问,则再选一个点作为起始顶点,并重复前面的步骤。

我们直接以案例进行讲解,就本图而言,其访问顺序可以是(不唯一):1-2-4-5-3

首先从1开始,1结点处可以访问2,3两个结点,那么按照我们自定义的优先顺序线访问2结点,此时,2结点有4,5两个结点访问,依旧按次序访问呢4结点,4结点可以访问5结点,5结点无法继续向下访问故结束访问,并回退4结点,4结点无法没有其他分支且自己已被访问故又退回2结点,2结点的两个分支4,5结点均已被访问,故再退回1结点,此时只有3结点未被访问,访问3结点,最终得到次序:1-2-4-5-3

DFS算法的相关模板如下:

 

对于图论而言(代码节选,仅做参考,最主要还请记忆上面的模板那代码):

 

在最早期的搜索算法,如HTML的搜索,是基于并利用DFS的,现在诸如一些拓扑图,网络等准确且数据量不大的定位运算等依旧应用非常多的DFS算法,同时DFS算法也是算法竞赛入门级别的标准算法,公司的入职考试算法等。

BFS(Breadth First Search,广度优先搜索,又名宽度优先搜索),与深度优先算法在一个结点“死磕到底“的思维不同,广度优先算法关注的重点在于每一层的结点进行的下一层的访问。

BFS算法和核心思路就是:从某个点一直把其邻接点走完,然后任选一个邻接点把与之邻接的未被遍历的点走完,如此反复走完所有结点。类似于树的层序遍历。

BFS的核心就是要把当前在哪作为一个状态存储,并将这个状态交给队列进行入队操作,故而,

算法步骤(用队列实现)

a) 访问指定起始点。

b) 访问当前顶点的邻接顶点有未被访问的顶点,并将之放入队列中。

c) 删除队列的队首节点。访问当前队列的队首,前面的步骤。直到队列为空。

d) 若若途中还有顶点未被访问,则再选一个点作为起始顶点。重复前面的步骤。(针对非连通图)。

还是这一份例图,我们直接以案例进行讲解,就本图而言,其访问顺序可以是(不唯一):1-2-3-4-5

首先从1开始,1结点处可以访问2,3两个结点,我们访问并以此把两个结点的访问顺序放入队列,然后按照入队顺序(如2,3),之后我们出队状态2,依次访问2结点的下两个结点(4,5结点),并入队4,5结点,再之后我们出队3结点,并依次访问后续,此时发现所有的结点已经被访问完毕了,可以结束搜索,最后我们得到次序:1-2-3-4-5

BFS的模板代码如下:

 

同样提供一份BFS的图论算法节选,代码最核心还是取记忆BFS的模板并根据实际情况的灵活使用,故以下代码仅提供参考

 

BFS算法的实际应用场景,最典型的有地图搜索,迷宫寻路等,需要有“状态”以及状态改变场景的搜索算法,同时BFS由于不需要像DFS算法那样回溯,故比DFS效率可能会更高一些。基于BFS算法的该进算法,比如说R星寻路,DBFS(双向广搜)算法等这类改进算法场景被应用在实际游戏设计,GPS导航设计等场景中。

到此这篇广度优先搜索(广度优先搜索时需要用到的数据结构是)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 达梦客户端安装(如何安装达梦数据库)2025-02-26 18:09:06
  • 自动驾驶数据集回灌(自动驾驶数据库)2025-02-26 18:09:06
  • oppo手机数据导入小米手机(oppo数据怎么导入小米)2025-02-26 18:09:06
  • oracle数据库客户端安装教程(oracle数据库客户端安装教程)2025-02-26 18:09:06
  • 大数据技术是学什么的以后干什么(大数据技术是学什么的以后干什么的)2025-02-26 18:09:06
  • orecal默认端口(数据库oracle默认端口)2025-02-26 18:09:06
  • pointnet自己的数据集(pointnet++数据集)2025-02-26 18:09:06
  • 自动驾驶数据标注工作怎么样做(自动驾驶数据标注工作怎么样做的)2025-02-26 18:09:06
  • 大数据培训大数据(大数据培训都有哪些)2025-02-26 18:09:06
  • 自动驾驶数据标注员(自动驾驶数据标注员一个框多少钱)2025-02-26 18:09:06
  • 全屏图片