作者zanyking (遥远的旅人)
站内Programming
标题Re: [问题] 从0-99999选出一千个不重覆的乱数?
时间Fri May 28 10:52:44 2010
JDK 里Collection API的程式码:
public static void shuffle(List<?> list, Random rnd) {
int size = list.size();
if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
} else {
Object arr[] = list.toArray();
// Shuffle array
for (int i=size; i>1; i--)
swap(arr, i-1, rnd.nextInt(i));
// Dump array back into list
ListIterator it = list.listIterator();
for (int i=0; i<arr.length; i++) {
it.next();
it.set(arr[i]);
}
}
}
开一个List里面装int from 0~999999,shuffle过,
然後取前面里要几个就几个。
如果你的取样空间大到RAM会爆炸,那这个程式也是个不错的出发点去思考。
--
我所信仰的科学是一种谦卑的理性,承认自身的无知与渺小才能观察到世界在我们贫
弱的知觉上留下来的痕迹。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.44.37