![3e3e0328cd94b52750d03591898b91e0.png](https://img-blog.csdnimg.cn/img_convert/3e3e0328cd94b52750d03591898b91e0.png)
均匀分布是指整个样本空间中的每一个样本点对应的概率(密度)都是相等的。根据样本空间是否连续,又分为离散均匀分布和连续均匀分布。均匀分布可以算作是最简单的概率分布。从均匀分布中进行采样,即生成均匀分布随机数, 几乎是所有采样算法都需要用到的基本操作。然而,即使是如此简单的分布,其采样过程也并不是显然的,需要精心设计一定的策略。
如何编程实现均匀分布随机数生成器?
首先需要明确的是,计算机程序都是确定性的,因此并不能产生真正意义上 的完全均匀分布随机数,只能产生伪随机数(伪随机数是指这些数字虽然是通过 确定性的程序产生的,但是它们能通过近似的随机性测试)。另外,由于计算机的存储和计算单元只能处理离散状态值,因此也不能产生连续均匀分布随机数, 只能通过离散分布来逼近连续分布(用很大的离散空间来提供足够的精度)。
一般可采用线性同余法(Linear Congruential Generator)来生成离散均匀分布伪随机数,计算公式为:
![613697ba8e6053299c2a6681c8d04a96.png](https://img-blog.csdnimg.cn/img_convert/613697ba8e6053299c2a6681c8d04a96.png)
也就是根据当前生成的随机数
可以看出,线性同余法得到的随机数并不是相互独立的(下一次的随机数根 据当前随机数来产生)。此外,根据线性同余法的计算公式,该算法最多只能产生m个不同的 随机数,实际上对于特定的种子,很多数无法取到,循环周期基本达不到m。如果 进行多次操作,得到的随机数序列会进入循环周期。因此,一个好的线性同余随 机数生成器,要让其循环周期尽可能接近m,这就需要精心选择合适的乘法因子a 和模数m(需要利用代数和群理论)。具体实现中有多种不同的版本,例如gcc中采用 的glibc版本:
![174d58e92aeb2cb6ee58636bd1c5fb4a.png](https://img-blog.csdnimg.cn/img_convert/174d58e92aeb2cb6ee58636bd1c5fb4a.png)
但不管怎样,由计算机程序实现的随机数生成器产生的都是伪随机数,真正 的随机数只会存在于自然界的物理现象中,比如放射性物质的衰变,温度、气流 的随机扰动等。有一些网站可以提供基于大自然的随机现象的随机生成器,有兴 趣的读者可以尝试一下。下图是通过大气噪声来产生随机数,可以说是“货真价 实”的真随机数生成器了。
![348d8e9a9f7d48a5a8cd4cb32322b180.png](https://img-blog.csdnimg.cn/img_convert/348d8e9a9f7d48a5a8cd4cb32322b180.png)
面试时,面试官还可能会针对线性同余法进行深入提问,比如,线性同余法 中的随机种子一般如何选定?如果需要产生高维样本或大量样本,线性同余法会 存在什么问题?如何证明上述线性同余发生器得到的序列可以近似为均匀分布 (伪随机数)?