zoukankan      html  css  js  c++  java
  • 在一个整数区间里产生一组不重复的随机数

    做图形久了,发觉做逻辑的东西也挺有意思,逻辑的内容也需要好的算法。

    问题描述:如何在一个整数区间内(例如0-n-1)产生一组(m个)不重复的随机数

    一般解法: 设置一个n长的数组用于标记,用rand随机产生一个数,如果之前已生成过,则重新生成随机数。直到得到一个未生成过的。

    最优解法:

    for(i = 0; i < n; i++)
    {
          x[i] = i;
    }
    for(i = 0; i < m; i++)
    {
          t = rand(i, n-1);
          swap(x[i], x[t]);
          out(x[i]);
    }

    1. 将区间数值存在一个数组x[i]

    2. 因为要取m个数,所以做m次遍历操作

    3. 每次都从i到n-1去取数,取到的数与x[i]交换

    4. 这个算法用了一个巧妙的方式剔出了每次已经取过的数。

  • 相关阅读:
    单词统计
    意见汇总
    项目评审结果
    注册表键值
    C++ 创建快捷方式
    XPosed 示例
    直播流程
    C++隐藏任务栏图标
    C++ 屏幕录制
    DUILIB UI创建过程
  • 原文地址:https://www.cnblogs.com/dawn/p/2968883.html
Copyright © 2011-2022 走看看