Redian新闻
>
问一个随机排列的问题.
avatar
问一个随机排列的问题.# Programming - 葵花宝典
b*a
1
如何将 1,2,3,4,......100这个数列生成一个随机排列的数列?
就是像 89,2,5,90,56,........3,4..
谢谢.
avatar
y*i
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..
: 谢谢.

avatar
b*a
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];

avatar
b*a
4
thanks.
avatar
N*m
5
STL has shuffle?

【在 b******a 的大作中提到】
: 如何将 1,2,3,4,......100这个数列生成一个随机排列的数列?
: 就是像 89,2,5,90,56,........3,4..
: 谢谢.

avatar
z*e
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];

avatar
N*m
7
rand()总是返回一个有限的数,
如果n=100000000*RAND_INT_MAX+some number,那就算不上尾巴了。
这时候怎么处理好呢?

【在 z****e 的大作中提到】
: 严格来讲,你这个是biased,因为rand()不是到无穷都均匀的。
: 要处理一下尾巴,尤其n很大的时候。

avatar
r*t
8
resampling, 这里 performance 不是问题。

【在 N***m 的大作中提到】
: rand()总是返回一个有限的数,
: 如果n=100000000*RAND_INT_MAX+some number,那就算不上尾巴了。
: 这时候怎么处理好呢?

avatar
N*m
9
wiki上有好长的介绍,先记下:)

【在 r****t 的大作中提到】
: resampling, 这里 performance 不是问题。
avatar
r*t
10
我连名词都搞错了:resampling 指 bootstrap 之类的,
这里的算是 acceptance sampling 吧,错了纠正我。
就是说,要是 rand() 返回的数在尾巴上, 就重新 rand() ,直到合格为止。

【在 N***m 的大作中提到】
: wiki上有好长的介绍,先记下:)
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。