1、前言
我们对于随机数肯定不陌生,随机数早已成为我们经常要用到的一个方法,比如用于密码加密,数据生成,蒙特卡洛算法等等,这些都需要随机数的参与。那么我们的电脑是怎么才能够产生随机数的呢?接下来就带领大家一起来学习一下(这也可能成为一道面试题哟)
2、随机数的概念
我们先来看一下随机数的定义:
在连续性随机变量的分布中,最简单而且最基本的分布是单位均匀分布。由该分布抽样的简单字样称为随机数序列,其中每一个体称为随机数。
由随机数序 的定义可知,ξ1,ξ2,...是相互独 且具有相同单位均匀分布的随机数序 .也就是 说,独 性、均匀性是随机数必备的两个特点。
3、随机数的产生方法
产生随机数的方法有很多,在本文中,将主要介绍以下几种随机数产生方法:
- 线性同余法
- 平方取中方法
- 梅森旋转随机生成法
4、线性同余法
什么是同余:同余的意思就是a和b同时被M除后得到的余数相等。
线性同余方法基于以下的式子不断迭代产生随机数序列:
我们可以看到上面的式子是一个递推公式,X0被称为初始值,也就是我们的种子。A是系数,C是增数,而M是模数,也即循环周期。
C、M、A是影响生成随机数质量的重要因素。不同语言中三个数的设定会有不同。
一般来说,要想使用线性同余法产生高质量的随机数,MAC要满足如下的条件:
M:对于随机数的生成而言,随机数序列的周期越长,它就越能够具有在[0,1]上均匀分布及相互独立的性质。M越大周期就越大,所以我们使得M接近于计算机能表示的最大的整数,可以选择2^32作为M的值。
A:对于乘数而言,满足以下两点,1.对于M的任何一个质因子P,a-1能被P整除.2.如果4是M的因子,则a除以4 余1
C:增量C要和M互质,及二者公约数只有1。
线性同余法的缺点
生成随机数周期太短
如果被知道一定长度的序列就能破解出所有的随机数生成序列。
5、平方取中方法
平方取中方法的思路是:
- 选取一个m位数N作为SEED种子,然后做平方运算得到T=N*N。
- 判断T的长度,如果不足2*m位的话,用0补齐。
- 取位数补齐到2m后的T的中间m位作为随机数
举个简单的例子,我们想得到0~100之间的随机数,也就是m=2。比如我们的seed为67,67的平方为4489,我们可以得到随机数48,随后以48为seed,又可以得到随机数30,依次类推。
平方取中方法的缺点
~周期很短
~分布并并不均匀
但是它因为计算迅速所以也常被用于随机数据的生成,用于试验等地方。
6、梅森旋转随机生成法
看到怀疑人生,理解不能
http://blog.csdn.net/touch_dream/article/details/68948708