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;
            }
            
        }
    }
  • 相关阅读:
    vue学习之router
    vue学习之组件
    xshell操作
    Webstorm快捷操作
    javascript判断节点是否在dom
    影子节点 shadowDOM
    虚拟节点操作——DocumentFragment
    理解浏览器的历史记录
    浏览器渲染
    web请求流程
  • 原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8615716.html
Copyright © 2011-2022 走看看