ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(三)
本文为:ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第三篇
深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一)
深度优先算法(DFS)和广度优先算法(BFS):深度优先搜索算法(二)
深度优先算法(DFS)和广度优先算法(BFS):广度优先搜索算法(三)
文章目录
- 2、广度优先搜索(Breadth-First Search)
- 2.1 图的广度优先搜索
- 2.2 邻接表
- 2.3 邻接矩阵
- 2.4 图的广度优先搜索遍历过程
- 2.4.1 队列
- 2.4.2 Visited数组
- 2.4.3 遍历序列
- 2.4.4 遍历过程
- 2.5 动画演示
2、广度优先搜索(Breadth-First Search)
2.1 图的广度优先搜索
和树
不同,图没有根节点,并且是可以回溯的,比如下图所示,为一个 8 节点的图搜索表示
其中:
- 节点0 :包含三个出度,分别指向其三个邻接点,分别为
节点1、节点2、节点3
,同时节点0
也是节点2
的邻接点。 - 节点1:包含三个邻接点,分别为
节点2、节点4、节点5
- 节点2:邻接点为
节点0、节点1、节点6
。 - 节点3:邻接点为
节点6、节点7
。 - 节点4:邻接点为
节点1
。 - 节点5:邻接点为
节点1、节点2、节点4、节点6
。 - 节点6:邻接点为
节点3
。 - 节点7:邻接点为
节点6
2.2 邻接表
下图为 2.1 中图搜索所示图
的邻接表形式。可以看到,节点7、节点8、节点10
是没有任何出度和邻接点的。
2.3 邻接矩阵
下图为 2.1 中图搜索所示图
的邻接矩阵
表示
其中,纵坐标表示 出度节点,横坐标表示 邻接点
比如,下图中:
- 节点0:邻接点为
节点1、节点2、节点3
- 节点3:邻接点为
节点0、节点6
2.4 图的广度优先搜索遍历过程
2.4.1 队列
图的广度优先遍历是靠队列
来完成的,我们首先创建一个空队列
2.4.2 Visited数组
我们借助 Visited数组,来标识当前节点 n 是否被访问过,空值代表 false.
2.4.3 遍历序列
准备一个空的遍历序列,用来存放最终生成的访问元素。
2.4.4 遍历过程
首先,图是没有根节点的,我们可以以任何节点作为其起始节点,下面我就以节点0
为起始节点为例,演示一下图的广度优先搜索过程。
第1步
节点0
入队列
第2步
节点0
出队列,并且节点0
的所有邻接点入队列
第3步
节点1
出队列,节点1
的邻接点入队列,但是此时,节点1
的邻接节点节点2
已经被访问过了,因此节点5、节点4
进队列
第4步
节点2
出队列,节点2
有两个邻接节点,其中节点0
已经被访问,因此,节点6
如队列
第5步
节点3
出队列,节点3
有两个邻接节点,其中节点6
已经被访问,因此,节点7
入队列
第6步
节点5
出队列,节点5
有四个邻接节点均已被访问,此时无节点入队列。同理,节点6、节点7
出队列,最终生成的遍历序列如下图所示
2.5 动画演示
BFS
ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(三)相关推荐
- 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)
目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...
- 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法
深度优先(DFS) 深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接 ...
- 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
- 【数据结构与算法】2.深度优先搜索DFS、广度优先搜索BFS
原文链接:https://blog.csdn.net/qq_41681241/article/details/81432634 总结 一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的 ...
- 图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现
遍历的定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算. 一:深度优先遍历(DFS) 1,在访问图中某一起始顶点V后,由V ...
- 【蓝桥杯】2015决赛A组 5 穿越雷区(深度优先搜索dfs、广度优先搜索bfs)
历届试题 穿越雷区 问题描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征), ...
- 数据结构-图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
https://www.cnblogs.com/qzhc/p/10291430.html 最后一个广度优先有错误,H不指向E,只有G指向E,所以顺序应该是ABCFDHGE
- 深度优先搜索(DFS)和广度优先搜索(BFS)探究
附BFS解题代码: #include<iostream> #include<queue> using namespace std;char room[23][23]; int ...
- ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(一)
本文为 ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第一篇 深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一) 深度优先算法(DF ...
最新文章
- centos7+ docker1.12 实践部署docker及配置direct_lvm
- visual studio c/c++报错:向“printf”传递了额外参数: _Param_(2) 未由格式字符串使用
- C语言实验 圆周率1193,【圆周率】小数点后10000位,4个4个分,你能找到那些配对?...
- java frame button_java – 从Button打开一个新的JFrame
- 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】
- Java JDBC连接SQL Server2005错误:通过port 1433 连接到主机 localhost 的 TCP/IP 连接失败...
- 【转】.net框架读书笔记---CLR内存管理\垃圾收集(六)
- Single Image Haze Removal(图像去雾)-CVPR’09 Best Paper
- C++基础知识(五)C++的一些特性
- matlab 2010 win10,win10系统运行matlab2010找不到指定的程序的教程介绍
- 分享 AI 圣经 PRML《模式识别与机器学习》百度云链接
- 最新版火狐浏览器无法下载 firebug 和 firepath 插件的问题
- 全面了解浏览器(内核)发展史
- Python计算均值、方差、标准差、协方差等常用指标的方法——Numpy模块+Pandas模块
- deepdive的股权关系抽取实践
- PY_GD_1 Python使用print()函数时输出不含多余空格的数据
- 共享储物柜app开发方案
- 二、解线性方程组的直接方法
- ajax异步请求案例
- 创建视图簇SE54并SE93赋予事务代码
热门文章
- Python 注释详解[学习 Python 必备基础知识][看此一篇就够了]
- OpenFOAM reconstructPar指定时刻或时间段
- 多台电脑之间共享、传输文件数据:不借助数据线与软件的方法
- 西门子S7-200PLC温度程序 最近看到同行发的各种帮做程序
- ヴィクト / 维克托
- 在局域网内实现图像的实时传输
- [轉]宽屏比例16:9与16:10
- 从零开始搭建分布式电商网站(2)--项目简介+工程搭建
- android auto 华为p30手机,【报Bug】为什么app在华为p30a上会频繁卡屏,卡住就不动了,只能强退软件,退出再进来,但不一会就又卡死了。但在其他手机上就不存在这个问题。...
- 阿里云(表格OCR)API调用流程