【发布时间】:2013-09-08 17:43:59
【问题描述】:
我在一次采访中遇到了一个问题。
Q - 想象一下,给你一个非常大的数据元素流(5 月份的谷歌搜索查询、圣诞节期间在沃尔玛购买的产品、电话簿中的姓名等等)。您的目标是有效地返回从原始流中均匀分布的 1,000 个元素的随机样本。你会怎么做?
我在找——
- 数据集的随机抽样是什么意思? (我的意思是,如果结果为 1,我可以简单地掷硬币并从输入中选择一个字符串,然后这样做直到我有 1000 个样本......)
- 这样做时我需要考虑哪些事项?例如..采用连续的字符串可能比采用非连续的字符串更好..重新表述-如果我随机选择连续的 1000 个字符串会更好..还是像抛硬币一样一次选择一个字符串更好..
这可能是一个模糊的问题。我尝试谷歌“随机样本数据集”但没有找到任何相关结果。
【问题讨论】:
-
既然你不能存储一个无限的集合,假设你有一个无限的字符串序列,你一次只能看到一个字符串是否公平?在这种情况下,它归结为在您收到每个字符串时对每个字符串进行二进制采样/不采样决定,唯一的问题是您希望该选择的接受率是多少。
-
@pjs ..“你有一个无限的字符串序列,你一次只能看到一个”看起来还不错..
-
在这种情况下,您的抛硬币提议看起来是正确的方法,但您可能希望接受的概率不是 1/2。
-
为了更好地理解问题,请查看@abipc 提供的link!问题就像我想的那样......:“如何随机采样无限流(应该选择 1000 个样本),这样你不知道它什么时候结束,但是当它结束时,你必须对所有这些样本你选择了。你的内存只能存储 1000 个元素。”