为什么用java实现时要比老师用C++实现时要快一个量级的时间呢?

来源:6-2 Quick Find

喜欢蹲门槛的猫

2017-04-07

public class UnionFind {

	private int[] id;
	private int count;
	
	public UnionFind(int n){
		
		count = n;
		id = new int[n];
		for(int i = 0 ; i < n ; i++){
			id[i] = i;
		}
	}
	
	public int find( int p ){
		
		assert( p >= 0 && p < count);
		return id[p];
	}
	
	public boolean isConnected(int p, int q){
		
		return find(p) == find(q);
	}
	
	public void unionElements(int p, int q){
		
		int pId = find(p);
		int qId = find(q);
		if(pId == qId){
			return;
		}
		
		for(int i = 0 ; i < count ; i++){
			if(id[i] == pId){
				id[i] = qId;
			}
		}
	}
}
import java.util.Random;

public class Main {

	public static void main(String[] args){
		
		int n = 10000;
		UnionFind uf = new UnionFind(n);
		
		Random random = new Random(System.currentTimeMillis());
		
		long start = System.currentTimeMillis();
		for(int i = 0 ; i < n ; i++){
			int a = random.nextInt(n);
			int b = random.nextInt(n);
			
			uf.unionElements(a, b);
		}
		
		for(int i = 0 ; i < n ; i++){
			int a = random.nextInt(n);
			int b = random.nextInt(n);
			
			uf.isConnected(a, b);
		}
		
		long end = System.currentTimeMillis();
		
		System.out.println((double)(end-start)/1000);
	}
}


写回答

1回答

liuyubobobo

2017-04-07

有可能你的计算机比我的计算机快一个量级吧!:)我录课用的计算机很老啦,是一台2013年的macbook air:)

0
5
喜欢蹲门槛的猫
回复
liuyubobobo
哦哦,明白了,谢谢老师哈,对UF2进行后面的优化后确实没有现在的问题了,应该是优化前的UF2的并操作使得根节点下的节点数量过多,使得查操作变慢了,进行SZ或者Rank的优化后就没有这个问题了,谢谢老师的耐心解答 ^_^
2017-04-10
共5条回复

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

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

11187 学习 · 1614 问题

查看课程