news 2026/7/7 20:46:28

并查集示例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
并查集示例

并查集 =“合并(Union)+ 查找(Find)”的集合,也叫Disjoint Set Union(DSU)

它只做两件极快的事:

  1. Find(x)– 问“x 在哪个集合?”→ 返回根节点
  2. Union(x, y)– 把 x 所在集合与 y 所在集合合并成一个大集合

复杂度
经过“路径压缩 + 按秩/大小合并”,单次操作平均O(α(n)),α 是反阿克曼函数,比 log n 还慢,但常数 < 5,可当作常数时间

经典场景是任何需要“不断把元素合并、不断问是否同组”的问题。一句话,并查集就是“专门高效处理动态分组与连通查询”的最简数据结构。

例题

有若干个category:(1, 2), (2, 3), (4, 3), (5, 6), (6, 7, 10, 11)。
程序处理后需要输出这样的结果:(1, 2, 3, 4),(5, 6, 7, 10, 11)。

importjava.util.*;publicclassMergeCategories{publicstaticvoidmain(String[]args){List<List<Integer>>input=Arrays.asList(Arrays.asList(1,2),Arrays.asList(2,3),Arrays.asList(4,3),Arrays.asList(5,6),Arrays.asList(6,7,10,11));List<Set<Integer>>merged=merge(input);for(Set<Integer>group:merged){System.out.println(group);}}privatestaticList<Set<Integer>>merge(List<List<Integer>>input){UnionFinduf=newUnionFind();for(List<Integer>list:input){if(list.isEmpty()){continue;}intfirst=list.get(0);for(intele:list){uf.union(first,ele);}}// 按根分组Map<Integer,Set<Integer>>groups=newHashMap<>();for(intx:uf.parent.keySet()){introot=uf.find(x);groups.computeIfAbsent(root,k->newLinkedHashSet<>()).add(x);}returnnewArrayList<>(groups.values());}// 并查集staticclassUnionFind{Map<Integer,Integer>parent=newHashMap<>();// 递归intfind(intx){intp=parent.computeIfAbsent(x,k->k);if(p!=x){parent.put(x,find(p));p=parent.get(x);}returnp;}voidunion(intx,inty){introotX=find(x);introotY=find(y);if(rootX!=rootY){parent.put(rootX,rootY);}}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 18:50:50

Redis数据生命周期管理终极指南:AnotherRedisDesktopManager实战手册

Redis数据生命周期管理终极指南&#xff1a;AnotherRedisDesktopManager实战手册 【免费下载链接】AnotherRedisDesktopManager qishibo/AnotherRedisDesktopManager: Another Redis Desktop Manager 是一款跨平台的Redis桌面管理工具&#xff0c;提供图形用户界面&#xff0c;…

作者头像 李华
网站建设 2026/7/7 1:57:38

Node.js 企业级框架 Egg 4.0 发布:原生支持 AI 开发,架构全面革新

Node.js 开发者们注意了&#xff0c;那个 “鸽” 了很久的框架终于更新了。蚂蚁集团旗下的企业级 Node.js 框架 Egg.js 近日正式公布了 4.0 版本的最新动态。这次更新将 原生支持了 AI 开发能力。这意味着&#xff0c;你以后可以用写传统后端业务的方式&#xff0c;顺手把 AI 应…

作者头像 李华
网站建设 2026/7/7 5:55:13

工业自动化编程新选择:OpenPLC Editor完全指南

工业自动化编程新选择&#xff1a;OpenPLC Editor完全指南 【免费下载链接】OpenPLC_Editor 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPLC_Editor 在工业自动化领域&#xff0c;PLC编程一直是核心技术环节。今天&#xff0c;我要向大家推荐一款完全免费且开源…

作者头像 李华
网站建设 2026/7/7 8:11:01

33、Linux 内存管理:机制、操作与优化

Linux 内存管理:机制、操作与优化 1. 内存统计信息获取 在 Linux 中,我们可以使用 mallinfo() 函数来获取内存分配的统计信息。该函数返回一个 mallinfo 结构体,结构体的内容在 <malloc.h> 中定义如下: /* all sizes in bytes */ struct mallinfo {int are…

作者头像 李华
网站建设 2026/7/7 11:00:28

WebSite-Downloader:极速整站下载与离线浏览解决方案

WebSite-Downloader&#xff1a;极速整站下载与离线浏览解决方案 【免费下载链接】WebSite-Downloader 项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader 在当今数字化时代&#xff0c;网站内容的快速获取和离线访问已成为开发者、内容创作者和研究人…

作者头像 李华