我需要创建一个方法,该方法返回一个随机分布的采样数,每次调用该方法时,返回的数字都大于任何先前返回的数字。
或者,换句话说,我需要一个用于随机值排序列表的迭代器。
不幸的是,该列表太大而无法在整个内存中创建。我想出的第一个想法是将我的值空间划分为桶,其中每个桶包含某个范围内的值 [a, b)。假设我的列表有 N 个元素。要创建一个桶,我将对我的分布进行 N 次采样,并将 [a, b) 范围内的每个值放入桶中。该桶之外的值将被丢弃。
这样我可以在每次迭代最后一个时创建一个新的存储桶并保持低内存消耗。
然而,由于我不是统计学专家,我有点担心这会以某种方式搞砸我得到的数字。这是一个合适的方法吗?为每个存储桶使用相同的精确分布生成器(org.apache.commons.math3.distribution.RealDistribution 的一个实例)是否重要?
更新:似乎我在解释我在说什么类型的随机数方面做得不好。
我的数字形成随机分布的样本,例如平均值为 m 方差为 v 的正态分布,或者均匀分布或指数分布。
我使用这些数字来模拟模拟中的某些行为。假设我想在某些时候触发事件。我需要安排数十亿个事件,并且这些事件被触发的时间必须形成一个随机分布的样本。
因此,如果我通过将随机数添加到我以前的数字来导出我的下一个数字,我确实会得到一系列不断增长的随机数,但这些数字不会形成我的分布样本。