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

简介: ES聚合算法原理深入解读:深度优先算法(DFS)和广度优先算法(BFS)(三)

2、广度优先搜索(Depth-First Search)

2.1 图的广度优先搜索

不同,图没有根节点,并且是可以回溯的,比如下图所示,为一个 8 节点的图搜索表示

6898774b3c5c40d4b2e5eb1f0ef0e939.png

其中:


节点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 是没有任何出度和邻接点的。

2f71ab443e324e9c9b48befd896a1a54.png


2.3 邻接矩阵

下图为 2.1 中图搜索所示邻接矩阵表示

其中,纵坐标表示 出度节点,横坐标表示 邻接点


比如,下图中:

  • 节点0:邻接点为节点1、节点2、节点3
  • 节点3:邻接点为节点0、节点6

327f2777f8de41889fbfc0b0a78613fe.png


2.4 图的广度优先搜索遍历过程

2.4.1 队列

图的广度优先遍历是靠队列来完成的,我们首先创建一个空队列

54817eeca8894f1886597ec822bcc46c.png


2.4.2 Visited数组

d746bfae5ed24e43a14b71f9b384f84c.png

我们借助 Visited数组,来标识当前节点 n 是否被访问过,空值代表 false.


2.4.3 遍历序列

准备一个空的遍历序列,用来存放最终生成的访问元素。

32b06aa8f80d4d5995c3268431a431b5.png


2.4.4 遍历过程

首先,图是没有根节点的,我们可以以任何节点作为其起始节点,下面我就以节点0为起始节点为例,演示一下图的广度优先搜索过程。


第1步

8a0e252254ed4997b7fb88e3e9cc82e2.png


第2步

节点0出队列,并且节点0的所有邻接点入队列

a5f4f96e98a4454c91c1139b2b4d2808.png


第3步

节点1出队列,节点1的邻接点入队列,但是此时,节点1的邻接节点节点2已经被访问过了,因此节点5、节点4进队列

9acb5ceca8be4d0d820e036506ecb7d7.png


第4步

11aeab2b1fe448b98261e41ebd04c02a.png


节点2出队列,节点2有两个邻接节点,其中节点0已经被访问,因此,节点6如队列

7cf37715834e488995fd18ff704306eb.png


第5步

节点3出队列,节点3有两个邻接节点,其中节点6已经被访问,因此,节点7入队列

868830bb3f944090a2715aac2b086688.png


第6步

f2f39be0ba3842d2a82a00cd5e700cfd.png


节点5出队列,节点5有四个邻接节点均已被访问,此时无节点入队列。同理,节点6、节点7出队列,最终生成的遍历序列如下图所示

c24b6fe08b7a4de48744a76ecb74cc5c.png

相关文章
|
1月前
|
算法
DFS算法的实现
DFS算法的实现
34 3
|
3月前
|
存储 机器学习/深度学习 算法
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
34 3
|
1月前
|
存储 算法
BFS算法的实现
BFS算法的实现
26 1
|
2月前
|
存储 传感器 算法
「AIGC算法」近邻算法原理详解
**K近邻(KNN)算法概述:** KNN是一种基于实例的分类算法,依赖于训练数据的相似性。算法选择最近的K个邻居来决定新样本的类别,K值、距离度量和特征归一化影响性能。适用于非线性数据,但计算复杂度高,适合小数据集。应用广泛,如推荐系统、医疗诊断和图像识别。通过scikit-learn库可实现分类,代码示例展示了数据生成、模型训练和决策边界的可视化。
28 0
「AIGC算法」近邻算法原理详解
|
3月前
|
数据采集 算法 Java
Java数据结构与算法:图算法之广度优先搜索(BFS)
Java数据结构与算法:图算法之广度优先搜索(BFS)
|
3月前
|
算法 Java
Java数据结构与算法:图算法之深度优先搜索(DFS)
Java数据结构与算法:图算法之深度优先搜索(DFS)
|
3月前
|
算法 索引
DFS算法及应用(二)
回溯:回溯就是DFS的一种,在搜索探索过程中寻找问题的解,当发现不满足求解条件时,就回溯返回,尝试其他路径。
|
14天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。