随机数与伪随机数

1407 篇文章 2 订阅
1277 篇文章 12 订阅

随机数

  随机数是专门的随机试验的结果。

 

  在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡罗模拟法计算的时候等等。

 

  产生随机数有多种不同的方法。这些方法被称为随机数发生器。随机数最重要的特性是:它所产生的后面的那个数与前面的那个数毫无关系。

  真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。


  在实际应用中往往使用伪随机数就足够了。这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。计算机或计算器产生的随机数有很长的周期性。它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。 

  在真正关键性的应用中,比如在密码学中,人们一般使用真正的随机数。

 

伪随机数

 

  首先需要声明的是,计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种理想的随机数,即使计算机怎样发展,它也不会产生一串绝对随机的随机数。计算机只能生成相对的随机数,即伪随机数。

 

  伪随机数并不是假随机数,这里的“伪”是有规律的意思,就是计算机产生的伪随机数既是随机的又是有规律的。怎样理解呢?产生的伪随机数有时遵守一定的规律,有时不遵守任何规律;伪随机数有一部分遵守一定的规律;另一部分不遵守任何规律。比如“世上没有两片形状完全相同的树叶”,这正是点到了事物的特性,即随机性,但是每种树的叶子都有近似的形状,这正是事物的共性,即规律性。从这个角度讲,你大概就会接受这样的事实了:计算机只能产生伪随机数而不能产生绝对随机的随机数。(严格地说,这里的计算机是指由冯诺依曼思想发展起来的电子计算机。而未来的量子计算机有可能产生基于自然规律的不可重现的“真”随机数)。


软件常用的产生随机数的方法


  在软件上计算机常用的产生随机数的算法为线性同余算法,即使用下面的公式递推产生不同的随机数.


  Ni+1=(A* Ni + B)%  M          其中i = 0,1,…,M-1


  c语言中的rand()函数即是通过该公式递推产生随机数的,常用当前的系统时间为种子。


  通过该公式可以看出,产生的随机数是明显有规律可寻的,每一个随机数都是在前一个随机数的基础上通过公式计算得来的,所以通过该方法得来的随机数的随机性很差。当然,适当的选取A、B和M,能够产生一定看似有随机性的随机数字。N就是随机种子。


  所以为了提高计算机产生的随机数的随机性,在这里我们通过收集系统随机的物理量来填充随机数缓冲池,比如键盘敲击时间、鼠标点击时间、cpu运行参数等,通过这些方法得到的随机数具有很高的随机性。可达到真随机数的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值