均匀分布随机数

场景描述

均匀分布是指整个样本空间中的每一个样本点对应的概率(密度)都是相等的。根据样本空间是否连续,又分为离散均匀分布和连续均匀分布。均匀分布可以算作是最简单的概率分布。从均匀分布中进行采样,即生成均匀分布随机数,几乎是所有采样算法都需要用到的基本操作。然而,即使是如此简单的分布,其采样过程也并不是显然的,需要精心设计一定的策略。

知识点

概率统计,线性同余

问题 如何编程实现均匀分布随机数生成器?

难度:★☆☆☆☆

分析与解答

首先需要明确的是,计算机程序都是确定性的,因此并不能产生真正意义上的完全均匀分布随机数,只能产生伪随机数(伪随机数是指这些数字虽然是通过确定性的程序产生的,但是它们能通过近似的随机性测试)。另外,由于计算机的存储和计算单元只能处理离散状态值,因此也不能产生连续均匀分布随机数,只能通过离散分布来逼近连续分布(用很大的离散空间来提供足够的精度)。

一般可采用线性同余法(Linear Congruential Generator)来生成离散均匀分布伪随机数,计算公式为

image.png

(8.1)

也就是根据当前生成的随机数xt来进行适当变换,进而产生下一次的随机数xt+1。初始值x0称为随机种子。式(8.1)得到的是区间[0,m−1]上的随机整数,如果想要得到区间[0,1]上的连续均匀分布随机数,用xt除以m即可。

可以看出,线性同余法得到的随机数并不是相互独立的(下一次的随机数根据当前随机数来产生)。此外,根据式(8.1),该算法最多只能产生m个不同的随机数,实际上对于特定的种子,很多数无法取到,循环周期基本达不到m。如果进行多次操作,得到的随机数序列会进入循环周期。因此,一个好的线性同余随机数生成器,要让其循环周期尽可能接近m,这就需要精心选择合适的乘法因子a和模数m(需要利用代数和群理论)。具体实现中有多种不同的版本,例如gcc中采用 的glibc版本:

image.png

但不管怎样,由计算机程序实现的随机数生成器产生的都是伪随机数,真正的随机数只会存在于自然界的物理现象中,比如放射性物质的衰变,温度、气流的随机扰动等。有一些网站可以提供基于大自然的随机现象的随机生成器,有兴趣的读者可以尝试一下。图8.1是通过大气噪声来产生随机数,可以说是“货真价实”的真随机数生成器了。

image.png

面试时,面试官还可能会针对线性同余法进行深入提问,比如,线性同余法中的随机种子一般如何选定?如果需要产生高维样本或大量样本,线性同余法会存在什么问题?如何证明上述线性同余发生器得到的序列可以近似为均匀分布(伪随机数)?

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1210

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值