• 高效产生m个n范围内的不重复随机数(m<=n)


       如何产生不重复的随机数?最容易想到的方法,是逐个产生这些随机数,每产生一个,都跟前面的随机

    数比较,如果重复,就重新产生。这是个很笨的方法,且比较次数呈线性增长,越往后次数越多。其实这些

    比较是多余的,完全可以不进行比较,只要反过来,按顺序产生这些数,但随机产生它们的位置。例如下

    面产生100个100以内不重复随机数的代码:  

    C代码: 

    int a[100];
    for(i=0; i<=99; ++i) a[i]=i;
    for(i=99; i>=1; --i) swap(a[i], a[rand()%i]);

    上面这段代码只需要遍历一次就可以产生这100个不重复的随机数,它是如何做到的呢?首先第二行按顺

    序用0到99填满整个数组;第三行,是随机产生从0到m-2个数组下标,把这个下标的元素值跟m-1下标的元

    素值交换,一直进行到下标为1的元素。因此它只需要遍历一次就能产生全部的随机数。

    原文:http://blog.csdn.net/megaboy/article/details/524221 

     该版本应该是通用型的吧,下面来个PHP版本的,利用array_rand函数

     PHP代码:

     1 $arr = array();

    2 for($i=0; $i<=99; $i++) {
    3     $arr[$i] = $i;
    4 }
    5 $arr = array_rand($arr,20);
  • 相关阅读:
    前端学习
    python 镜像
    os模块常用操作
    pandas 缺失值与空值处理
    pandas 根据列的值选取所有行
    pandas模块
    编码与解码
    正则表达式
    pthon之字典的遍历
    python作用域
  • 原文地址:https://www.cnblogs.com/yimu/p/2689341.html
Copyright © 2020-2023  润新知