Algorithm 如何存储大小未知的按顺序呈现的集合的样本?

Algorithm 如何存储大小未知的按顺序呈现的集合的样本?,algorithm,math,random,sampling,Algorithm,Math,Random,Sampling,假设我想存储N个样本(每个样本占用很大一部分内存),这应该形成一个代表性的集合,其中总共有M>>N个样本按顺序呈现给我。我事先不知道M,只能同时在内存中保存N个样本 这里,代表性意味着M个样本中的每一个都应该具有相同的存储概率 这个问题被称为,有一个非常有效的O(M)-时间,O(N)-空间算法。该算法的工作原理如下:在每个点上,对要选择的N个元素进行“猜测”。首先,选择前N个元素。然后,在看到序列的第k个元素后,选择一个介于1和k之间的随机数(包括1和k)。如果选择的数字在1..N范围内,则用当

假设我想存储N个样本(每个样本占用很大一部分内存),这应该形成一个代表性的集合,其中总共有M>>N个样本按顺序呈现给我。我事先不知道M,只能同时在内存中保存N个样本

这里,代表性意味着M个样本中的每一个都应该具有相同的存储概率

这个问题被称为,有一个非常有效的O(M)-时间,O(N)-空间算法。该算法的工作原理如下:在每个点上,对要选择的N个元素进行“猜测”。首先,选择前N个元素。然后,在看到序列的第k个元素后,选择一个介于1和k之间的随机数(包括1和k)。如果选择的数字在1..N范围内,则用当前项替换索引的“猜测”项;否则什么也不做。您可以使用一个快速归纳论证来说明,这将随机均匀地对N个元素进行采样,并对数据进行一次传递


希望这有帮助

这很有帮助,而且比我想出的东西要优雅得多!