并查集(数据结构) 逻辑结构集合的逻辑结构存储结构用互不相交的树表示多个“集合”顺序存储的树双亲表示法因为要索引根节点#defineMAX_TREE_SIZE100//树中最多结点数typedefstruct{//树的结点定义ElemType data;//数据元素intparent;//双亲位置域}PTNode;typedefstruct{//树的类型定义PTNode nodes[MAX_TREE_SIZE];//双亲表示intn;//结点数}PTree;基本操作#初始化#defineSIZE13intUFSets[SIZE];//集合元素数组//初始化并查集voidInitial(intS[]){for(inti0;iSIZE;i)S[i]-1;}#“查”到一个元素到底属于哪一个集合——从指定元素出发一路向北找到根节点//Find 查操作找x所属集合返回x所属根结点intFind(intS[],intx){//x是数组下标while(S[x]0)//循环寻找x的根xS[x];returnx;//根的S[]小于0}最坏时间复杂度O(n),n个元素一个链表树从底部开始查找#如何判断两个元素是否属于同一个集合——分别查到两个元素的根判断根节点是否相同即可#如何把两个集合“并”为一个集合——让一棵树成为另一棵树的子树即可//Union 并操作将两个集合合并为一个voidUnion(intS[],intRoot1,intRoot2){//要求Root1与Root2是不同的集合if(Root1Root2)return;//将根Root2连接到另一根Root1下面S[Root2]Root1;}时间复杂度O(1)#Union操作的优化尽量让小树合并到大树树的高度不增加降低查“的时间复杂度用根节点的绝对值表示树的结点总数//Union 并操作小树合并到大树voidUnion(intS[],intRoot1,intRoot2){if(Root1Root2)return;if(S[Root2]S[Root1]){//Root2结点数更少S[Root1]S[Root2];//累加结点总数S[Root2]Root1;//小树合并到大树}else{S[Root2]S[Root1];//累加结点总数S[Root1]Root2;//小树合并到大树}}该方法构造的树高不超过⌊ l o g 2 n ⌋ 1 \lfloor log_2n \rfloor 1⌊log2​n⌋1并查集的进一步优化#find操作的进一步优化压缩路径策略//Find 查操作优化先找到根节点 再进行压缩路径intFind(intS[],intx){introotx;while(S[root]0)rootS[root];//循环找到根while(x!root){//压缩路径inttS[x];//t指向x的父节点S[x]root;//x直接挂到根节点下xt;}returnroot;//返回根节点编号}

相关新闻

最新新闻

Ollama本地部署Qwen3大模型实战指南

Ollama本地部署Qwen3大模型实战指南

1. 项目概述最近在本地部署大模型的需求越来越旺盛,特别是像Qwen3这样的主流开源模型。Ollama作为一款轻量级的本地大模型运行工具,让普通开发者也能在自己的电脑上快速搭建大模型环境。今天我就来分享下如何从零开始部署Ollama,并运行Qwen3等…

2026/7/24 11:12:38
前端集成AI绘图的风险与防护实践

前端集成AI绘图的风险与防护实践

1. 前端集成AI绘图的风险全景图去年某电商平台上线AI试衣功能后,用户发现上传的工作证照片被自动生成了恶搞形象——这个真实案例暴露出前端调用AI绘图API时最典型的信任危机。当我们把用户数据交给一个黑箱模型时,究竟有多少潜在风险正在代码背后酝酿&a…

2026/7/24 11:12:38
VMD-RIME-LSTM模型在光伏发电预测中的应用

VMD-RIME-LSTM模型在光伏发电预测中的应用

1. 项目背景与核心价值 光伏发电预测一直是新能源领域的关键技术难题。传统预测方法往往难以应对光伏功率输出的强波动性和非线性特征,特别是在多云天气条件下,预测精度会显著下降。针对这一痛点,我们团队提出了一种融合变分模态分解&#xf…

2026/7/24 11:12:38
布局组件库:响应式栅格、卡片、分割线组件(252)

布局组件库:响应式栅格、卡片、分割线组件(252)

在鸿蒙(HarmonyOS)应用开发中,构建一套标准化的布局组件库是实现“一次开发,多端部署”的关键。结合 ArkUI 的声明式语法与响应式布局能力,以下是响应式栅格、卡片与分割线组件的完整封装方案与实战代码:一…

2026/7/24 11:12:38
基础组件库:Button、Input、Switch等原子组件封装(251)

基础组件库:Button、Input、Switch等原子组件封装(251)

一、 架构设计:原子化与样式复用在封装基础组件时,建议遵循以下原则:原子化设计:将 Button、Input 等作为不可再拆分的最小功能单元,不持有全局状态,仅通过参数配置外观和行为。样式与逻辑分离:…

2026/7/24 11:12:38
手动操作别忘了更新状态机

手动操作别忘了更新状态机

一句话: 触摸屏和上位机操作硬件时,只设了使能引脚,忘了同步更新状态变量。自动序列里写了但手动路径漏了——4 处缺同一行代码。所有手动操作都要和自动序列走同一个状态入口。适合谁读:写嵌入式控制逻辑,状态机和手动操作不同步…

2026/7/24 11:07:38

月新闻