在我看来,种子伪随机数发生器将产生一个确定的数字序列.为了在一个程序中得到2个随机序列,需要两个具有不同种子的生成器。即:
default_random_engine gen1(1);
default_random_engine gen1(2);
uniform_int_distribution<int> dist(1, 5);
for (int i = 0; i < 100; ++i)
{
seq1[i] = dist(gen1);
seq2[i] = dist(gen2);
}我可以只使用一个生成器来产生两个独立的sequences?
发布于 2020-06-24 08:03:54
我可以只用一个生成器来产生两个独立的序列吗?
好吧,是和不是。
如果来自单个生成器的序列是“真正”独立且分布相同的样本序列(因为该术语的含义实际上是有问题的)--那么您可以在生成值的序列中获取奇数元素和偶数元素,并有两个独立的序列。
现在,如前所述,PRNG只是伪随机的.这并不意味着它不是“随机的”--语言标准不要求它是确定性的。此外,它可能是使用一些热噪声,这可能不是随机的,但可能是无法区别的,由你。但是它也可能是完全确定性的,在这种情况下,给定奇数序列的一小部分,理论上可以确定偶数序列。
对于大多数对源分布没有强烈要求的目的,在实践中,您可以将奇数元素和偶数元素序列视为独立且相同分布的序列。
应该为每个序列创建一个新的分发对象吗?
可能吧。C++分布类是一个用词不当的类;它是一个“样本”类,它有一个具有特定分布特征的底层样本空间;以及operator()执行采样的地方。所以不要认为它是“一个不同的分布”-相同的分布,另一个样本空间。
发布于 2020-06-24 08:02:08
我可以只用一个生成器来产生两个独立的序列吗?
很可能不是。
应该为每个序列创建一个新的分发对象吗?
是。分布可能有也可能没有影响结果的附加隐藏状态。
https://stackoverflow.com/questions/62550311
复制相似问题