其实不光在Excel中,很多其他的程序语言都会提供随机数生成器,所以本文不会局限在Excel中,而是从算法的角度去谈随机数生成器的问题。
首先,什么是随机数呢?一个不太严格的说法,就是:后面的数,与全面的数没有什么关联。这也就引出了一个判断数列随机性的一个方法——计算线性相关性。这里不具体讨论线性相关性到底怎么计算,大体来说,就是假设在一个数列中,后面的数与前面的数有线性的函数关系,进而,可以计算这个函数的一些系数,作为相关系数。
在很多算法中,会使用「线性同余法」生成「伪随机数」。线性同余法的基本方法如下:
x’ = (a x + b) (mod N)
在这个算法中,先对初始值x进行线性变换,即a x + b。然后,对它取模,即后面的mod N。在这个算法中,a、b、N的值尤为重要。一个著名的随机数生成器16807生成器,其名称中的16807,对应的就是a=16807,N=2147483647。可以产生随机性还不错的生成器。
随机数生成器还有很多其他的方法,例如使用30号基础元胞自动机(ECA Rule 30)进行随机数生成的。它从一串初始序列开始,使用30号元胞自动机规则进行演化,将得到的序列再转化为数值,也可以得到非常好的随机性。这个算法被用在Mathematica的随机数生成器之中。
可以看到,这两个算法虽然不同,但都有一个「初始值」、「初始序列」。这就是所谓的「随机数种子」,是伪随机算法初始的参数,通常需要外界提供。
本文来自投稿,不代表天一生活立场,如若转载,请注明出处:http://tiyigo.com/it/37317.html