Union Find 并查集总结

转载并总结:并查集

并查集(Disjoint set,Union-Find):一种用来解决集合查询合并的数据结构 支持 O(1) find 查找 O(1) union 集合

  • 初始化(Init):将每个元素所在集合初始化为其自身。
  • 合并(Union):将两个元素所属的集合合并为一个集合。
  • 查找(Find):查找元素所在的集合,即根节点。

应用

  • 最小生成树:Kruskal 算法
  • 图的连通分量
  • 静态连通性
  • 动态连通性:判断图的最早连通时间

局限:

  • 不支持拆分(split)操作:任何节点一旦成为其他节点的子节点后,将永远不可能再成为树根。
  • 集合必须是不相交的(disjoint):同一个元素不能属于多个集合。
  • 代表元不记录集合成员信息:
    ~ 父节点不记录子节点的信息。
    ~ 找图中某节点所在的连通分量的所有节点需要再次扫描或者维护额外信息。

模版

包含路径压缩和按秩合并

class UnionFind{
   
    int[] parent; 
    int[] rank;   // unnecessary 
    int count;  // unnecessary 
    UnionFind(int x){
   
        this.parent = new int[x];
        this.rank = new rank[x];
        this.count = x;
        for(int i = 0; i < x;i++){
   
            parent[i] = i;
            rank[i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值