当前位置: 首页 > news >正文

图论之并查集——含例题

目录

介绍

秩是什么

例子——快速入门

例题

使用路径压缩,不使用秩合并

使用路径压缩和秩合并

无向图和有向图


介绍

并查集是一种用于 处理不相交集合的合并与查询问题的数据结构。它主要涉及以下基本概念和操作:
基本概念:
  • 集合:并查集中的集合是由一组元素组成的,这些元素具有相同的属性或特征,集合之间相互不相交。
  • 代表元素:每个集合都有一个代表元素,用于标识该集合。集合中的其他元素都可以通过一定的关系与代表元素相连。
基本操作:
  • 初始化:将每个元素都初始化为一个独立的集合,每个集合的代表元素就是该元素本身。
  • 合并:将两个不同集合合并为一个集合。通常是将一个集合的代表元素连接到另一个集合的代表元素上,使得两个集合成为一个更大的集合。
  • 查找:查找某个元素所在集合的代表元素。通过不断地沿着元素的父指针追溯,最终找到代表元素,从而确定该元素属于哪个集合。
并查集通常使用数组来实现,数组的下标表示元素,数组中存储的是该元素的父元素或代表元素的下标。在一些复杂的应用场景中,为了提高并查集的操作效率,还会采用路径压缩和按秩合并等优化策略。
并查集在 图论、数据分类、连通性问题等领域有广泛的应用。例如,在处理图的连通分量问题时,可以使用并查集来快速判断两个顶点是否属于同一个连通分量,以及合并不同的连通分量。

秩是什么

定义:秩可以看作是树的高度的一个估计值。在并查集的初始化阶段,每个元素都自成一个集合,此时集合的秩通常被初始化为 1,表示单个元素构成的树高度为 1。
作用: 在合并两个集合时,通过比较两个集合的秩来决定如何合并,以尽量保持树的平衡性,避免出现退化的树结构(即高度过高的树,会导致查找操作的时间复杂度增加)。
按秩合并策略:
  • 当合并两个集合时,比较它们的秩。如果两个集合的秩不同,将秩较小的集合合并到秩较大的集合中。这样做的原因是,将较小的树连接到较大的树上,对整体树的高度影响较小,有助于保持树的平衡性。例如,一个秩为 2 的树和一个秩为 3 的树合并,会将秩为 2 的树连接到秩为 3 的树下面,合并后新树的秩不变,仍为 3。
  • 如果两个集合的秩相同,那么可以任选一个集合作为合并的目标集合,并将另一个集合合并到该集合中。在这种情况下,合并后新集合的秩会增加 1。例如,两个秩都为 2 的树合并,合并后新树的秩变为 3。
通过使用秩和按秩合并策略,可以有效地降低并查集操作的时间复杂度,使得在大多数情况下,查找和合并操作都能在接近常数时间内完成。

例子——快速入门

假设有一群人,他们之间存在着不同的朋友关系。我们把每个人看作一个节点,朋友关系看作是连接节点的边,现在需要判断两个人是否在同一个朋友圈中,以及统计朋友圈的数量。
  • 初始化:假设有 5 个人,分别用编号 0 - 4 表示。一开始,每个人都属于自己独立的朋友圈,即每个节点的父节点都是它自己。可以用一个数组parent来表示,parent[i]表示节点i的父节点,初始化为parent = [0, 1, 2, 3, 4]。
  • 合并朋友圈:
    • 已知 0 和 1 是朋友,通过union操作合并他们所在的集合。找到 0 和 1 的根节点,即 0 和 1 本身,将 1 的父节点设置为 0,此时parent = [0, 0, 2, 3, 4],表示 0 和 1 在同一个朋友圈中。
    • 接着,2 和 3 是朋友,进行同样的合并操作,将 3 的父节点设置为 2,parent = [0, 0, 2, 2, 4]。
    • 然后,1 和 3 是朋友,再次合并。先找到 1 的根节点是 0,3 的根节点是 2,将 2 的父节点设置为 0,parent = [0, 0, 0, 0, 4],此时 0、1、2、3 都在同一个朋友圈中。
  • 查找:
    • 要判断 4 和 3 是否在同一个朋友圈,通过find操作查找 4 的根节点是 4,3 的根节点是 0,根节点不同,所以 4 和 3 不在同一个朋友圈。
    • 要判断 0 和 2 是否在同一个朋友圈,查找 0 和 2 的根节点都是 0,根节点相同,所以 0 和 2 在同一个朋友圈。
  • 统计朋友圈数量:最后,通过遍历parent数组,统计根节点的数量,即不同的代表元素的数量,就可以得到朋友圈的数量。在这个例子中,有两个不同的根节点 0 和 4,所以朋友圈数量为 2。
package mainimport "fmt"// UnionFind 定义并查集结构体
type UnionFind struct {parent []int // parent 切片用于存储每个元素的父节点,初始时每个元素的父节点是其自身// 在合并两个集合时,通过比较两个集合的秩来决定如何合并,以尽量保持树的平衡性,避免出现退化的树结构(即高度过高的树,会导致查找操作的时间复杂度增加)。rank  []int // rank 切片用于记录每个集合的秩(通常是树的高度)count int   // 朋友圈的数量
}// NewUnionFind 初始化并查集
func NewUnionFind(n int) *UnionFind {parent := make([]int, n)rank := make([]int, n)for i := range parent {parent[i] = irank[i] = 1}return &UnionFind{parent: parent,rank:   rank,count:  n,}
}// Find 查找元素所在集合的代表元素
func (uf *UnionFind) Find(x int) int {// 如果元素x的父节点(parent[x])不是它自己,就递归的查找它(parent[x]元素)的父节点if uf.parent[x] != x {uf.parent[x] = uf.Find(uf.parent[x])}return uf.parent[x]
}// Union 合并两个元素所在的集合
func (uf *UnionFind) Union(x, y int) {rootX := uf.Find(x)rootY := uf.Find(y)if rootX == rootY {return}if uf.rank[rootX] < uf.rank[rootY] {rootX, rootY = rootY, rootX}uf.parent[rootY] = rootX         // 更改 rootY 的父节点为 rootXuf.rank[rootX] += uf.rank[rootY] // 更改 rootX 的秩uf.count--                       // 朋友圈数量--
}// GetCount 获取连通分量的数量
func (uf *UnionFind) GetCount() int {return uf.count
}func main() {// 假设有 5 个人n := 5uf := NewUnionFind(n)// 合并操作,模拟朋友关系uf.Union(0, 1)uf.Union(2, 3)uf.Union(1, 3)// 判断 4 和 3 是否在同一个朋友圈sameCircle1 := uf.Find(4) == uf.Find(3)fmt.Printf("4 和 3 是否在同一个朋友圈: %v\n", sameCircle1)// 判断 0 和 2 是否在同一个朋友圈sameCircle2 := uf.Find(0) == uf.Find(2)fmt.Printf("0 和 2 是否在同一个朋友圈: %v\n", sameCircle2)// 统计朋友圈的数量circleCount := uf.GetCount()fmt.Printf("朋友圈的数量: %d\n", circleCount)// 4 和 3 是否在同一个朋友圈: false// 0 和 2 是否在同一个朋友圈: true// 朋友圈的数量: 2
}

例题

在并查集的实现中,rank 数组(或类似用于记录秩的机制)并不是必需的,有些题目里的并查集没有使用 rank 数组主要有以下原因:

简化实现:对于一些简单的问题场景,不需要通过按秩合并来优化并查集的性能,仅使用路径压缩就可以满足时间复杂度要求。此时可以省略 rank 数组,代码实现会更简洁。比如在一些数据规模较小或者对时间复杂度要求不高的问题中,单纯的路径压缩就能让并查集的操作效率足够高。

采用其他优化方式:有些并查集的实现可能不使用 rank 数组来记录秩,而是采用其他方式来优化合并操作。例如,记录每个集合的大小,在合并时将较小的集合合并到较大的集合中,这种方法也能在一定程度上避免树结构的退化,提高查找和合并的效率。

使用路径压缩,不使用秩合并

// 使用路径压缩,不使用秩合并package maintype UnionFind struct {parent []int
}func NewUnionFind(n int) *UnionFind {parent := make([]int, n)for i := range parent {parent[i] = i}return &UnionFind{parent: parent,}
}// Find 查找
func (uf *UnionFind) Find(x int) int {if uf.parent[x] != x {uf.parent[x] = uf.Find(uf.parent[x])}return uf.parent[x]
}// Union 合并
func (uf *UnionFind) Union(x, y int) {rootX := uf.Find(x)rootY := uf.Find(y)uf.parent[rootY] = rootX
}// IsConnected 判断两个元素是否在同一个集合中
func (uf *UnionFind) IsConnected(x, y int) bool {return uf.Find(x) == uf.Find(y)
}

相应的例题:

力扣:547. 省份数量(并查集,也可以用dfs、bfs)

力扣:684. 冗余连接(并查集)

使用路径压缩和秩合并

// 使用路径压缩和秩合并(优化并查集的性能)package main// UnionFind 定义并查集结构体
type UnionFind struct {parent []intrank   []int
}// NewUnionFind 初始化并查集
func NewUnionFind(n int) *UnionFind {parent := make([]int, n)rank := make([]int, n)for i := range parent {parent[i] = irank[i] = 1}return &UnionFind{parent: parent,rank:   rank,}
}// Find 查找元素所在集合的代表元素,使用路径压缩
func (uf *UnionFind) Find(x int) int {if uf.parent[x] != x {uf.parent[x] = uf.Find(uf.parent[x])}return uf.parent[x]
}// Union 合并两个元素所在的集合,使用按秩合并
func (uf *UnionFind) Union(x, y int) {rootX := uf.Find(x)rootY := uf.Find(y)if rootX == rootY {return}if uf.rank[rootX] < uf.rank[rootY] {rootX, rootY = rootY, rootX}uf.parent[rootY] = rootXuf.rank[rootX] += uf.rank[rootY]
}// IsConnected 判断两个元素是否在同一个集合中
func (uf *UnionFind) IsConnected(x, y int) bool {return uf.Find(x) == uf.Find(y)
}

相应的例题:

力扣:1584. 连接所有点的最小费用(Kruskal算法、最小生成树、并查集)

无向图和有向图

并查集在无向图中的应用更为直接和常见。(当然,在一些有向图的问题中也能通过适当的转化和处理来发挥作用)

相应的例题:

力扣:2101. 引爆最多的炸弹(有向图)

问:这道题为什么不能用并查集?

答:注意本题是有向图。例如炸弹 0 可以引爆炸弹 2,炸弹 1 可以引爆炸弹 2,对应有向边 0→2,1→2,那么正确答案是 2。如果用并查集做的话,会把 0,1,2 三个点合并起来,计算出错误的答案 3。

相关文章:

图论之并查集——含例题

目录 介绍 秩是什么 例子——快速入门 例题 使用路径压缩&#xff0c;不使用秩合并 使用路径压缩和秩合并 无向图和有向图 介绍 并查集是一种用于 处理不相交集合的合并与查询问题的数据结构。它主要涉及以下基本概念和操作&#xff1a; 基本概念&#xff1a; 集合&…...

解释型语言和编译型语言的区别

Python 的执行过程通常涉及字节码&#xff0c;而不是直接将代码编译为机器码。以下是详细的解释&#xff1a; ### **Python 的执行过程** 1. **源代码到字节码**&#xff1a; - Python 源代码&#xff08;.py 文件&#xff09;首先被编译为字节码&#xff08;.pyc 文件&…...

零基础上手Python数据分析 (14):DataFrame 数据分组与聚合 - 玩转数据透视,从明细到洞察

写在前面 —— 像搭积木一样分析数据,掌握Pandas GroupBy,轻松实现分组统计与聚合 回顾一下,上篇博客我们学习了如何使用 Pandas 合并与连接多个 DataFrame,将分散的数据整合到一起。 现在,我们拥有了更完整、更丰富的数据视图。 接下来,一个非常常见的分析需求就是 对…...

Honor of Kings (S39) 13-win streak

Honor of Kings (S39) 13-win streak S39赛季13连胜&#xff0c;庄周&#xff0c;廉颇硬辅助&#xff0c;对面有回血就先出红莲斗盆&#xff0c;有遇到马克没带净化的&#xff0c;出【冰霜冲击】破他大招 S39&#xff0c;庄周廉颇前排硬辅助全肉全堆血13连胜_哔哩哔哩bilibi…...

输出流-----超级详细的在程序中向文件.txt中写入内容

1.使用Fileoutputstream对象&#xff0c;如果在目录中已经存在该文件&#xff0c;那么将不会在创建&#xff0c;如果该目录中没有该文件&#xff0c;那么将会自动创建文件。 2.在目录中a.txt文件中写入一个h字符&#xff0c;这种方式是写入单个字符。 //在目录中a.txt文件中写入…...

【Mysql】死锁问题详解

【Mysql】死锁问题详解 【一】Mysql中锁分类和加锁情况【1】按锁的粒度分类&#xff08;1&#xff09;全局锁&#xff08;2&#xff09;表级锁1、表共享读锁&#xff08;Table Read Lock&#xff09;2、表独占写锁&#xff08;Table Write Lock&#xff09;3、元数据锁&#xf…...

C语言实现用户管理系统

以下是一个简单的C语言用户管理系统示例&#xff0c;它实现了用户信息的添加、删除、修改和查询功能。代码中包含了详细的注释和解释&#xff0c;帮助你理解每个部分的作用。 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_USERS…...

SAP BDC:企业数据管理的新纪元

2025年4月&#xff0c;SAP在纽约发布了其全新企业数据平台——Business Data Cloud&#xff08;BDC&#xff09;&#xff0c;标志着企业数据管理和AI集成战略的重大升级。BDC不仅整合了SAP内部和外部的结构化与非结构化数据&#xff0c;还借助与Databricks的合作&#xff0c;推…...

数学建模学习资料免费分享:历年赛题与优秀论文、算法课程、数学软件等

本文介绍并分享自己当初准备数学建模比赛时&#xff0c;收集的所有资料&#xff0c;包括历年赛题与论文、排版模板、算法讲解课程与书籍、评分标准、数学建模软件等各类资料。 最近&#xff0c;准备将自己在学习过程中&#xff0c;到处收集到的各类资料都整理一下&#xff0c;并…...

计算机的运算方式

1. 计算机运算的基本概念 计算机的运算由 算术逻辑单元&#xff08;ALU&#xff09; 执行&#xff0c;其核心功能是完成 算术运算 和 逻辑运算。所有运算均基于二进制编码&#xff0c;通过硬件电路实现高速计算。 运算对象&#xff1a;二进制数&#xff08;定点数、浮点数&am…...

Tkinter事件与绑定

在Tkinter中,事件和事件绑定是实现用户交互的核心机制。通过事件机制,您可以捕捉用户的操作(例如鼠标点击、键盘输入等)并执行相应的回调函数。事件绑定是将事件与处理该事件的函数(或方法)关联起来。掌握事件和绑定技术是开发交互式应用程序的关键。 5.1 事件概述 事件…...

CAD 像素点显示图片——CAD二次开发 OpenCV实现

效果如下&#xff1a; 部分代码如下&#xff1a; public class Opencv1{[CommandMethod("xx1")]public void Opencv(){Document doc Application.DocumentManager.MdiActiveDocument;Database db doc.Database;Editor ed doc.Editor;// 设置采样精度&#xff0c;这…...

即梦+剪映:三国演义变中国好声音制作详解!

最近在刷抖音时&#xff0c;发现这种电影人物唱歌视频比较火热&#xff0c;今天手把手教大家如何制作这种让电影人物唱歌的视频&#xff01; 一、素材准备 1、准备好视频或人物图片素材 这里需要准备一张人物截图或者电影视频片段&#xff0c;大家可以去各大视频网站找原始素…...

04-线程

一、线程的概念 1、进程是系统分配资源的最少单位,操作系统会为每一个进程分配一块虚拟内存空间&#xff01; 线程是系统调度最少的单位,操作系统分配时间片的过程&#xff0c;就是系统调度&#xff01; 线程也会占用时间片&#xff01; 2、线程的内存资源 线程的内存资源是…...

7.渐入佳境 -- 优雅的断开套接字连接

前言 本章将讨论如何优雅地断开相互连接的套接字。之前用的方法不够优雅是因为&#xff0c;我们是调用close或closesocket函数单方面断开连接的。 一、基于TCP的半关闭 TCP中的断开连接过程比建立连接过程更重要&#xff0c;因为连接过程中一般不会出现大的变数&#xff0c;…...

Django3 - 开启Django Hello World

一、开启Django Hello World 要学习Django首先需要了解Django的操作指令&#xff0c;了解了每个指令的作用&#xff0c;才能在MyDjango项目里编写Hello World网页&#xff0c;然后通过该网页我们可以简单了解Django的开发过程。 1.1 Django的操作指令 无论是创建项目还是创建项…...

JavaScript 基础特性

一、变量特性 1.1 变量提升 console.log(temp); // undefined&#xff08;变量提升但未初始化&#xff09; var temp hello; 现象&#xff1a;var声明的变量会提升至作用域顶部&#xff0c;但赋值不提升 建议&#xff1a;改用 let/const 避免变量提升问题 1.2 变量泄露 fo…...

MATLAB遇到内部问题,需要关闭,Crash Decoding : Disabled - No sandbox or build area path

1.故障界面 MATLAB运行时突然中断&#xff0c;停止运行。故障界面如图&#xff1a; MATLAB Log File: C:\Users\wei\AppData\Local\Temp\matlab_crash_dump.21720-1 ------------------------------------------------ MATLAB Log File -----------------------------------…...

L1-5 吉老师的回归

题目 L1-078 吉老师的回归&#xff08;15分&#xff09; 曾经在天梯赛大杀四方的吉老师决定回归天梯赛赛场啦&#xff01; 为了简化题目&#xff0c;我们不妨假设天梯赛的每道题目可以用一个不超过 500 的、只包括可打印符号的字符串描述出来&#xff0c;如&#xff1a;Probl…...

0413-多态、Object类方法、访问权限修饰符、装箱拆箱、128陷阱

1:A and A 2:A and A 3: A and D 4: B and A 5: B and A 6:A and D 7:B and A 8: B and A 9:A and D package 第四章对象和类;public class ForthThir {//多态&#xff1a;父类的引用指向子类的对象,只能调父类的方法和子类重写的方法&#xff0c;不能调子类独有的方法&…...

Kubernetes控制平面组件:APIServer 准入控制机制详解

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

苍穹外卖day02

菜品相关接口开发 图片上传-阿里云OSS 依赖注入 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun.sdk.oss}</version> </dependency> ​ 配置密钥 sky:alioss:end…...

SpringBoot 自定义输出控制台图标

对于控制台输出的这个图标大家都不陌生吧&#xff0c;不仅在SpringBoot中有这种图标&#xff0c;在docker 、 nginx 启动时都有自身独特的图标&#xff0c;这是怎么实现的呢。 需要利用一个网站生成 banner 图标&#xff08;首页-bootschool.net&#xff09;&#xff0c; 将图标…...

联想电脑开机出现Defalut Boot Device Missing or Boot Failed怎么办

目录 一、恢复bios默认设置 二、关机重启 三、“物理”方法 在图书馆敲代码时&#xff0c;去吃了午饭回来发现刚开机就出现了下图的问题&#xff08;崩溃&#xff09;&#xff0c;想起之前也发生过一次 这样的问题&#xff0c;现在把我用到的方法写在下面&#xff0c;可能对…...

CST1020.基于Spring Boot+Vue汽车租赁管理系统

计算机/JAVA毕业设计 【CST1020.基于Spring BootVue汽车租赁管理系统】 【项目介绍】 汽车租赁管理系统&#xff0c;基于 Spring Boot Vue 实现&#xff0c;功能丰富、界面精美 【业务模块】 客户管理&#xff1a;查询客户信息、根据条件精准检索、添加客户信息、身份证号校验…...

ArkTS基础语法:从声明到类型的深度解析

# ArkTS基础语法&#xff1a;从声明到类型的深度解析 在鸿蒙应用开发的领域中&#xff0c;ArkTS作为重要的编程语言&#xff0c;其基础语法是开发者们必须掌握的关键内容。今天&#xff0c;我们就围绕ArkTS的声明和类型相关知识展开深入探讨&#xff0c;帮助大家更好地理解和运…...

Day15:关于MySQL的编程技术——基础知识

前言&#xff1a;先创建一个练习的数据库和数据 1.创建数据库并创建数据表的基本结构 -- 创建练习数据库 CREATE DATABASE db_programming; USE db_programming;-- 创建员工表&#xff08;包含各种数据类型&#xff09; CREATE TABLE employees (emp_id INT PRIMARY KEY AUTO…...

wsl下编译eXosip和osip库(Ubuntu 22.04)

1.下载eXosip和osip osip下载路径 Index of /mirror/gnu.org/savannah/osip eXosip下载路径 Index of /nongnu/exosip 我选的osip和eXosip版本为 5.2.0 2.编译osip库 tar -zxvf libosip2-5.2.0.tar.gz cd libosip2-5.2.0 ./configure make make install 在编译…...

《轨道力学导论》——第九章:轨道确定与导航

第九章 轨道确定与导航 引言 轨道确定与导航是轨道力学中最为核心的实践领域之一&#xff0c;它将理论与实际应用紧密结合&#xff0c;解决了"我们在哪里"以及"我们将去向何方"这两个航天活动中最基本的问题。无论是地球轨道上的人造卫星、飞向深空的探测…...

几何与游标

在arcgis中,数据组织方式如下 数据库(datasets): 要素类(feature class): 几何(geometry) 属性(attribute) 元数据(metadata) 游标: 查询游标:用于对数据进行查询的游标 arcpy.da.SearchCursor() 作用&#xff1a;用于对数据进行只读查询操作。它可以帮助你逐行读取数据表或…...

【使用jenkins+docker自动化部署java项目】

背景: 有A(打包机129)&#xff0c;B(游戏服130) 2个机器&#xff0c;他们都安装有docker&#xff0c;请完成部署。 一、准备好java项目&#xff0c;写好Dockerfile # 基础镜像&#xff0c;使用包含 JDK 17 的 OpenJDK 镜像 FROM openjdk:17-jdk-slim# 设置工作目录 WORKDIR /…...

Vue3+Element Plus如何实现左树右表页面案例:即根据左边的树筛选右侧表功能实现

文章目录 一、最终效果二、源代码2.1 AddDataSource.vue2.2 LeftTree.vue2.3 FieldDrawer.vue2.4 RightTable.vue2.5 Emp.vue 三、代码解读3.1 AddDataSource.vue —— 数据源新增对话框3.2 LeftTree.vue —— 数据源树视图3.3 FieldDrawer.vue —— 字段详情抽屉3.4 RightTabl…...

Redisson的红锁,分段锁,公平锁,联锁。。。。。。

红锁&#xff1a;Redisson红锁可以防止主从集群锁丢失问题。Redisson红锁要求&#xff0c;必须要构建至少三个Redis主从集群&#xff0c;若一个请求要申请锁&#xff0c;必须向所有主从集群中提交key写入请求&#xff0c;只有当大多数集群&#xff08;过半集群&#xff09;锁写…...

system V 共享内存

system V是一种标准&#xff0c;linux内核支持这种标准&#xff0c;专门设计了一个ipc模板(通信的接口设计&#xff0c;原理&#xff0c;接口&#xff0c;相似性) 使用各自的虚拟地址访问物理内存 共享内存描述共享内存的内核数据结构它所对应的物理空间 进程间通信的本质&…...

ResNet改进(27):融合EfficientViT 高效混合网络设计

在计算机视觉领域,卷积神经网络(CNN)和视觉Transformer(ViT)各有优势。 今天分享的是一种将两者巧妙结合的方案——在ResNet18基础上引入轻量化ViT模块的设计思路。 整体架构概览 这个混合网络主要由三部分组成: ResNet18骨干网络:作为特征提取器,去掉了原模型的平均池化…...

字符串与栈和队列-算法小结

字符串 双指针 反转字符串(双指针) 力扣题目链接 void reverseString(vector<char>& s) {for (int i 0, j s.size() - 1; i < s.size()/2; i, j--) {swap(s[i],s[j]);} }反转字符串II 力扣题目链接 遍历字符串的过程中&#xff0c;只要让 i (2 * k)&#…...

go语言学习笔记:gin + gorm + mysql 用户增删改查案例入门

大家好&#xff0c;我是此林。 Golang 语言现在已经成为了编程的趋势&#xff0c;毕竟是大厂背书嘛&#xff0c;Google 研发的。 目前很多云原生项目都是基于 go 来编写的&#xff0c;比如&#xff1a; Kubernetes (K8s)​ 容器编排系统&#xff0c; Docker​ 容器化技术&…...

设计模式——建造者模式(生成器模式)总结

当我们需要创建一个非常复杂的对象时&#xff0c;可以使用建造者模式&#xff0c;分步骤建造一个对象&#xff0c;最后将完整的对象返回给客户端。 比如&#xff0c;我们要生成一个房子对象&#xff0c;建造一个房子&#xff0c;需要打地基、盖围墙、盖地板、安装门、安装窗户…...

Nginx代理Minio出现AccessDeniedAccessDenied

一、问题描述 AccessDeniedAccessDenied.sight.jpgmediafiles/mediafiles/sight.jpg1835E50603CB8FE0dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8 二、问题排查 &#xff08;1&#xff09;minio 和 nginx 是否正常启动 &#xff08;2&#xff09;检…...

在ArcGIS Pro中将栅格NoData值修改为特定值

目录 问题如下&#xff1a;栅格文件中NoData值为65535&#xff0c;要将该NoData值修改为-9999 步骤一&#xff1a;使用栅格计算器&#xff08;Raster Calculator&#xff09;输出具有新NoData值的栅格文件 步骤二&#xff1a;输出修改值后的栅格文件&#xff08;Export Rast…...

模糊表示学习 笔记

图表示学习通常从图的拓扑结构和高维节点属性中产生低维和清晰的表示。然而&#xff0c;节点或图的清晰表示实际上隐藏了特征的不确定性和可解释性。例如&#xff0c;在引文网络中&#xff0c;两篇论文之间的引用总是涉及表示相关度的future&#xff0c;也就是说&#xff0c;一…...

GitHub 趋势日报 (2025年04月12日)

本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1yeongpin/cursor-free-vip[Support 0.48.x]&#xff08;Reset Cursor AI MachineID & Auto Sign Up / In & Bypass Higher…...

FreertosHAL库笔记

堆和栈 堆&#xff1a;一块内存空间&#xff0c;用于存储程序运行时动态申请的内存空间。在堆上分配内存可以根据程序的需要灵活地申请和释放不同大小的内存块。可用pvProMalllloc()和vPortFree()函数来开辟和释放 栈&#xff1a;也是一块内存空间&#xff0c;主要用于函数调用…...

迷你世界脚本之容器接口:WorldContainer

容器接口&#xff1a;WorldContainer 彼得兔 更新时间: 2023-04-26 10:21:02 具体函数名及描述如下: 序号 函数名 函数描述 1 addFurnace(...) 新增熔炉 2 removeFurnace(...) 移除熔炉 3 checkFurnace(...) 检测是否为熔炉 4 getFurnaceHeatPerce…...

springboot框架集成websocket依赖实现物联网设备、前端网页实时通信!

需求&#xff1a; 最近在对接一个物联网里设备&#xff0c;他的通信方式是 websocket 。所以我需要在 springboot框架中集成websocket 依赖&#xff0c;从而实现与设备实时通信&#xff01; 框架&#xff1a;springboot2.7 java版本&#xff1a;java8 好了&#xff0c;还是直接…...

【linux知识】web服务环境搭建(一):用户以及开发环境初始化

toc 创建用户组以及用户 以下是 创建用户组 wendao 和用户 wendao 并指定 GID、UID 及家目录 的完整操作指南&#xff1a; 一、创建用户组&#xff08;指定 GID&#xff09; sudo groupadd -g 1500 wendao # 创建组并指定 GID 为 1500• 注意&#xff1a;GID 需唯一&#…...

消息中间件——RocketMQ(一)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 RocketMQ&#xff08;一&#xff09; 一、MQ出现的背景 在传统的单体应用架构中&#xff0c;系统的各个模块紧密耦合在一起。随着业务…...

[oeasy]python087_[词根溯源]suspend词源_append_depend

087_[词根溯源]suspend词源_append [词根溯源]suspend词源_append_depend 回忆上次内容 上次了解了 方法 和 函数的 不同之处 方法(method) 函数(function) 需要对象调用 无需对象调用 可以根据 名字调用 无需名字 直接调用 基于类的对象 独立的 需要self 不需要self…...

Ubuntu 安装 Cursor AppImage 到应用程序中

如果 Cursor AppImage 安装到 Ubuntu 系统中&#xff08;而不是每次手动运行 .AppImage 文件&#xff09;&#xff0c;可以按照以下方法操作&#xff1a; 方法 1&#xff1a;直接运行 AppImage&#xff08;最简单&#xff0c;但不完全“安装”&#xff09; 赋予执行权限chmod …...

二叉树 --- 堆(下)

今天我们来把堆完结了。 对于一个高度为 h 的满二叉树&#xff0c;有 F(h) 2 ^ 0 2 ^ 1 …… 2 ^ (h - 1) 2 ^ h - 1 h log2 (N1) 对于一个高度为 h 的完全二叉树&#xff0c;且最后一层只有一个 &#xff0c;则 F(h) 2 ^ 0 2 ^ 1 …… 2 ^ (h - 2) 1 2 ^ (h -…...