如何测试随机性(点击洗牌)

如何测试随机性(点击洗牌)

首先,这个问题从这个问题中解脱出来。 我这样做是因为我觉得这部分比一个较长问题的一小部分要大。 如果冒犯,请原谅我。

假设你有一个生成随机性的算法。 现在你怎么测试呢? 或者更直接 - 假设你有一个洗牌卡的算法,你如何测试它是一个完全随机的算法?

给这个问题添加一些理论 - 一张牌可以在52中洗牌! (52因子)不同的方式。 拿一张牌,用手洗手,写下所有牌的顺序。 你会得到如何洗牌的概率是多少? 答:1/52!

洗牌后,你会有什么机会按顺序获得每件西装的A,K,Q,J ...? 回答1/52!

所以,只是洗牌一次,看着结果将绝对没有关于你的洗牌算法随机性的信息。 两次,你有更多的信息,三个甚至更多...

黑盒子如何测试随机的洗牌算法?

采纳答案:

统计。 测试RNG的事实上的标准是Diehard套件 。 或者, Ent程序提供了更简单的解释但不全面的测试。

对于洗牌算法,使用众所周知的算法,如Fisher-Yates (又名“Knuth Shuffle”)。 随机洗牌将是均匀随机的,只要底层RNG是均匀随机的。 如果您使用Java,则该算法在标准库中可用(请参阅Collections.shuffle )。

大多数应用程序可能并不重要,但请注意,大多数RNG不能提供足够的自由度来产生52卡组合的每个可能的排列( 在此解释)。

参考更多解答:如何测试随机性(点击洗牌),转载请保留如何测试随机性(点击洗牌)

更多:puzzle