伪随机数算法
计算机不可能产生真正的随机数,所有的随机数都是伪随机数,通过算法实现,随机表示的是产生的数据符合一定的分布,在统计意义上是随机的,如果知道原理那么就能预测。
unix产生随机数
unix内核中的随机数发生器:
- 通过收集非确定性的设备事件来作为随机种子产生随机数;
- 比如说,鼠标的点击事件等;
-
线性同余
递推公式:
其中:为常数
特点: 产生的随机数符合均匀分布;
- 如果周期为M,那么的数字,依次取一次,也即是说每个数字的出现概率相同;
- 随机数周期小于等于;
如果要想LCG周期最大(达到M):
- 互质;
- M所有质因数的积能整除A-1;(存在情况,分解过程中,可能存在多个相同质因子,此处只取一个)
- 如果M为4的倍数,那么A-1同样如此;
- (种子)都小于M;
- 为正整数;
平方取中
思想:
将一个数(有m位)平方之后,最高为补0到2m位,然后选取中间的m位作为随机数,并以此位产生下一位随机数。
原数为m位,那么将会是m+1位,所以驱魔最终的结果函数被限定在m位;
梅森旋转算法
梅森数
线性反馈移位寄存器
该电路有n级触发器和一些异或门组成;
抽头:影响下一个状态的比特位叫做抽头;(下图中的4和3位为抽头)
反馈多项式M(x):由抽头决定,比如下图中的为
要想得到最大周期:反馈多项式是一个本原多项式;- 本原多项式:不能因式分解
算法特点: