
随机数算法主要包括以下几种:
LCG通过递推公式 $X_{n+1} = (aX_n + c) mod m$ 生成序列,其中 $a$ 是乘数,$c$ 是增量,$m$ 是模数。其核心原理是利用模运算将数值限制在特定范围内,通过递推关系生成伪随机序列。优点是计算速度快、实现简单,但存在周期较短(通常小于 $m$)、低位随机性差的问题,实际应用中常取高位输出以提高随机性。
该算法基于624维状态数组,通过移位和异或操作生成随机数,周期长达 $2^{19937}-1$,且分布均匀。作为Python random 模块的默认算法,它适合科学计算和大规模模拟,但状态空间大导致内存占用较高,且生成的随机数可预测,不适用于加密场景。
将当前数平方后取中间部分作为下一个数(如4位数1234平方为1522756,取中间4位5227)。缺点是容易陷入短周期或退化到0,尤其在初始值选择不当时,序列可能快速收敛到固定值,导致随机性丧失。
通过位运算(异或、移位)快速生成随机数,典型公式如 $x leftarrow x oplus (x ll a)$。特点是速度快、周期长(可达 $2^{32}-1$ 或更高),且实现简单,但随机性质量可能低于梅森旋转算法,适用于对性能要求高但安全性要求低的场景。
又称统计模拟法,通过建立概率统计模型、抽样模拟和统计分析,使用随机数(或伪随机数)解决计算问题(如积分计算、优化问题)。核心是通过大量随机样本逼近真实解,适用于复杂系统或解析解难以获得的场景,但结果具有统计误差。
用于生成 $[0,1)$ 区间内均匀分布的随机数,是数值计算中的经典方法。乘同余法通过递推公式 $X_{n+1} = (aX_n) mod m$ 生成序列,混合同余法在此基础上增加增量项($X_{n+1} = (aX_n + c) mod m$),以提高随机性和周期长度。
拉斯维加斯算法(Las Vegas)和蒙特卡罗算法(Monte Carlo)属于广义随机化算法。前者要么给出正确答案,要么不输出结果(如随机化快速排序);后者通过随机采样得到近似解(如数值积分),结果具有概率性,但可通过增加样本量提高精度。
