正确使用时,均匀离散分布(uniform_int_distribution)是否有可能生成连续(或相同)的数字?

Is it possible for a uniform discrete distribution (uniform_int_distribution) to generate sequential (or the same) numbers when used correctly?

将我的编辑放在这里:

在评论中,已经讨论了随机性的实际性质。我所理解的是,在生成 "random" 数字时,没有数字比另一个数字更容易或更不可能生成。

希望对我的问题进行更公平的重新表述是:

如果没有数字比另一个数字的可能性更大或更小,那么,如果数字并不总是均匀分布,为什么均匀分布函数可以调用自身?


在我问之前先说清楚,我只是出于好奇才问的。幸运的是我不是猫。

我为一个大学项目创建了一个快速排序函数,并认为我可以用一些随机生成的整数列表来测试它(而不是仅仅敲打键盘一段时间)。

std::vector<int> unsorted_list;
std::random_device ran_dev; // Initialise a new random device
std::uniform_int_distribution<> uni_dist(1, 100); // Create Uniform Distribution
for (int i = 0; i < 5; i++) {
    unsorted_list.push_back(uni_dist(ran_dev));
}

我能否完全依赖此实现来生成看起来总是随机(均匀分布)的随机数?

您可能认为我很傻...很明显 class 声明它是均匀分布,因为不可能是不均匀的...但是这些中的任何一个输出甚至可能?如果是,可能性有多大?

(1, 1, 1, 1, 1)
(1, 2, 3, 4, 5)
(2, 4, 6, 8, 10)

我想最后一个输出比第一个或第二个更有可能(尤其是当使用 0 到 100 的界限时),但我的好奇心仍然存在。
我是不是特别傻?我从来 非常 擅长数学,所以,虽然我开始理解符号和术语,但我仍然会看一些解释并简单地 "glaze over",所以我的谷歌搜索到目前为止没有帮助。

与包含大量重复的列表相比,您更有可能获得包含大量不同数字的列表。但是,如果使用足够长的时间,真正的 RNG 会连续产生任意数量的 1,并且由于 PRNG 应该看起来像真正的 RNG,因此可能期望 PRNG 做同样的事情。

真正的随机数生成器通常会进行独立试验,这意味着一次试验的结果不会告诉您关于另一次试验结果的任何信息。知道连续出现一百个 1 并不能说明这样的 RNG 在下一次试验中会做什么。由于 PRNG 应该看起来像 RNG,因此您可能期望它们也是如此。

总而言之,虽然不太可能,但有可能获得大量重复。如果你不想重复,我建议你自己挑选元素然后洗牌。这样顺序是随机的,而元素具有您想要的任何分布。