3D点云数据处理中的聚类算法总结
1.欧式聚类:
基于点的空间距离(欧几里得距离)来分割点云,将距离较近的点归为同一簇。
欧式聚类需要的参数:邻域半径R,簇的最小点阈值minPts,最大点数阈值maxPts。
实现效率:
O(n * log n)
实现步骤:
(1)从未访问点开始探索:对于点云中的每一个未访问的点,进行以下步骤:
(2)区域查询:使用空间索引(如KD树)查找在以当前点为中心、半径为R的邻域内的所有点。如果邻域内的点数量大于或等于最小点阈值minPts,则将该点标记为一个新的聚类中心。
(3)扩展聚类:从这个聚类中心出发,继续探索邻域内的点,如果发现这些邻域内的点也是聚类的一部分,继续进行区域查询,将这些点也加入到聚类中,并对新发现的点进行同样的操作。如果邻域内的点不够,意味着这个聚类已经识别完毕。如果聚类簇的点数大于最大点阈值maxPts,进行丢弃。
(4)标记与输出:将识别到的聚类标记为不同的ID,直到点云中的所有点都被访问。输出结果为每个点对应的聚类标签。
2.条件欧式聚类:
条件欧式聚类在传统欧式聚类(仅依赖距离阈值)的基础上,增加了条件函数,用于判断两个邻近点是否属于同一簇。条件函数可以由用户自定义,结合点的空间距离和其他属性(如法向量角度、颜色差异等),从而实现更灵活和精确的分割。
实现效率:
O(n * log n)
实现步骤:
略(在欧式聚类的基础上增加额外条件限制)
3.区域生长聚类:
区域生长聚类是一种基于种子点的点云聚类方法,尤其是在需要利用点云几何信息(如表面连续性)的场景中。
区域生长聚类需要的参数:k个近邻或邻域半径r,角度阈值θth,曲率阈值Cth。
实现效率:
O(n * log n)
实现步骤:
(1)初始化,从点云中选择一个种子点,PCL默认按照曲率大小排序,选择曲率最小的作为第一个种子点(曲率小的点通常位于平滑区域);并创建空的簇集合以及种子队列。
(2)生长过程,
·邻域搜索,找到当前种子点的k近邻,或指定半径内的邻近点。
·条件检查,计算当前种子点法向量Ns与邻近点Ni的夹角,若arccos(Ns·Ni)<θth
(角度阈值)且邻近点的曲率<Cth
,则认为邻近点与种子点属于同一个簇。
·簇扩展,将满足角度条件的邻近点加入当前簇,并将其添加到种子队列。
·种子更新,从队列中移除当前种子点,处理下一个种子点,直到队列为空。
(3)新簇生成,当前簇生长完成后,从剩余未分配的点中选择新的种子点(仍选择曲率小的点),重复生长过程。
(4)终止条件,当所有点都被分配到簇或标记为不可生长(孤立点)时,算法结束。输出多个簇的集合。
4.Min-Cut聚类:
Min-Cut聚类是一种基于图割(Graph Cut)的点云分割方法,主要用于二值分割,即将点云分为前景和背景两个部分。这种方法适用于从点云中提取特定目标(如物体)的情况。
将点云分割为两类:
·前景点: 属于目标物体的点。
·背景点: 不属于目标物体的点。
实现效率:
O(n²) 或更高
实现步骤:
(1)构建图结构,将点云中每个点视为图的一个顶点。额外添加两个虚拟顶点:源点和汇点。源点代表前景点,汇点代表背景。
边的连接方式:每个顶点与源点和汇点相连(分别表示前景和背景的归属可能性);每个顶点与它的k近邻点相连。
(2)分配权重,图中的每条边都被赋予权重,表示割段这条边的代价,权重分为三类:
前景权重:点与源点之间的边权重,由用户指定一个常数,反映点属于前景的先验倾向。
背景权重:点与汇点之间的边权重,根据点到目标中心的距离计算,公式为:
其中d为点到目标中心的水平距离,σ是用户设置的高斯核函数,控制距离衰减速度。当点超过用户定义的半径时,权重趋近于0,表示更可能是背景。
平滑权重:点与近邻点之间的边权重,基于两点的欧式距离dij:
距离越远,权重越小,割断的可能性越大。
(3)最小割计算,使用最大流-最小割算法计算图的最小割,最小割是将图分为两个子集(源点侧和汇点侧)的边集合,其总权重之和最小。源点侧的点被标记为前景,汇点侧的点被标记为背景。
(4)输出结果,索引为0的为背景点,索引为1的为前景点。
上述四种算法在点云的PCL处理库(c++或python)中有比较成熟的实现,可直接调用。下面的几种算法在Python中也有成熟的实现。
5.DBSCAN:
DBSCAN 是一种经典的密度聚类算法,它的核心思想是通过点的密度连通性来识别簇,能够发现任意形状的簇并有效处理噪声。
DBSCAN 需要两个参数:邻域半径ε和形成密集区域所需的最小点数minPts。
点类型定义:
核心点:某个点的ε邻域内包含至少minPts个点(包括自身)。
边界点:非核心点,但落在某个核心点的邻域内。
噪声点:既不是核心点,也不是边界点的点。
密度传播关系定义:
直接密度可达:若点q在核心点p的ε邻域内,则q从p直接密度可达。
密度可达:若存在点序列 p1,p2,...,pn
,其中p1=p,pn=q
,且pi+1从pi直接密度可达,则q从p密度可达。
密度连通:若存在核心点o,使得点p和q都从o密度可达,则p和q密度连通。密度连通的点形成一个簇。
实现效率:
时间复杂度O(nlogn)
。
DBSCAN 的实现是一个迭代过程,通过标记点并扩展簇来完成聚类。
实现步骤:
(1)输入数据集,包含n个点,设置邻域半径ε和定义最小点数minPts;
(2)初始化,将所以点标记为“未访问”,创建空的簇集合和噪声集合;
(3)主循环,随机选择一个“未访问”点p,将p标记为“已访问”,计算点p的ε邻域内的点数Nε§,包括p点自身。
若 |Nε(p)| < minPts
:
将p标记为“噪声”,暂不分配簇;
继续下一轮循环。
若 |Nε(p)| ≥ minPts
:
p是核心点,创建新簇C;
将p加入C。
(4)簇扩展,
种子集合:将Nε§中的所有未访问点加入种子集合S。
迭代扩展:
从S中取出一个点q。
若q未访问:
标记q为“已访问”;
查询q的邻域Nε(q);
若 |Nε(q)| ≥ minPts
(q是核心点):
将Nε(q)中的未访问点加入S。
将q加入当前簇C。
重复直到S为空。
(5)重复,返回步骤(3),选择下一个未访问点,直到所有点都被访问。
(6)输出,簇集合:每个簇包含密度连通的核心点和边界点;噪声集合:未分配到任何簇的点。
如图所示,设置minPts = 4
。点 A 和其他红点是核心点,因为在ε邻域内,这些点周围的区域至少包含 4 个点 (包括点本身)。因为它们彼此之间都可以访问,形成了一个单独的集群。点 B 和点 C 不是核心点,但是可以从 A (通过其他核心点) 到达,因此也属于集群。点 N 是一个噪声点,它既不是核心点,也不是直接可达的。
6.层次聚类:
层次聚类分为两种:
凝聚聚类:从每个数据点开始,每个点是一个簇,逐步合并最近的簇,直到所有点在一个簇中。
分裂聚类:从所有点在一个簇开始,逐步分割,直到每个点为单独簇。分裂聚类较少用,但适合特定场景。
链接准则:
合并时使用链接准则决定簇间距离,使用不同准则可能导致不同的聚类结果:
单链接:两个簇间的最小点间距离。
完全链接:两个簇间的最大点间距离。
平均链接:两个簇所有点对距离的平均值。
中心链接:两个簇中心间的距离。
实现效率:
层次聚类的计算复杂度通常为 O(n3)
,适合中小型数据集(数百到千个点)。对于大型数据集效率较低,可能需优化。
实现步骤(以凝聚聚类为例):
(1)初始化:每个数据点视为一个单独的簇。若有n个点,初始有n个簇。
(2)距离计算:计算每对簇间的距离,常用欧式距离。距离定义依赖链接准则。
(3)合并簇:找到距离最近的两簇,合并为一个新簇,簇数减 1。
(4)更新距离:合并后,更新距离矩阵,计算新簇与其他簇的距离。
(5)迭代:重复上述步骤,直到所有点在一个簇中,或达到预定簇数。
实现示例:
假设数据集 S={A(0,0),B(1,1),C(5,5),D(6,6)}
,使用单链接,欧式距离:
初始簇:{A},{B},{C},{D}
距离矩阵:
第一次合并:
最近对:A-B 距离1.4,合并为{A,B};
更新矩阵:
第二次合并:
最近对:C-D距离1.4,合并为{C,D}:
更新矩阵:
第三次合并:
合并{A,B}和{C,D}簇为{A,B,C,D},结束。
7.k-means聚类:
K-Means 聚类的目标是将n个数据点划分为k个簇,使得每个点属于距离其最近的簇中心,并最小化簇内点的总方差。其核心思想基于以下假设:
①数据点围绕若干中心(质心)分布,簇是球形或紧凑的。
②通过迭代优化簇中心的位置,逐步收敛到局部最优解。
K-Means 是一种硬聚类方法,每个点严格属于一个簇,不支持模糊分配。
实现效率:
O(nkdt)
,n个点,k个中心,d维,t次迭代。
实现步骤:
(1)输入:
数据集D={x1,x2,...,xn}
包含n个点,每个点是d维向量。簇数k,需要预先指定。距离度量,通常使用欧式距离。
(2)初始化:随机选择k个点作为初始簇中心{μ1,μ2,...,μk}
。
(K-Means++中对初始簇中心的选择方法进行了改进,先随机选择一个中心,后续中心选择概率与已有中心 的最小距离平方成正比,重复直到选出k个中心。)
(3)分配阶段:
对每个数据点xi:计算其与所有簇中心μi的距离。将xi分配到距离最近的簇中心所属的簇Cj。
(4)更新阶段:
对每个簇Cj:计算簇内所有点的均值,更新簇中心μj:
其中∣Cj∣是簇Cj的点数。
(5)迭代:
重复上述步骤(3)、(4),直到满足终止条件:
①簇中心不再变化(收敛);②达到最大迭代次数;③目标函数变化小于阈值。
(6)输出:
k个簇{C1,C2,...,Ck}
,及其中心{μ1,μ2,...,μk}
。
8.体素聚类:
通过将点云划分到三维体素网格(Voxel Grid)中,利用体素之间的连通性或特征进行聚类。
体素聚类需要的参数:体素大小vs。
实现效率:
体素化O(n)
;聚类O(mlogm)
,(其中m为体素个数,通常远小于n)
实现步骤:
(1)体素化,计算点云的边界,根据设置的体素大小,将空间划分为Nx *Ny *Nz的网格。
如对于点p=(x,y,z),体素索引为:
将点分配到对应体素。
(2)计算体素特征(可选,若仅连通性聚类,则不需要计算):
统计点数:遍历每个非空体素V(i,j,k),记录其包含的点数Nijk;
计算质心:对体素V(i,j,k)中的点{p1,p2,...,pn}
,计算中心坐标,用于体素的代表点,用于后续聚类;
标记空体素:若Nijk=0,标记V(i,j,k)为空,也可设置最小点数阈值,过滤噪声体素。
(3)连通性聚类:
①定义邻接规则:
6-邻域
:仅考虑上下左右前后6
个方向的邻居;
26-邻域
:考虑3*3*3
立方体内的所有26
个邻居。
②初始化:
创建一个空的簇集合{C1,C2,...}
和访问标记数组(标记体素是否已经处理过),选择未访问的非空体素V(i,j,k)作为种子。
③连通性遍历:
将种子体素加入C以及队列,弹出队列头部元素,检测其邻居,若邻居非空且未访问,加入C和队列,重复直到队列为空。
重复:
从剩余未访问的非空体素中选择新种子,重复步骤③,直到所有体素被处理。
(4)点簇提取:
将体素簇映射为原点云,生成最终的点云簇。
9.OPTICS:
OPTICS(Ordering Points To Identify the Clustering Structure) 是一种基于密度的聚类算法,克服DBSCAN对单一密度阈值ε依赖的局限性。OPTICS 通过对点云数据进行有序排序,生成一个层次化的聚类结构,支持提取任意密度的聚类结果。
需要的参数:邻域半径ε,最小点数minPts,陡度阈值ξ用于簇提取(0~1之间)。
概念定义:
核心距离:对于点x和参数minPts,核心距离dcore(x)是x到其第minPts个最近邻的距离。若x的邻居数|Nε(x)|<minPts,则dcore(x)=∞。核心距离表示点x是否为核心点,核心点能生成簇。
可达距离:对于点x和其邻近点o,可达距离为:
其中d(x,o)是点x和点o的欧式距离。可达距离表示从核心点x到点o的密度连接成本。
处理顺序:OPTICS按照可达距离从小到大的顺序处理点,优先扩展密度较高的区域。
输出结构:生成一个点序列,每个点带有其核心距离和可达距离,可视化为“可达性图”。
实现效率:
O(nlogn)
实现步骤:
(1)初始化,输入点云P={p1,p2,...,pn}
,设置邻域半径阈值ε、最小邻居数minPts。创建两个集合,分别存储已处理点(初始为空)和未处理点(初始为所有点)。创建一个优先队列用于排序可达距离。创建输出序列Order和对应的dcore,dreach列表,初始为空。
(2)选择种子点,从未处理的点中随机选择一个点x作为初始起点(或按特点策略选择),将x标记为已处理,加入输出序列Order。
(3)计算核心距离,找到x的ε-邻域内的点集Nε(x),若Nε(x)的个数≥minPts
,则按距离排序,取第minPts个点的距离作为dcore(x);若Nε(x)的个数<minPts
,则dcore(x)=∞
(非核心点)。
(4)扩展簇,若dcore(x)≠∞
,则x是核心点,对于Nε(x)中的每个未处理点o,计算dreach(o,x)=max{dcore(x),d(x,o)}
,将(o,dreach(o,x))
加入优先队列(若o不在队列中,进行添加;若o已在队列中,且可达距离比之前存储的值更小,则进行更新;若可达距离不比之前更小,则不更新)。从优先队列中取出可达距离最小的点o’,将其标记为已处理,并加入Order,记录dreach(o’)、dcore(o’)
,若o’是核心点,重复扩展过程。
(5)重复,若优先队列为空,从未处理点中选择新种子点,重复步骤(2)-步骤(4),直到所有点被处理。
(6)输出,返回点序列Order和每个点的dreach,dcore。
(7)簇提取,
需要用到的数据:
点序列Order = [p1,p2,...,pn]
;
可达距离L_dreach=[r1,r2,...,rn]
;
参数ξ,ξ越大,提取的簇越粗,ξ越小,提取更多细小的簇。
提取步骤:
①初始化,创建簇集合与噪声集合,初始都为空。创建临时簇Ctemp,用于收集潜在簇点。
②检测簇开始,逐点分析可达距离,检查前一点和当前点,若dreach(i)值大(为∞或大于dreach(i+1)
),且dreach(i+1)<(1-ξ)·dreach(i)
,表示pi为簇的起点,则清空Ctemp,添加pi点。
③扩展簇,继续遍历后续点pj(j>i),若dreach(j)满足dreach(j)≤(1+ξ)·dreach(j-1)
,则添加pj到Ctemp。
④簇结束,若dreach(k)>(1+ξ)·dreach(k-1)
,表示pk-1是簇的终点。检查Ctemp,若Ctemp的个数≥minPts
,则保存到簇集合,否则保存为噪声集合。
⑤处理剩余点,若dreach(i)=∞
或未形成有效簇
,则为噪声,重复直到序列结束。
10.HDBSCAN:
HDBSCAN结合层次聚类和密度估计,是对DBSCAN的改进版本,且不需要指定邻域半径ε。能够自动识别不同密度和形状的簇,并显式区分噪声点。
实现步骤:
(1)计算核心距离,对输入点云P={p1,p2,...,pn}
,计算点pi的k个最近邻,dcore(pi)=第k个邻居距离。输出核心距离集合[dcore(p1),dcore(p2),...,dcore(pn)]
。
(2)构建互达距离图,对每对点(pi,pj),计算互达距离:
dmreach(pi,pj)=max{dcore(pi),dcore(pj),d(pi,pj)}
(同OPTICS算法的可达距离有区别,需注意)
根据互达距离,形成加权图。
(3)构建最小生成树MST
,使用kruskal算法
从互达距离图中提取最小联通结构,按dmreach从小到大加边,避免环,MST
示意图如下图所示:
加粗部分为最小生成树(顶点为点云坐标,数字为权值-即互达距离)
(4)层次聚类,从单一簇MST
开始,通过逐步移除(剪枝)较长的边(即互达距离较大的边),将数据分裂成多个子图。随着边被移除,子图的数量逐渐增加,形成一个层次结构,这个过程会持续进行,直到所有的边都被移除。
(5)簇提取,
变量含义:λbirth
指一个簇诞生时的密度阈值,λdeath
指一个簇结束时的密度阈值,其中λ的计算方式:
λ = 1/dmreach(pi,pj)
每次剪枝时,记录新形成的子图(簇)的λbirth
,当这个子图进一步分裂或消失时,记录它的λdeath
。
稳定性计算:
簇提取的目标,从所有可能的簇中,选择一组互不重叠的簇,使得稳定性最大化,通过EOM(Excess of Mass)
策略实现。
相关文章:
3D点云数据处理中的聚类算法总结
1.欧式聚类: 基于点的空间距离(欧几里得距离)来分割点云,将距离较近的点归为同一簇。 欧式聚类需要的参数:邻域半径R,簇的最小点阈值minPts,最大点数阈值maxPts。 实现效率: O(n * log n) 实现…...
配置本机监控
配置本机监控 1、安装zabbix-agent 2、编辑zabbix-agent配置文件 zabbix-agent工作模式: 主动模式 被动模式 这两行配置都是指定监控服务器的地址 被动模式下,zabbix server的地址 主动模式下,zabbix server的地址 指定被监控端的名称&…...
基于python的Flask模块化设计与蓝图的妙用——打造轻量化Web应用
基于python的Flask模块化设计与蓝图的妙用——打造轻量化Web应用 前言 如果你刚开始学习Flask,可能会遇到这样的困惑:当项目功能越来越多,代码都堆在一个.py文件里,不仅难维护,还容易冲突。别担心!本文将用…...
历年云南大学计算机复试上机真题
历年云南大学计算机复试机试真题 在线评测:传送门:pgcode.cn 喝饮料 题目描述 商店里有 n 中饮料,第 i 种饮料有 mi 毫升,价格为 wi。 小明现在手里有 x 元,他想吃尽量多的饮料,于是向你寻求帮助&#x…...
Python 线程池
Python 线程池 flyfish 线程池的概念 线程池是一种多线程处理形式,它预先创建了一定数量的线程,这些线程会被保存在一个线程池中。当有新的任务提交时,线程池会从池中取出一个空闲的线程来执行该任务;若池中没有空闲线程&#…...
【Linux】Bash是什么?怎么使用?
李升伟 整理 什么是 Bash? Bash(Bourne Again Shell)是一种 命令行解释器(Shell),广泛用于 Unix 和 Linux 操作系统。它是 Bourne Shell(sh) 的增强版,提供了更多的功能…...
蓝桥杯day2:解码异或 后的数组
一、题意 未知 整数数组 arr 由 n 个非负整数组成。 经编码后变为长度为 n - 1 的另一个整数数组 encoded ,其中 encoded[i] arr[i] XOR arr[i 1] 。例如,arr [1,0,2,1] 经编码后得到 encoded [1,2,3] 。 给你编码后的数组 encoded 和原数组 arr …...
R语言软件配置(自用)
①输入R: The R Project for Statistical Computing ②点击进入Cran镜像网页,选择清华大学镜像,选择自己合适的版本下载即可(以我电脑windows为例)。 ③点击base或者install R for the first time,然后选择Download R-4.4.3 for windows&…...
基于deepseek的智能语音客服【第二讲】后端异步接口调用封装
本篇内容主要讲前端请求(不包含)访问后端服务接口,接口通过检索知识库,封装提示词,调用deepseek的,并返回给前端的全过程,非完整代码,不可直接运行。 1.基于servlet封装异步请求 为…...
LEDNet总结
LEDNet:联合低光增强和暗光去模糊 1、暗光增强和去模糊可以单独处理,但是合并效果不理想。 研究问题的背景:光线不足 可见度颜色失真 最小快门速度有限 长时间曝光引起运动模糊 低光运动模糊同时存在 存在问题:暗光增强后运动模…...
线性规划的标准形式
标准形式的定义 目标函数:最大化线性目标函数 其中,x 是决策变量向量,c 是目标系数向量。 约束条件:等式形式约束 A x b, 其中,A 是约束系数矩阵,b 是常数项向量。 变量非负约束: 。 因此…...
xxl-job 执行器端服务器的简单搭建
xxl-job 执行器端服务器的简单搭建 先讲一下我们平时怎么使用 xxl-job 的,再引出背后是如何实现的。 我觉得对于一款成功的框架来说,好用,是非常重要的一个特性。 框架要便于接入,便于使用。对于用户来说,不要有太多…...
数字化企业可能会用到的系统有哪些?
你是否也曾像我一样,对这些问题充满疑问: 在企业数字化转型的浪潮中,究竟会涉及哪些系统? 这些系统又分别在何种情境下被投入使用? 如果你也有这样的疑问,那么这篇文章或许能为你答疑解惑。 为了给你一…...
【Linux】:守护进程化
朋友们、伙计们,我们又见面了,本期来给大家带来守护进程相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结…...
在 web 部署 YOLOv8目标检测(Django+html)
本文介绍如何将自己训练好的模型在网页上进行应用,使用 Django html 进行部署,能够对视频和图像进行识别,并显示到页面上,下面是一个效果: 上 传 和另外 7 个页面 - 个人 - Microsoft Edge 2025-03-13 21-52-06 下面进…...
程序员学商务英语之Making Business Calls
Dialogue-1 Reaching Somebody By Telephone电话找人 A: What do you think the secrect to success is? 你认为成功的秘诀是什么? B: Hold on to your dreams. 坚持你的梦想。 A: May I speak to your boss, Mr. Wong? 请你的老板,王先生接电话?…...
java项目之基于ssm的少儿编程在线培训系统(源码+文档)
项目简介 少儿编程在线培训系统实现了以下功能: 用户信息管理: 用户信息新增 用户信息修改 教师信息管理: 教师信息添加 教师信息删除 教师信息修改 课程信息管理: 课程信息添加 课程信息修改 课程信息删除 课程类型管理&…...
【初学者】Python语言中有没有指针类型?
李升伟 整理 在Python语言中,没有像C或C那样的显式指针类型。Python的设计哲学强调简洁和易读,因此它隐藏了许多底层的细节,包括指针。 不过,Python中的变量可以被视为对对象的引用。当你创建一个对象并将其赋值给一个变量时&am…...
RG-S3760应用协议配置
RG-S3760应用协议配置 1. dhcp 服务配置 提问:如何在设备上开启dhcp 服务,让不同VLAN 下的电脑获得相应的IP 地址? 回答: 步骤一:配置VLAN 网关IP 地址,及将相关端口划入相应的VLAN 中 S3760#con t S…...
C++基础 [八] - list的使用与模拟实现
目录 list的介绍 List的迭代器失效问题 List中sort的效率测试 list 容器的模拟实现思想 模块分析 作用分析 list_node类设计 list 的迭代器类设计 迭代器类--存在的意义 迭代器类--模拟实现 模板参数 和 成员变量 构造函数 * 运算符的重载 运算符的重载 -- 运…...
skywalking微服务链路追踪
是什么? skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点…...
K8S学习之基础三十七:prometheus监控node资源
Prometheus v2.2.1 编写yaml文件,包含创建ns、configmap、deployment、service # 创建monitoring空间 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitor-sa# 创建SA并绑定权限 kubectl create serviceaccount monitor -n monito…...
Web 小项目: 网页版图书管理系统
目录 最终效果展示 代码 Gitee 地址 1. 引言 2. 留言板 [热身小练习] 2.1 准备工作 - 配置相关 2.2 创建留言表 2.3 创建 Java 类 2.4 定义 Mapper 接口 2.5 controller 2.6 service 3. 图书管理系统 3.1 准备工作 - 配置相关 3.2 创建数据库表 3.2.1 创建用户表…...
1221. 四平方和 -蓝桥杯真题-哈希函数思想
原题链接:1221. 四平方和 - AcWing题库 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 44 个正整数的平方和。 如果把 00 包括进去,就正好可以表示为 44 个数的平方和。 比如: 对于一个给定的正整…...
为什么要学习人工智能(AI)?—— 未来已来,AI引领时代变革
未来已来,AI引领时代变革 在这个日新月异的时代,人工智能(AI)正以不可阻挡之势重塑着我们的世界。从教育的深耕细作到科研的突破创新,从行政的效率提升到管理的智慧化转型,AI技术如同一股强大的潮流&#x…...
Markdig:强大的 .NET Markdown 解析器详解
在现代开发中,Markdown 已经成为了一种广泛使用的轻量级标记语言,特别是在文档、博客和内容管理系统中,Markdown 为开发者提供了快速、简洁的格式化文本方式。而在 .NET 生态中,Markdig 是一款非常强大的 Markdown 解析器…...
云计算迁移革命:企业如何摆脱“单一云”锁定,构建自主云未来?
一场价值690亿美元的行业地震 2023年,博通(Broadcom)以690亿美元完成对VMware的收购,这不仅是企业IT历史上的一次天价并购,更在全球云计算市场掀起了一场深远的地震。VMware长期以来是企业数据中心的核心支柱…...
蓝桥杯篇---按键长按与双击
文章目录 前言1. 新增全局变量和宏定义解释1.1宏定义KEY_EVENT_*DEBOUNCE_TIMEHOLD_TIMEDOUBLE_TIMEMULTI_TIME 1.2全局变量Key_ValKey_OldKey_DownKey_Upsys_tickkey_eventkey_pressedkey_press_startkey_last_releaseclick_cnt 2. 定时器初始化(1ms中断࿰…...
created在vue3 script setup中的写法
在 Vue 2 里,created 是一个生命周期钩子函数,会在实例已经创建完成之后被调用,主要用于在实例初始化之后、数据观测和 event/watcher 事件配置之前执行代码。而在 Vue 3 的 <script setup> 语法糖里,不再有像 Vue 2 那样直…...
基于springboot的房屋租赁系统(008)
摘 要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本低等优点。 因此,构建符…...
Linux上的`i2c-tools`工具集的编译构建和安装
源码复制到Ubuntu系统中并解压 的i2c-tools工具集的源码百度网盘下载链接: https://pan.baidu.com/s/1XNuMuT1auT1dMzYo3LAFmw?pwdi6xe 终端进入源码目录 cd /home/book/mybuild/i2c-tools-4.2执行编译构建命令 运行下面的命令进行编译构建 make CC${CROSS_COM…...
java项目之基于ssm的社区流浪动物救助领养系统
项目简介 社区流浪动物救助领养系统实现了以下功能: 本社区流浪动物救助领养系统分为管理员还有用户两个权限,管理员可以管理用户的基本信息内容,可以管理回访信息以及回访的租赁信息,能够与用户进行相互交流等操作,…...
网络空间安全(34)安全防御体系
前言 安全防御体系是一个多层次、多维度的系统,旨在保护组织或个人的信息资产免受各种网络攻击和威胁。 一、技术层面 网络边界防御 防火墙:部署在网络边界,通过设定规则允许或阻止特定流量的进出,保护内部网络不受外部攻击。入侵…...
《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》
一、系统概述 本系统是一个基于 TCP 协议的多人聊天系统,由一个服务器和多个客户端组成。客户端可以连接到服务器,向服务器发送消息,服务器接收到消息后将其转发给其他客户端,实现多人之间的实时聊天。系统使用 C 语言编写&#x…...
知识蒸馏:让大模型“瘦身”的魔法
知识蒸馏:让大模型“瘦身”的魔法 什么是蒸馏模型?AI界的“知识浓缩术”核心定义传统训练 vs 知识蒸馏关键优势 DeepSeek的蒸馏“三步魔法”骨架提取——搭建“迷你版大脑”知识灌注——模仿教师的“思考过程”微调优化——针对场景“查漏补缺” DeepSee…...
MySQL数据库精研之旅第一期:开启数据管理新旅程
专栏:MySQL数据库成长记 个人主页:手握风云 目录 一、数据库简介 1.1. 数据库的概念 1.2. 数据库和数据结构的关系 1.3. 主流数据库 1.3.1. 关系型数据库 1.3.2. 非关系型数据库 1.4. 关系型数据库的概念 二、MySQL配置 2.1. mysqld服务端程序 …...
Linux复习——基础IO,认识文件描述符、软硬件链接
1.复习C文件接口 1.1 fopen FILE *fopen(const char *path, const char *mode); path:带路径的文件名称(待打开的文件) mode: r:以可读方式打开,不可写,文件不存在,则报错 r&…...
【Java集合夜话】第1篇:拨开迷雾,探寻集合框架的精妙设计
欢迎来到Java集合框架系列的第一篇文章!🌹 本系列文章将以通俗易懂的语言,结合实际开发经验,带您深入理解Java集合框架的设计智慧。🌹 若文章中有任何不准确或需要改进的地方,欢迎大家指出,让我…...
Prometheus使用
介绍:Prometheus 是一个开源的 监控与告警系统,主要用于采集和存储时间序列数据(Time Series Data) Prometheus的自定义查询语言PromQL Metric类型 为了能够帮助用户理解和区分这些不同监控指标之间的差异,Prometheu…...
Java学习打卡-Day19-Set、HashSet、LinkedHashSet
Set 接口 无序(添加和取出顺序不一致)(但取出顺序固定)。没有索引。不允许重复,所以最多一个null。遍历方式 迭代器增强for循环不能使用普通for循环索引方式。 HashSet 实现了Set接口,具有相应特征。底…...
冯・诺依曼架构深度解析
一、历史溯源:计算机科学的革命性突破 1.1 前冯・诺依曼时代 在 1940 年代之前,计算机领域呈现 "百家争鸣" 的格局: 哈佛 Mark I(1944):采用分离的指令存储与数据存储ENIAC(1946&a…...
单片机学完开发板,如何继续提升自己的技能?
很多人学完开发板后都会卡在一个尴尬的阶段:觉得自己会的东西不少,但又不知道下一步该干啥。会点C语言,能烧录程序,能点亮LED,玩转按键,搞定串口等等,能用开发板做点小玩意儿,但面对…...
Nginx 日志格式
默认日志格式配置 log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for";该格式记录了客户端IP、用户、时间、请求、状态…...
Spring Boot 整合 Elasticsearch 实践:从入门到上手
引言 Elasticsearch 是一个开源的分布式搜索引擎,广泛用于日志分析、搜索引擎、数据分析等场景。本文将带你通过一步步的教程,在 Spring Boot 项目中整合 Elasticsearch,轻松实现数据存储与查询。 1. 创建 Spring Boot 项目 首先ÿ…...
STM32 —— 嵌入式系统、通用计算机系统、物联网三层架构
目录 一、嵌入式系统的概念 二、通用计算机系统与嵌入式系统的比较 用途 硬件 软件 性能与功耗 开发与维护 三、嵌入式系统与物联网的关系 四、物联网的三层架构 1. 感知层(Perception Layer) 2. 网络层(Network Layer) …...
SARAD 解读
出处:NIPS 2024 代码链接:https://github.com/daidahao/SARAD/ 一 文章动机 ① 时间建模(Temporal Modeling)的局限性: a. 时间维度上 感受野极小;b. 变量间时间戳错位 (时间建模、空间建模不统一) →…...
【愚公系列】《高效使用DeepSeek》017-知识点思维导图生成
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
【linux】scp和rsync
scp 和 rsync 都是 Linux 系统中用于文件传输的命令行工具,它们都可以通过网络在本地和远程主机之间传输文件。 scp 命令 定义 scp 是 “secure copy” 的缩写,它是一个基于 SSH 协议的文件传输工具,用于在本地和远程主机之间安全地复制文…...
软件需求分类、需求获取(高软46)
系列文章目录 软件需求分类,需求获取 文章目录 系列文章目录前言一、软件需求二、获取需求三、真题总结 前言 本节讲明软件需求分类、需求获取的相关知识。 一、软件需求 二、获取需求 三、真题 总结 就是高软笔记,大佬请略过!...
蓝桥杯单片机之AT24C02(基于自己对AT24C02的学习和理解)
一、先用抽象法说明原理,让原理变得简单易懂: 1、向AT24C02写入数据: 有个关系户,他想安排自己的儿子进某个大厦里某个楼层的公司,那么他就要先找到这个公司的地址,然后再找到该公司是第几楼,最…...