UF2效率非常低

来源:6-4 基于size的优化

TrophY

2020-04-06

bobo老师,
不知道为什么我的uf2 一直都比uf1慢的多的多,没发现什么问题啊。
图片描述
public class UnionFind2 {

private int[] parent;
private int count;

public UnionFind2(int count){
    parent = new int[count];
    this.count = count;

    for(int i = 0 ; i <  count ; i ++)
        parent[i] = i;

}

private int find( int p){
    assert p >= 0 && p < count;

    while( p != parent[p])
        p = parent[p];

    return p;
}

public boolean isConnection(int p , int q){
    return find(p) == find(q) ;
}

public void unionElements( int p , int q){

// if( !isConnection( p , q)){
// parent[find(q)] = find§;
// }

    int pRoot = find(p);
    int qRoot = find(q);

    if( pRoot == qRoot)
        return;

    parent[ pRoot ] = qRoot;

}

}

写回答

1回答

liuyubobobo

2020-04-06

虽然你给出的数据确实比较夸张,但是 UF2 比 UF1 慢也是正常的。链式寻址就会比较慢。从你的 UF1 的时间看,你用的数据量也比较小。数据量越大,算法优化的效果越明显。


不过,课程中介绍的 Point 是,从 UF3 开始,效率肯定会高于 UF1,而且数据量越大,越明显。


如果对自己的实现不放心,可以尝试下载课程的官方代码,在你的环境下运行一下试试看。


继续加油!:)

1
1
TrophY
好的明白了,谢谢bobo老师! 加油加油!
2020-04-06
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程