【发布时间】:2015-07-15 17:53:46
【问题描述】:
我有一个整数范围想要遍历。您可以假设序列以1 开头并以n 结尾,其中n > 1。但是,我不想按顺序遍历它们。目标是以随机方式遍历所有这些。此外,n 可能非常大,可能有数万亿,所以我无法将范围存储在内存中。有没有办法做到这一点?
我知道有一种方法可以使用已经在内存中的数组来执行此操作。当您不能一次存储整个范围时,可以做类似的事情吗?
【问题讨论】:
-
您在寻找算法吗?... 特定语言? ...
-
这里的“随机”是什么意思 - 您需要任何特定的统计属性吗?还是只是笼统的“把它们混在一起”?
-
如果你不存储整个数组,你仍然需要至少存储你已经输出的那些,这最终将相当于存储整个数组。除非您不介意两次使用相同的数字,否则您只是在寻找随机数生成器。
-
例如,一种方法是随机重新排序 n 的位,然后以通常的方式在原像中计算二进制数。但是,如果您依赖这种随机性来保证安全性,您就不会想要这样做。
-
实际上你只需要为每个数字存储一位......所以如果你有 1 百万的范围,你只需要 125kB 来表示缓冲区。