建造无周期随机数组
我们知道随机函数形成的随机数组都是有周期的。这是因为生成的数组来自同样的计算公式,种子的值域是有限的,所以函数值也是有限的。
要建造没有周期的随机数组是很容易的,例如你要建造一个长度为 N的数组,可以找一个周期大于 N各方面性能都不错的随机函数,让随机函数产生 N个数,组成数组即可。
有时我们不愿意让别人知道数组是如何产生的。而上面的方式,如果知道随机函数、知道数组的结构就可以通过试验建造相同的数组,从而完全掌握了你的数组,这是你不希望的。
你可以这样:另找一个随机函数对你的数组进行随机排序,而随机函数的种子来自真随机数,还不放心可以用多个随机函数多做几次排序,这样要想建造同样的数组成功的概率趋于零。
你也可以凭空建造一个数组,以字节数组为例,你先用循环做一个顺序排列的数组,也就是0,1,..,254,255,0,1,...254,255,...共有 N个元素,然后用随机函数对其进行随机排序,也可以建造没有周期的数组。
实际上随机数组的真伪是相对概念,即便是来自物理现象的真随机数组一经公布也不再是真随机数组了,而来自随机函数的数组你不知道其来龙去脉对你来说也是真随机数组。