b******a 发帖数: 215 | 1 如何将 1,2,3,4,......100这个数列生成一个随机排列的数列?
就是像 89,2,5,90,56,........3,4..
谢谢. | y****i 发帖数: 156 | 2 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];
A[j] = tmp;
}
}
【在 b******a 的大作中提到】 : 如何将 1,2,3,4,......100这个数列生成一个随机排列的数列? : 就是像 89,2,5,90,56,........3,4.. : 谢谢.
| b******a 发帖数: 215 | 3 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];
| b******a 发帖数: 215 | | N***m 发帖数: 4460 | 5 STL has shuffle?
【在 b******a 的大作中提到】 : 如何将 1,2,3,4,......100这个数列生成一个随机排列的数列? : 就是像 89,2,5,90,56,........3,4.. : 谢谢.
| z****e 发帖数: 2024 | 6 严格来讲,你这个是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***m 发帖数: 4460 | 7 rand()总是返回一个有限的数,
如果n=100000000*RAND_INT_MAX+some number,那就算不上尾巴了。
这时候怎么处理好呢?
【在 z****e 的大作中提到】 : 严格来讲,你这个是biased,因为rand()不是到无穷都均匀的。 : 要处理一下尾巴,尤其n很大的时候。
| r****t 发帖数: 10904 | 8 resampling, 这里 performance 不是问题。
【在 N***m 的大作中提到】 : rand()总是返回一个有限的数, : 如果n=100000000*RAND_INT_MAX+some number,那就算不上尾巴了。 : 这时候怎么处理好呢?
| N***m 发帖数: 4460 | 9 wiki上有好长的介绍,先记下:)
【在 r****t 的大作中提到】 : resampling, 这里 performance 不是问题。
| r****t 发帖数: 10904 | 10 我连名词都搞错了:resampling 指 bootstrap 之类的,
这里的算是 acceptance sampling 吧,错了纠正我。
就是说,要是 rand() 返回的数在尾巴上, 就重新 rand() ,直到合格为止。
【在 N***m 的大作中提到】 : wiki上有好长的介绍,先记下:)
|
|