美文网首页
union-find算法

union-find算法

作者: Jesse_996 | 来源:发表于2020-06-15 00:47 被阅读0次

Api:

public class UF{
  UF(int N);//初始化N个触点
  void union(int p,int q) //在p和q之间添加一条连接
  int find(int p) // p所在的分量的标识符
  boolean connected(intp ,int q)//如果q和p在同一各分量中则返回true
  int count()//联通分量的数量
}

加权quick-union算法:
将小数的根节点连接到大树的根节点

public class WeightedQuickUnionUF{
    private int[] id;
    private int[] sz;
    private int count;

    public WeightedQuickUnionUF(int N) {
        count = N;
        id = new int[N];
        for (int i = 0; i < N; i++) id[i] = i;
        sz = new int[N];
        for (int i = 0; i < N; i++) sz[i] = 1;
    }

    public int getCount() {
        return count;
    }

    public boolean connected(int p, int q) {
        return find(p) == find(q);
    }

    public int find(int p) {
        while (p != id[p]) p = id[p];
        return p;
    }

    public void union(int p, int q) {
        int i = find(p);
        int j = find(q);
        if (i == j) return;
        if (sz[i] < sz[j]) {
            id[i] = j;
            sz[j] += sz[i];
        } else {
            id[j] = i;
            sz[i] += sz[j];
        }
        count--;
    }
}

最优解法:路径压缩的加权quick-union算法
要实现路径压缩,只需要为find()添加一个循环,将在路径上遇到的所有节点都直接链接到根节点。

    public int find(int p) {
        int root = p;
        while (root != id[root]) root = id[root];
        while (p!=root) {
            int next = id[p];
            id[p] = root;
            p = next;
        }
        return root;
    }

相关文章

  • 《算法4》1.5 - Union-Find 算法,Python实

    Union-Find 算法(中文称并查集算法)是解决动态连通性(Dynamic Conectivity)问题的一种...

  • Union-Find算法详解

    ----------- 今天讲讲 Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性...

  • C++代写:CSE100 Six Degrees of Kevi

    代写算法类作业,需要用到BFS和Union-Find两个算法。这个作业比较坑的地方是需要对算法进行优化,否则计算不...

  • Union-Find算法

    动态连通性问题中,如何判断触点是否相连接,可以抽象表述为如何编写程序来过滤掉序列中所有无意义的整数对。连通性问题只...

  • union-find算法

    Api: 加权quick-union算法:将小数的根节点连接到大树的根节点 最优解法:路径压缩的加权quick-u...

  • union-find 算法

    1、前言 union-find 为并查集算法,原本的用途是判断图的连通性问题,连通性是指图中的两个节点是否相连。说...

  • 基础算法-Union-Find(动态连通性)--quick-fi

    今天学习的算法是比较基础和典型的算法Union-Find(动态连通性)。 题目介绍 问题的输入是一系列整数对,其中...

  • Union-Find并查集算法

    1. 概念 Union-Find 算法通常叫做并查集算法,它主要用于处理集合的合并和查询问题。顾名思义,Union...

  • LeetCode之Satisfiability of Equal

    问题: 方法:很有意思的一道题,主要用到了Union-Find算法,需要先学习下这个算法。其中最主要的是find(...

  • 基础算法-Union-Find(动态连通性)--加权quick-

    今天是基于Union-Find(动态连通性)的quick-union的优化,称为加权quick-union算法实现...

网友评论

      本文标题:union-find算法

      本文链接:https://www.haomeiwen.com/subject/thmqxktx.html