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

相关文章
|
5天前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
33 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
14天前
|
算法 Java 数据库
理解CAS算法原理
CAS(Compare and Swap,比较并交换)是一种无锁算法,用于实现多线程环境下的原子操作。它通过比较内存中的值与预期值是否相同来决定是否进行更新。JDK 5引入了基于CAS的乐观锁机制,替代了传统的synchronized独占锁,提升了并发性能。然而,CAS存在ABA问题、循环时间长开销大和只能保证单个共享变量原子性等缺点。为解决这些问题,可以使用版本号机制、合并多个变量或引入pause指令优化CPU执行效率。CAS广泛应用于JDK的原子类中,如AtomicInteger.incrementAndGet(),利用底层Unsafe库实现高效的无锁自增操作。
理解CAS算法原理
|
2月前
|
算法 容器
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
|
1月前
|
存储 人工智能 缓存
【AI系统】布局转换原理与算法
数据布局转换技术通过优化内存中数据的排布,提升程序执行效率,特别是对于缓存性能的影响显著。本文介绍了数据在内存中的排布方式,包括内存对齐、大小端存储等概念,并详细探讨了张量数据在内存中的排布,如行优先与列优先排布,以及在深度学习中常见的NCHW与NHWC两种数据布局方式。这些布局方式的选择直接影响到程序的性能,尤其是在GPU和CPU上的表现。此外,还讨论了连续与非连续张量的概念及其对性能的影响。
56 3
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法与应用
探索人工智能中的强化学习:原理、算法与应用
|
2月前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
2月前
|
缓存 算法 网络协议
OSPF的路由计算算法:原理与应用
OSPF的路由计算算法:原理与应用
70 4
|
2月前
|
存储 算法 网络协议
OSPF的SPF算法介绍:原理、实现与应用
OSPF的SPF算法介绍:原理、实现与应用
95 3
|
2月前
|
机器学习/深度学习 人工智能 算法
探索人工智能中的强化学习:原理、算法及应用
探索人工智能中的强化学习:原理、算法及应用
|
2月前
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
69 0

热门文章

最新文章

下一篇
开通oss服务