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

    public class Based_on_rank_optimize {
        private int[] parent;
        private int[] rank;    //rank[i]表示以i为根的树层数
        private int count;
        
        public Based_on_rank_optimize(int n) {
            // TODO Auto-generated constructor stub
            this.parent = new int[n];
            this.count = n;
            this.rank = new int[n];
            
            for(int i = 0; i < n; i ++) {
                parent[i] = i;
                rank[i] = 1;        //有时候用0也是可以的
            }
        }
        
        int find(int p) {
            assert (p >= 0 && p < count);
    //        while(p != parent[p]) {        //路径压缩,一般用这个
    //            parent[p] = parent[parent[p]];
    //            p = parent[p];
    //        }
    //        return p;                    //两种路径压缩
            
            if(p != parent[p])        //逻辑上更优,但由于递归开销大,实践更慢
                parent[p] = find(parent[p]);    
            return parent[p];
        }
        
        boolean isConnected(int p, int q) {
            return find(p) == find(q);
        }
        
        void unionElements(int p, int q) {
            int pRoot = find(p);
            int qRoot = find(q);
            
            if(pRoot == qRoot)
                return;
            
            if(rank[pRoot] > rank[qRoot]) {
                parent[qRoot] = pRoot;
            }
            else if(rank[pRoot] < rank[qRoot]){
                parent[pRoot] = qRoot;
            }
            else {
                parent[pRoot] = qRoot;
                rank[qRoot] += 1;
            }
            
        }
    }
  • 相关阅读:
    博客样式备份
    2018年终总结
    技术博客的太监
    LeetCode 日常填坑
    互联网之父
    TotoiseSVN的使用方法
    常用CMD命令
    量化策略
    浏览器加载js的阻塞与非阻塞
    Vue核心之数据劫持
  • 原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8615716.html
Copyright © 2011-2022 走看看