概率算法理论1:随机数的产生

来源:互联网 发布:淘宝拍卖车怎么看到 编辑:程序博客网 时间:2024/05/19 20:40

概率算法中常常会用到随机数。一个好的随机数应该是随机,均匀,独立的。但是计算机受限于字长,计算速度以及算法本身的确定性,无法产生真正意义上的随机数。但是可以利用数学公式产生出符合概率统计特征的伪随机数。

历史上也有很多产生伪随机数的算法。下面介绍一些。

1 最早的称为平方取中法。方法是对一个n位二进制数求平方,然后对平方数取中间的n位,一直这样步进。后来因为这个数列均匀性并不太好,存在小数字偏倚的特点。有人提出了乘积取中法,就是不是对上一个元素做平方,而是上一个元素乘以上上一个元素取中。这些算法的实现比较简单,缺点是随机性依赖于初始值,数列周期比较短。

2 后来出现了针对二进制计算机特点的移位法。具体操作是,对一个元素x0,左移7位得到x01,右移7位得到x02,x01和x02进行指令相加得到x1,一直这样步进。这种算法缺点同样是随机性依赖初始值(不能设置的太小),随机周期比较短。

3 现在计算机中普遍应用的技术是同余法。基本的递推关系为Ij+1 =Ij * a+c  (mod m),若c不等于0,a不等于1称为混合同余法(c等于0:乘同余法,a=1:加同余法,很直观),这种方法应用的比较多。这个数列的周期也很大的依赖于a和c参数的选取。引入一个结论:

混合同余数列达到周期为M的充要条件:1)c和M互素 2)对于M的每一个素因子p,a-1为p的整数倍 3)若M为4的倍数,那么a-1为4的倍数。

由上述结论可知:混合同余数列达到最大周期的条件为:在2进制的计算机上,若M=2^s,取a=4*q+1,c=2*p-1;其中q和p取任意正整数。很容易理解。常用的伪随机数发生器采用的同余数列是:Ij+1= ( 25173 * Ij + 13849 ) % 65536,产生16位的随机数(short型)的。

 

原创粉丝点击