问一个随机排列的问题.# Programming - 葵花宝典b*a2005-11-24 08:111 楼如何将 1,2,3,4,......100这个数列生成一个随机排列的数列?就是像 89,2,5,90,56,........3,4..谢谢.
y*i2005-11-24 08:112 楼JingHuaQu should have. Check itc code.void shuffle(int A[], int n){int i, j, tmp;for(i = n - 1; i >=1; i--) {j = rand() % i;/* swap */tmp = A[i];A[i] = A[j];A[j] = tmp;}}【在 b******a 的大作中提到】: 如何将 1,2,3,4,......100这个数列生成一个随机排列的数列?: 就是像 89,2,5,90,56,........3,4..: 谢谢.
b*a2005-11-24 08:113 楼thanks. got it.【在 y****i 的大作中提到】: JingHuaQu should have. Check it: c code.: void shuffle(int A[], int n): {: int i, j, tmp;: for(i = n - 1; i >=1; i--) {: j = rand() % i;: /* swap */: tmp = A[i];: A[i] = A[j];
N*m2005-11-24 08:115 楼STL has shuffle?【在 b******a 的大作中提到】: 如何将 1,2,3,4,......100这个数列生成一个随机排列的数列?: 就是像 89,2,5,90,56,........3,4..: 谢谢.
z*e2005-11-24 08:116 楼严格来讲,你这个是biased,因为rand()不是到无穷都均匀的。要处理一下尾巴,尤其n很大的时候。【在 y****i 的大作中提到】: JingHuaQu should have. Check it: c code.: void shuffle(int A[], int n): {: int i, j, tmp;: for(i = n - 1; i >=1; i--) {: j = rand() % i;: /* swap */: tmp = A[i];: A[i] = A[j];
N*m2005-11-24 08:117 楼rand()总是返回一个有限的数,如果n=100000000*RAND_INT_MAX+some number,那就算不上尾巴了。这时候怎么处理好呢?【在 z****e 的大作中提到】: 严格来讲,你这个是biased,因为rand()不是到无穷都均匀的。: 要处理一下尾巴,尤其n很大的时候。
r*t2005-11-24 08:118 楼resampling, 这里 performance 不是问题。【在 N***m 的大作中提到】: rand()总是返回一个有限的数,: 如果n=100000000*RAND_INT_MAX+some number,那就算不上尾巴了。: 这时候怎么处理好呢?
r*t2005-11-24 08:1110 楼我连名词都搞错了:resampling 指 bootstrap 之类的,这里的算是 acceptance sampling 吧,错了纠正我。就是说,要是 rand() 返回的数在尾巴上, 就重新 rand() ,直到合格为止。【在 N***m 的大作中提到】: wiki上有好长的介绍,先记下:)