假设您必须在 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/