并查集之数组

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;
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值