Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带路径压缩的加权快速并集_Java - Fatal编程技术网

Java 带路径压缩的加权快速并集

Java 带路径压缩的加权快速并集,java,Java,据普林斯顿书店称,带有路径压缩的加权快速并集将对10^9个对象执行10^9并集操作的时间从一年减少到约6秒。这个数字是如何推导出来的?当我以10^8次操作运行以下代码时,我的运行时间为61s public class MainWQUPC{ public static void main(String[] args){ int p, q; Scanner s = new Scanner(System.in); long N = s.nex

据普林斯顿书店称,带有路径压缩的加权快速并集将对10^9个对象执行10^9并集操作的时间从一年减少到约6秒。这个数字是如何推导出来的?当我以10^8次操作运行以下代码时,我的运行时间为61s

public class MainWQUPC{
    public static void main(String[] args){
        int p, q; 
        Scanner s = new Scanner(System.in);

        long N = s.nextLong();

        WQUPC uf = new WQUPC((int) N);

        for(int x = 0; x < N; x++){
            p = (int) (Math.random() * N);
            q = (int) (Math.random() * N);

            if(!uf.connected(p, q))
                uf.union(p, q);
        }
    }
}

public class WQUPC{
    private int[] id;
    private int[] sz;

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

    int root(int i){
        while(i != id[i]){
            id[i] = id[id[i]];
            i = id[i];
        }

        return i;
    }

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

    void union(int p, int q){
        int i = root(p);
        int j = root(q);

        if(sz[i] < sz[j]){          
            id[i] = j;
            sz[j] += sz[i];
        }else{
            id[j] = i;
            sz[i] += sz[j];
        }
    }   
}
公共类MainWQUPC{
公共静态void main(字符串[]args){
int p,q;
扫描仪s=新的扫描仪(System.in);
长N=s.nextLong();
WQUPC uf=新的WQUPC((int)N);
对于(int x=0;x
您不能直接比较这一点,因为运行时取决于许多不同的因素,在这种情况下,主要取决于您的CPU性能

假设一年平均有31556952秒(60*60*24*365.2425) 路径压缩需要约6秒的时间

这意味着与路径压缩的快速联合大约是 5259492(31556952/6)比没有的快一倍


因此,给出的数字正好表明,当您“只是”稍微改进算法时,性能提升是多么令人难以置信。

这些数字基于理论计算。就像N个操作需要一年时间,N/365需要一天时间。你不能像以前那样比较。