伪随机数生成器(PRNG)/信息指纹

PRNG: Pseudo-Random Number Generator

随机数是指一组不能被预测的数字或符号序列,这些数字和序列是完全偶然产生的[7],即随机数是客观世界不确定性的理论抽象[8]。随着概率论及数理统计等学科的发展,研究人员对随机数的产生机理等逐渐明晰。

目前,所有在用的成熟计算机设备均采用冯·诺依曼结构设计。冯·诺依曼机主要由逻辑运算单元、控制器、存储单元、输入输出设备和其间相关总线组成,主要特点是:
① 程序经编译后形成固定顺序的指令,以二进制代码的形式存放在存储器中;
② 所有的指令都是由操作码和地址码组成;
③ 指令按照存储的顺序调入内部的堆栈,并进行调用;
④ 以逻辑运算单元和控制器作为计算机处理的中心,并依次执行指令。
依据冯·诺依曼架构设计的计算机在不借助于外部硬件,仅从软件自身角度,真实的随机数是无法实现的。因为冯·诺依曼机自身的架构决定了这种机型只能做“按存储指令的顺序来执行具体指令”的确定性行为

来源:对伪随机数生成算法的随机性评价方法的研究 _ http://qikan.chaoxing.com/detail_38502727e7500f267b8b9554bdbce4f19c147c75cd1f218d1921b0a3ea255101fc1cf1fbb4666ae64cf4c16404fcf2f6ebd16daa6c8149c773decdec835f9ed28fd4a2be4d5cb4c39cbfe956cd0f7324

伪随机数如何产生?

1.观察现实中的真随机过程,记录随机数-真随机数
这在假设验证中往往不简便,不容易操作
2.利用数学公式方法定义一个序列,根据序列值,来模拟取代随机数。-伪随机数
这里便要注意伪随机数都是有周期的

一个相关的视频:b站转载 很好的视频,未能翻译,是个遗憾

经典算法:

平方取中法(Middle-square method)/冯·诺伊曼取中法

截图
周期性越明显(周期越短),显得越“不随机了”
来源:https://www.bilibili.com/video/BV1kW411K7C7?from=search&seid=14899122793919953867
转载自:https://www.youtube.com/watch?v=C82JyCmtKWg

百度百科中,也有详细说明,配合了模数,将随机数化到[0,1]区间

linear congruential generator 线性同余算法

其中A,B,M是产生器设定的常数。
LCG的周期最大为M,但大部分情况都会少于M。
使其达到最大周期,存在一定条件如下:

B,M互质;

M的所有质因数都能整除A-1

M是4的倍数,A-1也是;

A,B,N_{0}都比M小;

A,B是正整数。

https://zh.wikipedia.org/wiki/%E7%B7%9A%E6%80%A7%E5%90%8C%E9%A4%98%E6%96%B9%E6%B3%95

伪随机数的[0,1]区间化

适合于观察总体趋势
来源:https://www.bilibili.com/video/BV1kW411K7C7?from=search&seid=14899122793919953867
转载自:https://www.youtube.com/watch?v=C82JyCmtKWg

信息指纹(《数学之美》 吴军)

信息指纹:就是提取一个信息的特征,通常是一组词或者一组词+权重,然后根据这组词调用特别的算法,例如MD5,将之转化为一组代码,这组代码就成为标识这个信息的指纹在加密(MD5),信息压缩(服务器存储大量的URL链接),处理(原创与盗版检验)中应用