给定的是数据点的迭代器it
,我们拥有的数据点的数量n
,以及我们想要用来做一些计算的最大样本数 ( maxSamples
)。
想象一个函数calculateStatistics(Iterator it, int n, int maxSamples)
。该函数应该使用迭代器来检索数据并对检索到的数据元素进行一些(大量)计算。
- 如果
n <= maxSamples
我们当然会使用从迭代器中获得的每个元素 - 如果
n > maxSamples
我们必须选择查看哪些元素以及跳过哪些元素
我已经在这方面花费了相当长的时间。问题当然是如何选择何时跳过元素以及何时保留它。到目前为止我的方法:
- 我不想
maxSamples
从迭代器中获取第一个,因为这些值可能不是均匀分布的。 - 另一个想法是使用随机数生成器,让我在 和 之间创建
maxSamples
(不同的)随机数,0
并n
在这些位置获取元素。但是,如果例如n = 101
,maxSamples = 100
找到一个尚未在列表中的新的不同数字变得越来越困难,那么在随机数生成中就会浪费很多时间 - 我的最后一个想法是相反:生成
n - maxSamples
随机数并排除这些位置元素处的数据元素。但这似乎也不是一个很好的解决方案。
你有这个问题的好主意吗?可能有标准的已知算法吗?