您当前的位置: 首页 > 

FPGA硅农

暂无认证

  • 2浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

生成不重复的随机数

FPGA硅农 发布时间:2020-10-07 21:38:02 ,浏览量:2

问题:生成[0,N-1]区间内的n个互不相同的随机数。 解决思路:首先,生成一个长度为N的数组,然后将其打乱,取前n个数,即为上述问题的解。 为了验证上述方法产生的随机数是符合要求的,我们用下面的方法来检验。 每次随机的从[0,N-1]中选取n个数,记它们的和为X,则X的期望可以计算如下: 这样选取n个数总共有 C N n C_N^n CNn​中取法,这么多取法总共取出了 C N n ∗ n C_N^n*n CNn​∗n个数,而0,1,2,…N-1这N个数出现的概率是相同的,因此每个数出现了 n ∗ C N n N \dfrac{n*C_N^n}{N} Nn∗CNn​​次,于是它们的和为 ( 1 + N ) ∗ N 2 ∗ n ∗ C N n N = 1 + N 2 ∗ n ∗ C N n \dfrac{(1+N)*N}{2}*\dfrac{n*C_N^n}{N}=\dfrac{1+N}{2}*n*C_N^n 2(1+N)∗N​∗Nn∗CNn​​=21+N​∗n∗CNn​ 故X的期望E(X)为 E ( X ) = ( 1 + N ) ∗ n 2 E(X)=\dfrac{(1+N)*n}{2} E(X)=2(1+N)∗n​ 下面是代码:

#include
#include
#include
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;

void generate_non_repeat_n_random_num(int n,int N,int *arr){
//生成介于0-N之间的n个不重复的随机数
    srand(time(0));
    for(int i=0;in;
    coutcnt;
    arr=new int[N];
    generate_non_repeat_n_random_num(n,N,arr);
    
    int i=0;
    long long sum=0;
    while (i++            
关注
打赏
1658642721
查看更多评论
0.1336s