电脑在制造数列时需要特定的程序及算法。由于随机数不存在决定下一个数字的规律,因此,电脑按照特定程序等规律生成的数列不能算是真正意义上的随机数。 但在实际应用中,它们可以替代真正的随机数,或者更恰当的说法是,它们是可以被当成随机数的伪随机数。 电脑生成的伪装随机数 首次研究伪随机数的是电脑之父、匈牙利数学家约翰冯诺伊曼(JohnvonNeumann,19031957)。冯诺伊曼研究的平方取中法是最早的伪随机生成法。 约翰冯诺伊曼,制造了现代计算机的原型。他的研究影响了从电脑游戏理论到原子弹开发等广泛领域。 以下是冯诺伊曼研究的最早的伪随机数生成算法平方取中法和现在依然在使用的线性同余法。 平方取中法(4位数的情况下) 取一个4位数作为种子(随机数的种子,在例子中为有下划线的1234)。种子进行平方操作后得到一个八位数(不足八位的在前面用0补足),取这个八位数的中间4位(5227)作为第一个伪随机数。然后将这个数(5227)按照相同的操作得出下一个伪随机数(3215)。重复以上操作不断得出伪随机数的方法称为平方取中法。 线性同余法(4位数的情况下) 将种子(例子中为有下划线的1234)乘以事先决定好的的定数(例子中为567),然后加上另一个定数(例子中为89)得到一个数字(699767)。将这个数字除以一个定数(例子中为9773),然后求余数。把这个余数(1657)作为第一个伪随机数。将这个1657按照相同操作得到下一个伪随机数(2146)。重复以上操作不断得出伪随机数的方法称为线性同余法。在加式中使用的定数为0时称为乘同余法。 在冯诺伊曼之后又开发了以线性同余法为首的各种伪随机数生成法。伪随机数的好坏取决于它和真正的随机数的接近程度以及自身的生成速度。目前,公认最好的伪随机数生成算法是全世界程序员广泛使用的、由日本广岛大学松本真教授和日本山形大学西村拓土副教授于1998年研发出的梅森旋转算法。要理解这个算法需要矢量和矩阵等数学知识,因而在此不做详细介绍,这一算法巧妙利用了梅森素数的特殊性质。 梅森旋转算法 下图的三维空间内有(21)个点,每个点的坐标来自使用线性同余法生成的3个伪随机数。从这些点上可以看到规则的纹样或间隙。右图则是使用梅森旋转算法得到的点配置相同个数的结果,并不能看出有规律的纹样或间隙。 当然,使用这种方法生成的随机数也只是伪随机数,并不是真正的随机数。伪随机数之父冯诺伊曼曾说过:使用公式制造随机数,从某种意义上来说是犯罪。 转载内容仅代表作者观点 不代表中科院物理所立场 如需转载请联系原公众号