c++ - 哪个熵更高?

标签 c++ random

假设您必须在 9 个数字中随机选择 rand() % 9 +1 其中每个数字对应一个不同的对象

这是否与首先执行 rand() % 3 +1 随机选择相同,其中 每个数字对应 3 个不同的行(其中包含 3 个不同的对象) 然后再次使用 rand() % 3 +1 来选择对象

我的意思是这两种方法的结果分布相同吗?

希望你明白我在说什么。对不起我的英语。

最佳答案

首先,您的熵与您的 RNG 直接相关。 所有 rand() 版本的熵低得令人沮丧。获得更好的 RNG。

但是,无论您做什么,为了保持熵,您还必须避免对结果产生偏差,而且,如前所述,模运算就是这样做的。 (CF the Pigeonhole principle.)最好只是抛出超出范围的值,直到你得到一个范围内的值。 The comp.lang.c FAQ list has an answer that touches this .

要回答您的具体问题,分为两部分:

1)因为取余运算,所以两者不是等价偏的。但是......假设你正确地消除了这种偏见......

2) 对同一 PRNG 的两次连续调用不是独立的,因此虽然每次调用中的位是随机分布的,但它们的串联不一定具有与单个调用相同的熵。 See Chris Peikert's answer on crypto.stackexchange.com .

[edit] 所以,首先要回答你的问题。

希望这对您有所帮助。

关于c++ - 哪个熵更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621708/

相关文章:

php - 我想建立一个安全链接

c++ - 从流中读取 char* - 另一个缓冲区溢出惨败?

c++ - "array[n] != '\0'"比 "n < strlen(array)"好吗?

c++ - 如何在C++中通过引用返回 vector

c++ - 以重复模式绑定(bind)纹理

c# - unity2d : randomly change position of gameobject after it has been looped

vba - 在VBA中重复随机数

python - 在python中组织Counter()显示?

c# - 生成对 UTF-8 编码和解码有效的随机字符串

c++ - 如何使用 std::function 编写指向成员函数的指针?