我想对具有4,000,000个元素的序列应用置换测试。据我所知,由于许多可能的排列非常大(不是RNG会在{1 ... 4000000!}
范围内生成均匀分布的值),因此它是不可行的。我已经听说过伪随机排列,并且听起来像我需要的东西但是我无法理解它是否真的是我的案例中随机随机播放的正确替代品
答案 0 :(得分:0)
如果您正在运行排列测试,我假设您要从所有可能排列的集合中生成随机样本,以便您可以针对在置换数据上计算的统计分布测试针对实际数据计算的某些统计量
用于生成随机排列的算法(例如http://en.wikipedia.org/wiki/Random_permutation中描述的算法)通常使用许多随机数,因此不需要生成过程的任何单个步骤需要大到4000000的数字!唯一的担心是,由于用于生成随机数的种子通常远小于4000000!,并非所有排列都是可能的。
还有其他统计测试会消耗非常大量的伪随机数(例如MCMC),所以如果您使用的是随机数生成器(通常用于统计测试),我不会担心这一点。如果您对此感到担心,可以使用加密安全随机数生成器重复测试,例如http://docs.oracle.com/javase/6/docs/api/java/security/SecureRandom.html。这将会变慢,因此您可能需要减少测试的排列数量,但它不太可能具有足以影响您的测试结果的任何特性,因为任何此类特性都将是一个安全漏洞 - 它这意味着,如果已经生成了大量的随机数,那么你将有一个比随机猜测下一个数字更好的机会。