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

代码随想录 并查集理论基础

一、背景

1.并查集可解决的问题:并查集常用来解决连通性问题。也就是说当我们需要判断两个元素是否在同一个集合里的时候,就想到要用并查集

2.并查集的功能:

(1)将两个元素添加到一个集合中。

(2)判断两个元素在不在同一个集合。

二、原理:从代码层面上讲,如何将两个元素添加到同一个集合中?

1.错误想法:

(1)放到同一个数组或者set或者map中,这样就表示两个元素在同一个集合(但是这么多元素分门别类,可不止一个集合,可能是成百上千个集合,这时会定义很多的数组,不好实现)。

(2)定义一个二维数组(但是如果要判断两个元素是否在同一个集合的时候,只能把二维数组都遍历一遍;每当想添加一个元素到某集合的时候,依然需要把二维数组都遍历一遍,才知道要放到哪个集合里,代码实现逻辑非常复杂)。

2.正确思路:

(1)将三个元素A,B,C(分别是数字)放在同一个集合,其实就是将三个元素连通在一起,如何连通?只需要用一个一维数组来表示,即:father[A] = B,father[B] = C,这样就能表述A与B与C连通了(有向连通图)。

代码如下所示:

// 将v,u 这条边加入并查集 void join(int u, int v) { u = find(u); // 寻找u的根 v = find(v); // 寻找v的根 if (u == v) return; // 如果发现根相同,则说明在一个集合,不用两个节点相连直接返回 father[v] = u; }

(2)find函数的寻根过程,就是通过数组下标找到数组元素,然后一层一层地寻根,代码如下所示。

// 并查集里寻根的过程 int find(int u) { if (u == father[u]) return u; // 如果根就是自己,直接返回
http://www.cnnetsun.cn/news/52529.html

相关文章:

  • 如何用AI快速生成Flink面试题答案?
  • 10分钟搞定:DeepSeek本地开发环境快速搭建方案
  • 豆包AI手机智能操控的硬核原理
  • CVE-2023-48795漏洞深度解析:原理与影响
  • 深入解析strspn:字符串扫描的精确尺子
  • 纺织AI设计系统:用技术重构创意与效率
  • 用AI辅助开发:weditor的自动化测试新体验
  • vivo真机adb 命令获取手机当前窗口信息
  • 3分钟极速安装!MinGW自动化方案对比
  • Spring Boot依赖冲突:新手必看指南
  • 1小时快速搭建Kiro下载工具原型
  • GitLab本地部署效率革命:比官方文档快3倍的极简方案
  • 智能问数如何让数据分析效率提升10倍
  • Phyfusion在游戏开发中的5个惊艳应用案例
  • 电商网站商品筛选栏的sticky定位实战
  • 零基础学结构体:从概念到实战5个例子
  • 5分钟搭建status_invalid_image_hash检测原型
  • 人工智能应用-机器视觉:车牌识别(1)
  • 5分钟搞定node-sass配置:快速原型开发指南
  • 幽冥大陆(四十九)PHP打造Java的Jar实践——东方仙盟筑基期
  • 从产线到质检,兰亭妙微教你做 “工人愿意用” 的工业 UI
  • 【数学】【微积分】 ① 导数的基础概念与计算法则
  • 咱们聊聊Spring循环依赖那点事儿:从“死锁”到“三级缓存”的奇妙之旅
  • Linux 文件拷贝性能对比:裸 `read/write` VS `fread/fwrite` —— 页面缓存与用户缓冲的真相(附完整测试代码)
  • 主散线指标 通达信源码
  • 提升开关频率(一) PRISEMI芯导科技MOSFET工艺结构的发展与演进
  • 音频录制和编辑软件
  • Quick CPU(CPU性能优化软件)
  • 数据分析 “手工匠” VS “智能魔方”!虎贲等考 AI:凭什么重塑论文写作新范式?
  • U-Net++:嵌套密集跳跃连接,多尺度融合增强特征表达,医学影像分割的unet创新-k学长深度学习专栏