03.03 是否存在一种算法可以随机生成一个自然数?

颜焕原


在现在的计算机系统中,是无法产生「真」随机数的。这是因为,当前的计算机的各种算法,都是确定性的——输入是某某,则输出必然是p(某某),是一一对应的关系。

很多人可能会说:不对!我每次打开XX游戏,里面的内容都有差异。其实这种看法是片面的。不同的时候打开程序,本身就是不同的「输入」。因为很多随机算法,都会把系统时间当作随机数种子,作为一个初始条件,然后再输出很多看似随机的序列。

既然「算法」本身,特别是CPU是确定的,那如何去产生真随机数呢?有的读者可能会想到:直接加入一个元件,专门产生真随机数不就可以了吗?确实,很多程序确实就会用硬件来产生随机数。比如Linux系统中,就会收集计算机的温度、电压,来当作随机数种子。

为什么计算机的温度、电压,就可以用来产生真随机数呢?这是因为,温度、电压的浮动,背后是复杂的物理过程。而物理过程,特别是微观层面的物理,包含了非常大的随机成分。比如说温度,有的涨落可能完全就是随机的。更不用说,这些物理现象的背后,实际都包含了量子过程,而很多量子过程,是全然随机的。进而,使用这些数据的随机数生成器,可以看作是真随机的。

而要求更高的,则会使用专门的量子随机数生成器。比如说,可以使用半反射镜,以及单光子,来直接生成随机二进制序列。


章彦博


算法生成的数都是伪随机数的,这点从算法的定义就可以看出,之所以叫随机数是因为随机数的种子是时间戳。时间戳不一样,通过算法生成的数字自然就不一样了。如果你说的是这种伪随机数,是有很多算法可以生成的,就看你想用编程语言。


分享到:


相關文章: