一道随机数题目的求解
这篇探讨了一个经典的随机数构造问题:如何基于均匀的1~5随机数函数,实现均匀的1~7随机数函数。作者从直观的思路入手,展示了通过二维数组映射与拒绝采样的核心方案,并提供了对应的Java实现。 然而,文章的价值不止于算法本身。作者在千万次数据测试中,意外发现生成结果的分布并不均匀,某些数字的出现频率显著偏高。经过深入排查,问题被追溯到随机数种子的精度上——即使使用纳秒级时间戳,快速连续调用时获取的种子值仍可能相同,导致随机序列重复,进而破坏了分布的均匀性。 文章通过对比实验(如将种子改为毫秒级、增加调用间隔)验证了这一猜想,揭示了用“小随机”合成“大随机”时,底层伪随机数生成器的缺陷会被放大。这对于理解拒绝采样的实际应用边界,以及随机性工程实现中的细节陷阱,提供了非常具体的参考。