牛刀小试(02)——生成不重复的随机数
2016-01-08 19:50
190 查看
牛刀小试(02)——生成不重复的随机数
标签: 牛刀小试1.题目描述
要求生成一个随机序列,要求其中的数不能重复。2.思路解析
C/C++提供了生成随机数的函数rand(),不过有两个问题
该函数生成的是伪随机数
该函数生成的随机数有可能重复
之所以是伪随机数,是因为
rand()是根据一个初始值来计算“随机数”的,如果初始值一样,则生成的“随机序列”也是一样的,所以可以通过设定随机种子来生成“真-随机数”
至于随机数不能重复,我们可以生成一个不重复的序列,假设数组
a满足该条件,先从下标
[1,n-1]中随机取一个下标j,让
a[0]和
a[j]交换;然后再从下标
[2,n-1]中随机取一个下标
j,让
a[1]和
a[j]交换;……;然后再从下标
[i+1,n-1]中随机取一个下标
j,让
a[i]和
a[j]交换;……;直到剩下
a[n-1]为止。
3.代码解析
#include <iostream> #include <fstream> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { int a[10000]; for (int i=0; i<10000; i++)//生成不重复序列 a[i]=i; srand((int)time(NULL));//设定随机数种子 for (int i=10000; i>0; i--)//为了写着方便,倒序交换 { int j = rand()%i; int temp = a[i-1]; a[i-1] = a[j]; a[j] = temp; } ofstream file("data.txt");//保存数据,以便测试 for (int i=0; i<10000; i++) file<<a[i]<<"\t"; file.close(); return (0); }
4.数据查看
使用python把前500个数据画成散点图,如下:使用python把前4000个数据画成散点图,如下:
总体看来没有明显的间隔和聚集区域,直观上这些数据是随机的,当然可以使用数学方法检测数据的随机性(游程检验),感兴趣的同学可以试试
相关文章推荐
- 压缩感知(I) A Compressed Sense of Compressive Sensing (I)
- slf4j-log4j12-1.5.8完整例子
- 【数据结构SPLAY】splay区间翻转,区间和查询,区间插入,区间删除,区间修改
- 如何给calendar4.4 日历月视图添加左右滑动的功能
- C语言实现全排列
- linux下一些软件的安装
- Java 除法 保留 n 为小数
- HDOJ 1102 Constructing Roads
- 微信卡券核销
- 机器学习相关——协同过滤
- java 开关
- 深度学习和浅层学习 Deep Learning and Shallow Learning
- 喷水装置(一) OJ 6
- BZOJ 4396: [Usaco2015 dec]High Card Wins|贪心
- Android平台Camera实时滤镜实现方法探讨(十)--代码地址以及简介
- hadoop源码的简单解读
- 推荐系统绝对不会向你推荐什么
- C++ string substr()
- 10 归并两个有序链表
- 【Android】ViewPager实现Tab布局