如何检测C++随机引擎的整个周期已被消耗

How to detect that the entire period of C++ random engine has been consumed

本文关键字:周期 引擎 何检测 检测 随机 C++      更新时间:2023-10-16

我想写一个小型(快速)C++程序,它本质上"检测"std::minstd_rand0引擎的整个周期都已消耗掉。换句话说,我想检测序列何时重复(并测量序列重复所需的时间)。我不在乎目标分布(它可以是均匀的)。

我该怎么做有什么想法吗?我考虑的一个选项是创建两个std::array变量。在第一个std::array中,我将存储例如由std:minstd_rand0返回的10000个第一伪随机变量。然后,我将用10000个变量的连续块填充另一个std::array,并在每次通过10000个变量后比较2个数组的内容。我认为,一旦两个数组相等,整个周期就已经结束了。

这种做法明智吗?

标准随机数引擎可以相互比较——当且仅当它们具有相同状态时,它们的比较是相等的。

因此,您可以很容易地使用以下代码来测量周期:

  1. 创建两个默认构造的生成器
  2. 执行从其中一个生成器生成数字并递增计数的循环
  3. 直到两个生成器再次比较相等

至少在我对std::minstd_rand0的快速测试中,我得到了的结果

 2147483646

不用说,std::minstd_rand0std::mt19937更实用(举一个明显的例子)。