因此,假设您必须在9个数字之间随机选择
rand() % 9 +1
其中每个数字对应不同的对象
与首先执行rand() % 3 +1
在哪里随机选择相同
每个数字对应3个不同的行(包含3个不同的对象)
然后再次使用rand() % 3 +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]所以,回答你的问题,第一个。
希望这有帮助。