伪随机探究

伪随机探究

随机数发生器

我们很多的算法中需要随机数,因此必须有一种方法来产生它。同时我们也了解计算机的随机算法是一种伪随机。提前生成好随机序列,根据不同的随机种子函数,生成不同的随机数。

产生随机数最简单的方法就是线性同余数发生器。它于1951年有lehmer首先提出,对于一个Xi满足

                X(i+1)=AXimodM;

为了开始这个序列,必须给Xi一个初值,这个值就叫种子(seed)。在这里插入图片描述
人们可能会想到要假设所有的机器在它们标准的库中都有一个至少像不溢出随机数生成器的程序,但很遗憾,情况并非如此。许多库中的发生器基于函数

                Xi+1=(Axi+C)mod2^B;

其中B的选取要匹配机器整数的比特位数,而C是奇数。事实上,其他随机数发生器要比不溢出随机数生成器所提供的随机数发生器的循环(周期)小得多。这些发生器对于需要长的随机数序列的情况是不合适的。Java库和UNIX的 drand48 函数使用这种形式一个发生器。不过,它们使用48比特线性同余发生器并且只返回高32比特位,这样,避免了在低阶比特位上的循环问题。
其中用到的常数是A=25 214 903917,B=48以及C=11.
因为Java提供64比特的long型整数,所以用标准 Java实现一个基本的48比特随机数发生器用一页代码就可以展示。它比31比特随机数发生器略慢一点,但慢得不多,却得到了一
个明显长得多的周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值