博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在一个整数区间里产生一组不重复的随机数
阅读量:4317 次
发布时间:2019-06-06

本文共 416 字,大约阅读时间需要 1 分钟。

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

问题描述:如何在一个整数区间内(例如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. 这个算法用了一个巧妙的方式剔出了每次已经取过的数。

 

转载于:https://www.cnblogs.com/dawn/archive/2013/03/19/2968883.html

你可能感兴趣的文章
Alpha 冲刺 (7/10)
查看>>
一款jQuery打造的具有多功能切换的幻灯片特效
查看>>
SNMP从入门到开发:进阶篇
查看>>
@ServletComponentScan ,@ComponentScan,@Configuration 解析
查看>>
unity3d 射弹基础案例代码分析
查看>>
thinksns 分页数据
查看>>
os模块
查看>>
LINQ to SQL vs. NHibernate
查看>>
基于Angular5和WebAPI的增删改查(一)
查看>>
windows 10 & Office 2016 安装
查看>>
最短路径(SP)问题相关算法与模板
查看>>
js算法之最常用的排序
查看>>
Python——交互式图形编程
查看>>
经典排序——希尔排序
查看>>
团队编程项目作业2-团队编程项目代码设计规范
查看>>
英特尔公司将停止910GL、915GL和915PL芯片组的生产
查看>>
团队编程项目作业2-团队编程项目开发环境搭建过程
查看>>
Stax解析XML示例代码
查看>>
cookie
查看>>
二级图片导航菜单
查看>>