如何在读取时从数组中随机选择任意数量的元素

时间:2014-12-19 09:28:27

标签: arrays probability-theory

我需要随机(以相同的概率)从文件中的数组中选择一些固定数量的元素。我想读取文件一次,只是保留拾取的元素,因为一个数组可能很长,我不想把它保存在内存中。每个子阵列的选择概率应该相等。而且在开始时我不知道数组的大小。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

你需要一种叫做水库采样的东西。

在这篇博客中解释得非常好:

http://gregable.com/2007/10/reservoir-sampling.html

答案 1 :(得分:0)

如果你不关心你正在拾取的元素的确切数量,一个简单的解决方案就是读取文件并以固定的概率选择每个元素。

如果你想要一个确切的数字,你需要在读取整个文件之前知道这个文件中有多少个元素,计算你想要的元素列表(作为整数列表),然后读取文件并选择正确的元素。