并查集 落日映苍穹つ 2022-06-16 12:44 294阅读 0赞 # 并查集JAVA版框架 # ## ## ## 并查集是一种用来管理元素分组情况的数据结构。 ## ## 并查集可以高效地进行如下操作: ## \--查询元素a和元素b是否属于同一组 \--合并元素a和元素b所在的组 **不过需要注意的是:并查集虽然可以进行合并操作,却不可以进行分割操作。** **在树形结构里,如果发生了退化的情况,复杂度就会变得很高,因此有必要避免退化的发生,按照如下的操作,就可以避免退化:** \--对于每棵树,记录这棵树的高度。 \--合并时,如果两棵树的rank不同,那么从rank小的向rank大的连接边,即rank小的树作为rank大的树的子树。 此外,通过路径压缩,可以使得并查集更加高效,对于每个节点,一旦向上走到了一次根节点,就把这个点到父亲的边改为直接连向根。 在此之上,在查询过程中,向上经过的所有节点,都改为直接连接到跟上,这样再次查询这些节点时,就可以很快知道根是谁了。 **并查集的复杂度** 对n个元素的并查集进行一次操作的复杂度是O(a(n)),这里的a(n)是阿克曼函数的反函数,这比O(log(n))还要快,不过这是“均摊复杂度”,即并不是每一次操作都满足这个复杂度,二是多次操作后平均每一次操作的复杂度是O(a(n))的意思。 ## 下面是并查集实现的JAVA代码 ## package tree; public class UnionFindSet { /** * 祖先节点 */ private int [] par; /** * 树的高度 * 用来避免树的退化带来的复杂度上升 */ private int [] rank; /** * 初始化n个元素 * @param n */ public void init(int n){ for(int i=0;i<n;++i){ par[i]=i; rank[i]=0; } } /** * 查询树的根 * @param x * @return */ public int find(int x){ if(par[x]==x){ return x; } else{ return par[x]=find(par[x]); } } /** * 合并x和y所属的集合 */ public void unite(int x,int y){ x=find(x); y=find(y); if(x==y){ return ; } if(rank[x]<rank[y]){ par[x]=y; } else{ par[y]=x; if(rank[x]==rank[y]){ rank[x]++; } } } /** * 判断x和y是否属于同一个集合 * @param x * @param y * @return */ public boolean same(int x,int y){ return find(x)==find(y); } }
相关 并查集 Ⅱ \[poj 1611\] ([http://poj.org/problem?id=1611][http_poj.org_problem_id_1611]) 题目描述: T 古城微笑少年丶/ 2022年08月03日 14:35/ 0 赞/ 257 阅读
相关 并查集 并查集JAVA版框架 并查集是一种用来管理元素分组情况的数据结构。 并查集可以高效地进行如下操作: \--查询元素a和元素b是否属于同一组 落日映苍穹つ/ 2022年06月16日 12:44/ 0 赞/ 295 阅读
相关 并查集 这个文章是几年前水acm的时候转的, 当时也不知道作者是谁, 要是有人知道的话说一下吧 并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的 港控/mmm°/ 2022年06月13日 14:13/ 0 赞/ 279 阅读
相关 并查集 > 题目 > 某学校近期要组织全校同学出去参加某项活动,由于人数众多,学校决定让同学们自行组队,以小组为单位进行活动。假设学校一共n个同学,每个同学有一个唯一的数字作为标签 Myth丶恋晨/ 2022年06月08日 09:24/ 0 赞/ 293 阅读
相关 并查集 森林: 森林是由若干棵互不相交的树组成,两棵树分别独立,没有交集 ![20181112082744488.png][] 并查集: 并查集的结构和森林十分相似,是 Love The Way You Lie/ 2022年04月17日 02:27/ 0 赞/ 348 阅读
相关 并查集 来看一个实例,[杭电1232畅通工程][1232] 首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性 我就是我/ 2022年03月29日 10:58/ 0 赞/ 346 阅读
相关 并查集 > 并查集是一种树形的数据结构,用于集合的合并。 与C++STL相比的优势: 1. 可以同时维护多个集合 2. 快速的合并两个集合 \\现实: 用数组实现。fat 左手的ㄟ右手/ 2022年02月05日 00:23/ 0 赞/ 242 阅读
相关 并查集 例题: ![输入样例][20190805122001677.png] 输入样例,第一行为一个整数n,代表有n台电脑,编号1-n;接下来进行一系列操作,当输入‘c’时,判 Dear 丶/ 2021年11月11日 08:04/ 0 赞/ 372 阅读
相关 并查集 一、算法解释 用于解决一些有N个元素的集合应用问题。 1、将每个元素初始化为自身单独成为一个集合。用p\[i\]的值表示该元素所在集合。 ![这里写图片描述][S 桃扇骨/ 2021年09月14日 02:56/ 0 赞/ 451 阅读
相关 并查集 并查集的作用就是快速判断两个元素是否在同一个集合中,快速将两个集合合并 基本模板 include <iostream> include <a 比眉伴天荒/ 2021年06月22日 15:37/ 0 赞/ 544 阅读
还没有评论,来说两句吧...