Top Menu

在PHP中生成随机数

何为“随机”

当我们讨论“随机”数的时候,我们通常讨论的都是它的两个基本属性:不可预测和偏差。这两个属性关系密切,但是却又有细微的差别。不可预测意味着一个随机数在统计意义上不能由一些之前生成的值而推测出下一次将会生成的值。而偏差意味着在统计意义上不能通过之前生成值的分布情况推测下一个可能生成的值。

不可预测

首先,让我们先开始就断定这个世界上并没有真正意义上的随机性。这意味着只要我们从源头获得足够多的信息,所有的随机性都是可以确定的(至少从某种角度来说)。即使是传统意义上的“随机”事件,例如如果你掌握了足够多的原子的衰变信息(元素中每个原子的确切位置和能量)那么原子的放射性衰变都可以看作是确定的。当然,根据量子理论,你不可能知道所有这些信息。但是就算量子理论也是基于统计方程式的。所以即使你遇到不能精确的预知确切值的时候,你也可以尝试通过统计学来试着猜测一下。

接着往下推理,所有的随机事件之所以不可预测的原因就是因为生成这个随机事件的机制的信息丢失。当然这并不意味通过隐藏信息就可以安全的获得随机性(虽然这样也可以)。而是意味着当产生这个随机数的机制的相关信息什么都不知道的时候(从理论上来说不可能一点都不知道),要准确的猜测下一个会出现的随机值是不可能的。

让我们来举个例子。如果我给你一组数字“8,8,1”,你能猜出这组数字的下一个数字么?答案一定是不能。但是如果我告诉你这组数字是从PI的前762个数字中生成的,那么下一个数字立即就变得可以预测了。如果我又给了一个数字7,你马上就可以知道这个数字之后会是“4,8,8,1,5”。所以,当分布是随机的时候,通过观察一组数字就可以知道这组数字的生成算法,你就可以预测出下一个数字了。

所有的随机事件都可以归于这种信息不对称。只要能够获得足够多的往次随机事件并推测出它的算法,那么理论上你就可以比原来什么都不知道的情况下更大程度的预测到下一个值。一个好的随机数生成机制就是通过隐藏这种内部信息(不暴露种子以及隐藏背后的量子力学原理——放射衰变的例子)。

偏置

 

http://blog.ircmaxell.com/2011/07/random-number-generation-in-php.html

There are no comments yet

  • Hello, guest

Powered by WordPress. Designed by WooThemes