0

有没有办法以随机顺序遍历一大组连续的数字(比如说 0 到 10^9),同时确保我最终遇到了每个数字?假设数字足够大,以至于洗牌数组是不可行的:

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

我想如果没有某种完美的散列算法(零冲突?),这是不可能的。

因此,让我添加一个缓解情况,即我不需要映射实际上“真正”随机。它只需要有一个很好的“传播”。

4

2 回答 2

2

创建一个自定义的线性同余生成器,其模数是您希望迭代的范围。如果您符合 Hull-Dobell 定理的三个要求(在链接的 Wikipedia 文章的“周期长度”部分中指定),您的生成器将在循环之前遍历每个值。要终止,请检查当前迭代的生成值是否与初始值相等。

于 2013-09-15T15:53:13.947 回答
0

Heres a wiki page on shuffling using the Fisher-Yates shuffling algorithm

http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

Well, if you're using Java.. it is that easy.

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html

if not, I'd suggest looking at this:

http://www.geeksforgeeks.org/shuffle-a-given-array/

and if THAT doesn't work...

http://goo.gl/LkqffR

于 2013-09-15T15:35:54.843 回答