随机映射数字

时间:2013-09-15 15:28:09

标签: random mapping

是否有办法以随机顺序迭代通过一组连续的数字(比如0到10 ^ 9),同时确保我最终遇到了它们中的每一个?假设数字足够大以至于不可能改组数组:

 a = range(10**9); random.shuffle(a); # :(

我想如果没有某种完美的哈希算法(没有碰撞?),这是不可能的。

所以让我作为一个减轻的情况添加,我不需要映射到实际上'真正'随机。它必须有一个很好的“传播”。

2 个答案:

答案 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/

如果这不起作用......

http://goo.gl/LkqffR