随机数

来源:互联网 发布:高礼英才计划 知乎 编辑:程序博客网 时间:2024/05/20 16:42

随机数的定义

This sequence is random if the quantity of information it contains – in the sense of Shannon's information theory – is also infinite.In other words, it must not be possible for a computer program, whose length is finite, to produce this sequence.

根据香农信息理论,如果一个序列包含的信息量是无穷时,那么这个序列就是随机的。换句话说,对于一个字符有限的计算机程序来说,是不可能产生这样的序列的。

不过这个定义看起来没有什么意义,因为在现实中我们不可能找到一个无限序列。

在现代我们通常使用下面两个定义来描述什么是随机数:

1,a sequence of random numbers is a sequence of independent numbers with a specified distribution and a specified probability of falling in any given range of values.

随机序列中的所有数字之间是独立的,同时每个数字落在给定范围内的可能性是一定的,相同的。即数字的分布是均匀的。

2,it is a sequence that has the same statistical properties as random bits, is unpredictable and cannot be reliably reproduced.

随机数符合统计学属性,同时是不可预测并无法可靠的被重新生成的。


而检查一个数字是否是随机数也是一件很困难的事--只能通过检查这个数是否符合统计学属性,即其中的每个数出现的概率是完全相同的。


true random numbers vs. pseudo random numbers真随机数和伪随机数

有两种主要的产生随机数的方式。一种是测量一些随机的物理现象,然后对在测量过程中可能的倾向进行补偿。例如扔硬币,我们可以找一个人反复扔硬币来产生一个随机序列,并且考虑到一个硬币可能重量不均匀导致更容易正面着地,使用更多的硬币来做实验。这个过程就是一种对可能存在的倾向的补偿。

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

另一种方式就是用某种算法产生一个长的,看起来随机的序列,但是实际上完全依赖于一个较小的初始值,又称为种子seed或钥匙key。

后者被称为伪随机数发生器,其产生的数字都是伪随机数。


完全用算法产生的随机数都是伪随机数。这些数是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。计算机或计算器产生的随机数有很长的周期性。它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征。

一个例子: 英特尔cpu自带了一个随机数发生器。它使用cpu当前的温度作为生成随机数的一个因素(物理方式),因此是真正的随机数。


关于随机数的wiki:

http://en.wikipedia.org/wiki/Random_number_generation