本文为: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)(三)相关推荐

  1. 数据结构与算法(7-2)图的遍历(深度优先遍历DFS、广度优先遍历BFS)(分别用邻接矩阵和邻接表实现)

    目录 深度优先遍历(DFS)和广度优先遍历(BFS)原理 1.自己的原理图 2.官方原理图 一.邻接矩阵的深度优先遍历(DFS) 1.原理图 2. 过程: 3.总代码 二.邻接表的深度优先遍历(DFS ...

  2. 图的深度优先搜索(DFS)和广度优先搜索(BFS)算法

    深度优先(DFS) 深度优先遍历,从初始访问结点出发,我们知道初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接 ...

  3. 一文搞定深度优先搜索(DFS)与广度优先搜索(BFS)【含完整源码】

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  4. 【数据结构与算法】2.深度优先搜索DFS、广度优先搜索BFS

    原文链接:https://blog.csdn.net/qq_41681241/article/details/81432634 总结 一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的 ...

  5. 图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现

    遍历的定义: 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算. 一:深度优先遍历(DFS) 1,在访问图中某一起始顶点V后,由V ...

  6. 【蓝桥杯】2015决赛A组 5 穿越雷区(深度优先搜索dfs、广度优先搜索bfs)

    历届试题 穿越雷区 问题描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征), ...

  7. 数据结构-图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析

    https://www.cnblogs.com/qzhc/p/10291430.html 最后一个广度优先有错误,H不指向E,只有G指向E,所以顺序应该是ABCFDHGE

  8. 深度优先搜索(DFS)和广度优先搜索(BFS)探究

    附BFS解题代码: #include<iostream> #include<queue> using namespace std;char room[23][23]; int ...

  9. ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(一)

    本文为 ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)第一篇 深度优先算法(DFS)和广度优先算法(BFS):DFS 和 BFS 在 ES 中的应用(一) 深度优先算法(DF ...

最新文章

  1. centos7+ docker1.12 实践部署docker及配置direct_lvm
  2. visual studio c/c++报错:向“printf”传递了额外参数: _Param_(2) 未由格式字符串使用
  3. C语言实验 圆周率1193,【圆周率】小数点后10000位,4个4个分,你能找到那些配对?...
  4. java frame button_java – 从Button打开一个新的JFrame
  5. 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】
  6. Java JDBC连接SQL Server2005错误:通过port 1433 连接到主机 localhost 的 TCP/IP 连接失败...
  7. 【转】.net框架读书笔记---CLR内存管理\垃圾收集(六)
  8. Single Image Haze Removal(图像去雾)-CVPR’09 Best Paper
  9. C++基础知识(五)C++的一些特性
  10. matlab 2010 win10,win10系统运行matlab2010找不到指定的程序的教程介绍
  11. 分享 AI 圣经 PRML《模式识别与机器学习》百度云链接
  12. 最新版火狐浏览器无法下载 firebug 和 firepath 插件的问题
  13. 全面了解浏览器(内核)发展史
  14. Python计算均值、方差、标准差、协方差等常用指标的方法——Numpy模块+Pandas模块
  15. deepdive的股权关系抽取实践
  16. PY_GD_1 Python使用print()函数时输出不含多余空格的数据
  17. 共享储物柜app开发方案
  18. 二、解线性方程组的直接方法
  19. ajax异步请求案例
  20. 创建视图簇SE54并SE93赋予事务代码

热门文章

  1. Python 注释详解[学习 Python 必备基础知识][看此一篇就够了]
  2. OpenFOAM reconstructPar指定时刻或时间段
  3. 多台电脑之间共享、传输文件数据:不借助数据线与软件的方法
  4. 西门子S7-200PLC温度程序 最近看到同行发的各种帮做程序
  5. ヴィクト / 维克托
  6. 在局域网内实现图像的实时传输
  7. [轉]宽屏比例16:9与16:10
  8. 从零开始搭建分布式电商网站(2)--项目简介+工程搭建
  9. android auto 华为p30手机,【报Bug】为什么app在华为p30a上会频繁卡屏,卡住就不动了,只能强退软件,退出再进来,但不一会就又卡死了。但在其他手机上就不存在这个问题。...
  10. 阿里云(表格OCR)API调用流程