是否有办法以随机顺序迭代通过一组连续的数字(比如0到10 ^ 9),同时确保我最终遇到了它们中的每一个?假设数字足够大以至于不可能改组数组:
a = range(10**9); random.shuffle(a); # :(
我想如果没有某种完美的哈希算法(没有碰撞?),这是不可能的。
所以让我作为一个减轻的情况添加,我不需要映射到实际上'真正'随机。它必须有一个很好的“传播”。
答案 0 :(得分:2)
创建一个自定义linear congruential generator,其模数是您希望迭代的范围。如果您符合Hull-Dobell定理的三个要求(在链接的维基百科文章的“句点长度”部分中指定),您的生成器将在循环之前遍历每个值。要终止,请检查当前迭代的生成值是否与初始值相等。
答案 1 :(得分:0)
使用Fisher-Yates改组算法进行改组的维基页面
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
好吧,如果你正在使用Java ..就这么简单。
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html
如果没有,我建议看一下:
http://www.geeksforgeeks.org/shuffle-a-given-array/
如果这不起作用......