Algs4 union-find算法 带路径压缩的加权Quick-Union实现

来源:互联网 发布:b超双顶径数据分男女 编辑:程序博客网 时间:2024/06/04 17:49

Code

package sed.algorithm.chapter1.section5;public class PathCompressWeightedQuickUnionUF {        private int[] id;        private int[] sz;        private int count;        public PathCompressWeightedQuickUnionUF(int max) {            id = new int[max];            sz = new int[max];            for (int i = 0; i < id.length; i++) {                id[i]=i;            }            for (int i = 0; i < id.length; i++) {                sz[i]=1;            }            count = max;        }        public int count(){            return count;        }        public int find(int p){            int pParent = p;            while(id[pParent]!=pParent){                pParent=id[pParent];            }            while(id[p]!= p){                p=id[p];                id[p]=pParent;            }            return pParent;        }        public boolean connected(int p, int q){            return find(p)== find(q);        }        public void union(int p, int q){            int pRoot = find(p);            int qRoot = find(q);            if (pRoot!=qRoot) {                if (sz[pRoot] < sz[qRoot]) {                    id[pRoot] = qRoot;                    sz[qRoot] += sz[pRoot];                 }else {                    id[qRoot] = pRoot;                    sz[pRoot] += sz[qRoot];                }                count--;            }        }}

Input

100 million points , 200million links

Notes:

速度不是一般的快,之前用quick union 算法 跑了一个多小时。。。(其实我也不想的,因为测试代码里面类引用错了,一直以为用的是这个算法,其实用的是最简单的quick union)。TT 改了以后还没要一分钟。
0 0
原创粉丝点击