java实现并查集算法
来源:互联网 发布:java开源网 编辑:程序博客网 时间:2024/05/24 01:29
并查集
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组的元素所在的集合合并。
主要作用
解决连接问题
如何在上图这样复杂的图中判断两个点是否是相连的,这就是并查集要解决的
类UnionFind
parent[]存储该节点的父亲节点
public class UnionFind {private int[] parent;private int count;private int[] rank; //rank[i]表示以i为根的集合所表示的树的层数public UnionFind(int n) {this.parent =new int[n];this.rank=new int[n];this.count = n;for(int i=0;i<n;i++){parent[i]=i;rank[i]=1;}}//查找p的根节点public int find(int p){assert(p>=0&&p<count);//while(p!=parent[p]){//parent[p]=parent[parent[p]]; //路径压缩优化//p=parent[p];//}//return p;if(p!=parent[p])parent[p]=find(parent[p]);//更优化的路径压缩return parent[p];}//若p,q的根节点相同则表明他们连接public boolean isConnected(int p,int q){return find(p)==find(q);}//合并public void unionElements(int p,int q){int pRoot=find(p);int qRoot=find(q);if(pRoot==qRoot)return;if(rank[pRoot]<rank[qRoot]){parent[pRoot]=qRoot; //rank[qRoot]不用更新}else if(rank[qRoot]<rank[qRoot]){parent[qRoot]=pRoot;}else{parent[pRoot]=qRoot;rank[qRoot]+=1;}}}
更优化的路径压缩将一棵树压缩成只有两层,所有子节点只有一个根节点,这样在查找根节点或合并时能更快。
阅读全文
1 0
- java实现并查集算法
- JAVA拾遗 - 并查集算法的实现与改进
- java实现并查集
- java实现并查集
- [算法] 并查集概念及其实现
- 使用并查集实现Kruscal算法
- Kruskal算法+并查集实现
- 并查集实现Kruskal算法
- Kruskal算法的并查集实现
- [容易] kruskal 算法并查集实现
- 并查集及其算法实现
- 并查集问题:简单java实现
- hihocoder 1066 并查集java实现
- 快速并查集(Java实现)
- 并查集算法
- 并查集算法
- 并查集算法
- 并查集算法
- Tomcat——学习心得
- KL距离>=0的证明
- hf 主页布局
- poj1012Joseph(约瑟夫环)
- 基本数据结构——栈、队列和链表
- java实现并查集算法
- [bzoj3531][Sdoi2014]旅行 树链剖分
- c++string
- 二叉树的最大深度
- VMware里面的linux和windows互相传文件
- Q124:PBRT-V3,“路径追踪”积分器(14.5章节)
- axure原型设计之翻牌
- C语言编程技巧-signal(信号机制) 与中断
- [Usaco2015 Jan]Grass Cownoisseur 图论 tarjan spfa