哪一个有更高的熵?

时间:2015-11-10 02:12:11

标签: c++ random

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

与首先执行rand() % 3 +1在哪里随机选择相同 每个数字对应3个不同的行(包含3个不同的对象) 然后再次使用rand() % 3 +1选择对象

我的意思是两种方法在结果中的分布是否相同?

希望你能得到我所说的。抱歉我的英文。

1 个答案:

答案 0 :(得分:2)

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

不管你做了什么,为了保持熵,你也必须避免偏倚你的结果,并且如前所述,modulo就是这样做的。 (CF the Pigeonhole原则。)最好只是抛出超出范围的值,直到你得到一个范围。 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]所以,回答你的问题,第一个。

希望这有帮助。