news 2026/4/23 12:54:23

并查集示例

作者头像

张小明

前端开发工程师

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/4/23 12:51:59

移动端PDF预览技术深度解析:从问题根源到最佳实践

移动端PDF预览技术深度解析&#xff1a;从问题根源到最佳实践 【免费下载链接】pdfh5 项目地址: https://gitcode.com/gh_mirrors/pdf/pdfh5 在移动互联网高速发展的今天&#xff0c;PDF文档的移动端预览已成为刚需&#xff0c;但传统方案在性能、交互和兼容性方面存在…

作者头像 李华
网站建设 2026/4/23 12:05:36

AI之Course之Agent Quality:智能体质量保障—通过掌握评估与改进智能体的关键方法,学习构建健壮可靠的AI智能体。内容包括可观测性、日志记录与追踪技术,以及优化智能体性能的核心指标与评

AI之Course之Agent Quality&#xff1a;智能体质量保障—通过掌握评估与改进智能体的关键方法&#xff0c;学习构建健壮可靠的AI智能体。内容包括可观测性、日志记录与追踪技术&#xff0c;以及优化智能体性能的核心指标与评估策略—构建可信AI智能体&#xff1a;质量评估、可观…

作者头像 李华
网站建设 2026/4/17 21:39:55

游戏音频解码利器:vgmstream全方位应用指南

引言&#xff1a;开启游戏音频宝库的钥匙 【免费下载链接】vgmstream vgmstream - A library for playback of various streamed audio formats used in video games. 项目地址: https://gitcode.com/gh_mirrors/vg/vgmstream 你是否曾经遇到过这样的情况&#xff1a;在…

作者头像 李华
网站建设 2026/4/9 22:15:21

如何接口封装 注意事项

面试口述 “接口封装 + 注意事项” 的核心:以 “统一化、自动化、稳定性” 为目标,先讲封装思路(从痛点到落地),再讲核心注意事项,结合实际项目案例(比如 Uniapp/Vue/ 小程序),用 “步骤 + 细节 + 踩坑” 逻辑说清,体现工程化思维。以下是 3-5 分钟口述模板(适配中级…

作者头像 李华
网站建设 2026/4/22 16:03:04

开源标签打印神器LPrint:跨平台无驱动打印的全新解决方案

开源标签打印神器LPrint&#xff1a;跨平台无驱动打印的全新解决方案 【免费下载链接】lprint A Label Printer Application 项目地址: https://gitcode.com/gh_mirrors/lp/lprint 在当今数字化办公环境中&#xff0c;标签打印已成为物流、零售、仓储等多个行业不可或缺…

作者头像 李华
网站建设 2026/4/19 8:37:52

24、Linux网络工具与安全协议详解

Linux网络工具与安全协议详解 1. Unix套接字信息 在Linux系统中,我们可以看到一系列Unix套接字的信息,如下所示: unix 1 [ ] STREAM CONNECTED 1170 @00000062 unix 13 [ ] DGRAM 475 /dev/log unix 0 …

作者头像 李华