首先,这个问题取自于这个问题。我这样做是因为我认为这部分比长问题的子部分更重要。如果有冒犯之处,请见谅。
假设你有一个生成随机数的算法。那么你如何测试它呢? 或者更直接地说——假设你有一个洗牌算法,那么怎么测试它是完全随机的算法呢?
为了给问题加点理论背景——一副牌可以按52!(52的阶乘)种不同的方式洗牌。拿一副牌,手动洗牌并记录所有牌的顺序。你得到刚好那个顺序的概率是多少?答案是:1 / 52!。
在洗牌后,你得到每个花色的A、K、Q、J……连续排列的机会是多少?答案是 1 / 52!。
因此,仅仅洗牌一次然后观察结果对于判断洗牌算法的随机性没有任何信息价值。两次洗牌获得更多信息,三次甚至更多……
你会如何对一个洗牌算法进行黑盒测试以确定其随机性?