
深度优先遍历(DFS)和广度优先遍历(BFS)
深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。
发布日期:2021-05-07 08:52:19
浏览次数:10
分类:原创文章
本文共 1087 字,大约阅读时间需要 3 分钟。
深度优先遍历和广度优先遍历
深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。
1.深度优先遍历(DFS)
深度优先遍历顾名思义就是一条路走到黑,再寻其他未走过的路。其类似于树的先序遍历。
思想: 假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。显然,深度优先搜索是一个递归的过程。
方法:
- 在访问图中某一起始顶点v后,由v出发,访问它的任一邻接顶点w1
- 再从w1出发,访问与w1邻接但未被访问过的顶点w2
- 然后再从w2出发,进行类似的访问
- 如此进行下去,直至到达所有的邻接顶点都被访问过的顶点u为止
- 接着,退回一步,退到前一次刚访问过的顶点,看是否还有其他没有被访问过的顶点
- 如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问
- 如果没有,就再退回一步进行搜索。重复上述过程,直至连通图中所有顶点都被访问过。
例子:
深度优先遍历上图为:
1.初始状态,从顶点1开始
2.依次访问过顶点2,3后,终止于顶点3
3.从顶点3回溯到顶点2,继续访问顶点5,并且终止于顶点5
4.从顶点5回溯到顶点2,并且终止于顶点2
5.从顶点2回溯到顶点1,并终止于顶点1
6.从顶点4开始访问,并终止于顶点4
像这样先深入探索,走到头再回退寻找其他出路的遍历方式,就叫做深度优先遍历(DFS)。
其实,二叉树的前序、中序、后序遍历,本质上也可以认为是深度优先遍历
时间复杂度:
2.广度优先遍历(BFS)
BFS类似于树的层次遍历。
方法: 从图的某一顶点出发,首先依次访问该顶点的所有邻接顶点,再按照这些顶点被访问的先后顺序依次访问与它们相邻接的所有未被访问的顶点;重复此过程,直至所有顶点均被访问为止。
时间复杂度:
1.如果使用邻接矩阵存储,则BFS对于每一个被访问到的顶点,都要循环检测矩阵中的整整一行(n个元素),故时间复杂度为O( n 2 n^2 n2)
2.如果使用邻接表存储,虽然有2e个表结点,但只需扫描e个结点即可完成遍历,加上访问n个头结点的时间,时间复杂度为O(n+e)
3.DFS与BFS算法比较
- 空间复杂度相同,都是O(n)(借用了堆栈或队列)
- 时间复杂度只与存储结构有关,而与搜索路径无关。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月10日 19时26分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ifconfig网络配置信息解析
2019-03-04
(2019.9.10测试可用)如何在Windows的cmd中使用ls命令
2019-03-04
多因子策略中的IC、IR是什么,以及如何计算
2019-03-04
pd.resample('B')指重采样为工作日
2019-03-04
债券中的久期是什么意思
2019-03-04
MA、WMA、EMA、EXPMA区别及公式详述
2019-03-04
阿里云云解析DNS各种概念深度剖析
2019-03-04
(20200328已解决)从docker容器内复制文件到宿主机
2019-03-04
理解Docker ulimit参数
2019-03-04
Factor Exposure因子暴露
2019-03-04
将DataFrame作为邮件正文HTML发送 in Python
2019-03-04
理解Python系统下的时间格式
2019-03-04
《经济机器是怎样运行的》笔记(三)
2019-03-04
Python提升回测速度concurrnet.futures模块详解
2019-03-04
Python语言'类'概念再理解
2019-03-04
(2019.6.27)Anaconda清华镜像已恢复使用
2019-03-04
Robomongo使用教程:踩着前辈的路
2019-03-04
Python中Class类与def函数的区别
2019-03-04