深度优先搜索(DFS)与广度优先搜索(BFS)算法详解
创作时间:
作者:
@小白创作中心
深度优先搜索(DFS)与广度优先搜索(BFS)算法详解
引用
1
来源
1.
https://www.cnblogs.com/mysticbinary/p/18112532
图的遍历是图论中的基本操作,主要有两种遍历方式:深度优先遍历(DFS)和广度优先遍历(BFS)。这两种遍历方式在处理图数据时各有特点和适用场景。
广度优先遍历(BFS)
广度优先遍历也叫层序遍历,从根节点开始,依次访问每一层的所有节点。具体来说,先遍历第一层(节点 1),再遍历第二层(节点 2,3,4),然后是第三层(5,6,7,8),依此类推,直到所有节点都被访问。
在实现广度优先遍历时,需要使用队列来存储下一层待访问的节点。每次从队列中取出一个节点进行访问,并将其未访问过的邻接节点加入队列,直到队列为空。
深度优先遍历(DFS)
深度优先遍历从根节点出发,一直向左子节点走,直到左子节点不存在然后返回到上一个节点走这个节点的右子节点,然后一直往右子节点走,同样的也是走不通为止就返回。这种一路走到黑,黑了就回头的方式,就是深度优先遍历的过程。
在实现深度优先遍历时,需要使用栈来存储当前路径上的节点。每次访问一个节点时,将其未访问过的邻接节点压入栈中,然后从栈顶取出一个节点继续访问,直到栈为空。
应用场景分析
选择深度或广度所对应的是不同场景,理论上来说,所有问题,都可以用list解决,但是为什么还要分化出那么多的数据结构?还不是因为——不同的问题,采用不同的数据结构,这样解决效率才高,资源才省。
比如看这个下面这个家族结构图:
- 如果想要找到曾祖母Ruby的所有儿女,那么用广度还是广度最合适。使用广度优先搜索,那么立刻就能找到她所有直接女儿(Andrea、Xander、CoCo和Maya),不用搜索和她相隔一代的亲人。
- 如果想要找到Ruby的一个叫Ruth的后代,用深度还是深度合适。用深度优先搜索,则可以马上移动到图的底部,在几步之内就能找到曾孙一辈。虽然还是需要遍历整幅图才能找到Ruth,但至少快速找到她是有可能的。而用广度优先搜索则别无选择,必须遍历前两辈的所有人,才能开始搜索曾孙这一辈。
在思考用深度还是广度时?应该是先思考究竟是想先尽可能在初始顶点附近搜索,还是想先尽可能远离它?
- 前者适合用广度优先搜索
- 后者适合用深度优先搜索。
热门推荐
用增强现实技术和 QR 码开启未来
绿萝养护全攻略:从特点到室内外摆放指南
《灼口综合征的中医探秘之旅》
南锣鼓巷著名景点,南锣鼓巷游览图
如何把钙补到位?药师教你科学使用钙补充剂
电动车开锁就响且无法骑行?多种原因及解决方案全解析
如何改善嫉妒心理?有效的应对方法与策略
如何助力兄弟团队成长
水仙花开败后不要丢,这样处理第二年还能再开花!
卧室家居布局设计的注意事项
防电墙真的可以防漏电吗?
防电墙真的可以防漏电吗?
数控机床中高精度直线导轨的精度保持与提升方法
绿化率怎么算?绿化率与绿地率的区别详解
循序渐进,掌握成功秘诀:分解目标,步步为营
馋了一整年的腌笃鲜!终于又可以“笃”起来了→
产品经理如何做市场分析?全面指南帮你掌握关键技巧
偏将军的兵力规模探究
中药怎样熬煮服用效果更佳
孕妇为什么不能吃山楂
山楂酸甜诱人,孕妇吃还是不吃?答案在这里!
瀚海阑干百丈冰——冰封世界的壮丽画卷
长江禁渔期间非法垂钓被判刑,敲响法治警钟
半月板损伤的保守治疗方法有什么
最受欢迎十大凉菜排行榜,你最爱的是哪一种?倒数第二不容易吃到
《暗喻幻想》:融合即时与回合制战斗,呈现电影般的漫画战斗体验
公安系统薪资在不同地区有何差异?
A醇功效是什么?可以每天擦吗?一篇了解A醇使用方法与护肤秘密
维生素C:击退暗沉,抗氧化小能手!
“血糖新标准”来袭!不同年龄,标准不同,不妨对照自查看看!