怎样以某一概率对一数列随机选择

来源:百度知道 编辑:UC知道 时间:2024/05/14 03:14:18
C++:我要从一数列里以某一概率如0.2随机选择其中的元素,也就是说随机选出其中20%的元素,应该怎么实现呢
我有个办法是,每判断一个元素是否被选择,先产生0-50的随机数,如果这个随机数小于10,那么这个元素被选择,这样对这个数列执行一遍,就有20%的数被选择.
但我希望更简单的方法,比如说这个数列有100个元素,我想直接产生他们的序号

比如说 有n个元素 (n<30000)
a[n];
int sum_a=n*20/100,x;
int c[3000]={0},d[3000];//c[3000]标记是否已经选出,用于防止重复选择
for(int i=0;i<sum_a;++i)
{
x=rand()%3001;
if(c[x])//此元素已经选,弃之重选
{--i;continue;}
else //此元素之前没被选
{c[x]=1; //标记选过了
d[i]=x;//存储选出的元素
}
}