package com.ibm.unionfind;
/**
* 并查集,也是一种常用的数据结构。主要用于解决动态连通性问题。
* 给出孤立的多个节点集合,比如1到n,然后再给出数据对表示增加连接关系,比如3和5连接,
* 那么随着输入数据对的不断增多,整个 集合的连通关系不断发生变化。
* 并查集这种数据结构,就是用来追踪和描述这种连通关系变化的有效手段。
*
* 初始化完毕之后,对该动态连通图有几种可能的操作:
*
* 1 查询节点属于的组
* 数组对应位置的值即为组号
*
* 2 判断两个节点是否属于同一个组
* 分别得到两个节点的组号,然后判断组号是否相等
*
* 3 连接两个节点,使之属于同一个组
* 分别得到两个节点的组号,组号相同时操作结束,不同时,将其中的一个节点的组号换成另一个节点的组号
*
* 4 获取组的数目
* 初始化为节点的数目,然后每次成功连接两个节点之后,递减1
*
* 本算法实现简单,效率低,如果要添加的新路径关系的数量是M,节点数量是N,
* 那么最后的时间复杂度就是O(M*N)
*
*
*/
public class Union {
private int[] a;
private int groups;
/**
* 数组元素下标表示不同的节点,节点标识符从0开始,如果是字符串,需要先映射成整数,
* 元素的值表示该节点所属的组,也是从0开始。
* @param n
*/
public void init(int n){
assert(n>0);
a = new int[n];
for(int i=0; i<n; i++){
a[i] = i;
}
并查集之数组
最新推荐文章于 2023-06-06 14:54:22 发布