作者superlubu (劲过吕布)
看板java
标题Re: [问题] 有没有办法取代或改善List的效率?
时间Wed May 23 11:13:32 2007
※ 引述《Mewra ()》之铭言:
: Collections.shuffle( originalRandomArray );
: randomArray.clear(); // initialize
: for( int i = 0 ; i < originalRandomArray.size() ; i++ )
: {
: if( i < nodeNumber * CHANCE_MOVE )
: {
: randomArray.add( originalRandomArray.get( i ) );
: }
: }
这一部份的 codes... 可以改成为:
Random randMachine = new Random(System.currentTimeMillis());
randomArray.clear();
for (int i=0; i<nodeNumber * CHANCE_MOVE; i++) {
if (i >= originalRandomArray.size()) break; // prevent overflow
int ranInt = randMachine.nextInt(originalRandomArray.size() - i) + i;
int ranTarget = originalRandomArray.get(ranInt);
// get the number in pos [ranInt]
int curPos = originalRandomArray.get(i);
// get the number in pos [i];
originalRandomArray.remove(ranInt);
if (ranInt != i) originalRandomArray.remove(i);
originalRandomArray.add(i, ranTarget);
if (ranInt != i) originalRandomArray.add(ranInt, curPos);
// swap two numbers in pos ranInt and i
randomArray.add(ranTarget);
// add the random number to the result
}
这就做到了 random 抽出 nodeNumber * CHANCE_MOVE 个数的目的,而且是 O(n)
刚测试过... 若是 nodeNumber = 1000000, CHANCE_MOVE = 0.05
时间是五分三十八秒 XD
--
《为了要得到真相,就要向原 PO 伸图》
那就是伸图魔人的没图没真相原则,那时我们坚信那就是逼逼死的真实
靠么,图咧?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 147.8.130.225
※ 编辑: superlubu 来自: 147.8.130.225 (05/23 11:31)