请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

UF2效率非常低

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;

}

}

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2020-04-06 03:32:15

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


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


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


继续加油!:)

1 回复 有任何疑惑可以回复我~
  • 提问者 TrophY #1
    好的明白了,谢谢bobo老师!
    加油加油!
    回复 有任何疑惑可以回复我~ 2020-04-06 18:42:09
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信