news 2026/6/23 19:21:22

并查集示例

作者头像

张小明

前端开发工程师

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/6/22 15:50:06

百度网盘秒传脚本完全指南:快速上手极速生成功能

百度网盘秒传脚本是一款高效的网盘文件管理工具&#xff0c;通过模拟官方秒传机制实现文件的快速分享和转存。这款免费工具的核心优势在于永久保证分享有效性&#xff0c;且链接不包含任何账号隐私信息。本文将为您提供完整的秒传脚本使用教程。 【免费下载链接】rapid-upload-…

作者头像 李华
网站建设 2026/6/23 11:32:21

芯片价格战:成本才是王道

芯片行业价格战打得昏天黑地,各家厂商恨不得把价格压到地板价以下。这场战争里,能笑到最后的只有一种人——成本控制得好的。就是这么个逻辑:市场价格是统一的,你卖100块,别人也卖100块。但你的芯片成本是60块,人家成本是40块,这中间20块的差距就是生死线。这20块的差距很大程度…

作者头像 李华
网站建设 2026/6/22 16:11:50

layerdivider:AI图像分层革命,让设计效率飙升10倍

layerdivider&#xff1a;AI图像分层革命&#xff0c;让设计效率飙升10倍 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂图像的手动分层而头疼…

作者头像 李华
网站建设 2026/6/22 16:54:02

收到工资1002415.13元,爱你华为。

我的创业故事&#xff1a;《87年出生&#xff0c;我开了家一人公司&#xff0c;年营收百万》大家好&#xff0c;我是微笑哥。刚在二哥那边又刷到了一个帖子&#xff0c;是一个华为员工在匿名的社区&#xff0c;晒了自己的收入 100 多万。他说感谢华为&#xff0c;可以让他从山沟…

作者头像 李华
网站建设 2026/6/14 13:34:58

Windows 11精简终极教程:三步打造高性能轻量系统

Windows 11精简终极教程&#xff1a;三步打造高性能轻量系统 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你的Windows 11是否因为系统臃肿而运行缓慢&#xff…

作者头像 李华
网站建设 2026/6/18 16:08:50

全面解锁Honey Select 2游戏潜能的200+插件整合方案

全面解锁Honey Select 2游戏潜能的200插件整合方案 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为心仪的角色卡片无法正常加载而烦恼吗&#xff1f;当你…

作者头像 李华