zoukankan      html  css  js  c++  java
  • 并查集

    2018-03-03 16:00:40

    集合运算: 交、并、补、差,判定一个元素是否属于某一集合。

    并查集:集合并 、查某元素属于哪个集合。

    并查集问题中集合存储如何实现?

    1)可以用树结构表示集合,树的每个结点就是集合中的各个元素。

    2)采用数组的形式进行存储

    • 查找操作

    • 集合并操作

     

    这里的并操作是不加判断对的将X2所在的集合直接挂到X1上,这种操作很有可能造成X1的深度不断增加,最终导致查找效率的低下。因此可以略作改进,将集合的并操作加上一个限制,就是将规模较小的集合并到规模较大的集合中去。至于如何的到集合的规模信息,可以采用一种非常讨巧的方式,将原来的-1修改为规模的相反数。

    Polish:

    在O(1)时间复杂度完成并查操作。

    int find(int[] parent, int i) {
        if (parent[i] != i) {
            parent[i] = find(parent, parent[i]);
        }
        return parent[i];
    }
     
    void union(int[] parent, int i, int j) {
        int i1 = find(parent, i);
        int j1 = find(parent, j);
     
        if (i1 != j1) parent[j1] = i1;
    }
    
  • 相关阅读:
    团队个人冲刺day08
    4.26 jQuery AJAX load() 方法
    4.23 jquery
    4.22 AJAX技术
    4.21 正则表达式
    4.20
    4.15 重写团队作业1
    4.12 重写团队作业1
    4.9 团队作业1
    4.7 团队作业1
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/8496965.html
Copyright © 2011-2022 走看看