假设我有一个输入流,我不知道它中有多少项。当我从流中收集物品时,我随机存储了一些物品。假设我必须存储1,000个项目,并且流中的项目远远超过1,000 是否有一个很好的算法,可以从流中随机收集项目,并且项目尽可能均匀地分布在流的长度中?从流中随机收集项目
0
A
回答
0
不,你不能得到均匀分布,除非事先知道流中有多少物品。
假设流有10,000个项目。要获得1,000个均匀分配的物品,您应该收集每十个物品。
假设流包含100,000个项目。要获得1,000个均匀分布的物品,您应该收集每一百项物品。
但是,您不能区分这两种情况,直到您到达流的末尾,此时更改您的收集频率为时已晚。如果您开始收集每十个项目,那么您最终可能会收集1,000个收集的项目,而您仍然有90,000个项目要留在流中。如果您开始收集每百项物品,则可能会达到流的末尾,而您的配额数量不足900个。
1
如果存储选择的项目,那么你就可以随机选择具有均匀分布使用Reservoir sampling算法从k个流项目
for first k elements of stream:
store element in A array
for every next (ith) element:
generate random indx in range [0, i)
if indx < k
replace A[indx] with current element
相关问题
- 1. 从集合中随机返回项目
- 2. 随机化ArrayList中的项目子集
- 3. 从集合中获取随机条目
- 4. 如何从2sxc数据流中选择一个随机项目?
- 5. 流星:在事件中显示随机收集对象
- 6. 从mongodb集合中检索独特的随机项目?
- 7. 如何从Python集合中挑选2个随机项目?
- 8. 从JavaScript Object中选择随机项目?
- 9. 从ArrayList中删除随机项目
- 10. 从NSMutableArray中删除随机项目
- 11. 从序列中提取随机项目
- 12. 从列表中的随机项目
- 13. 流星:计算关系集合中收集项目的数量
- 14. Prolog中的随机项目
- 15. XSLT中的随机项目
- 16. 随机随机化项目列表
- 17. TPL数据流:将收到的收集整合到sequentiel项目
- 18. 从词典获取随机项目?不是随机的
- 19. 从Json String获取随机项目
- 20. 从Firebase获取随机项目
- 21. 获得一个随机的项目从
- 22. 随机从目录
- 23. 收集随机使用扩展方法
- 24. 启用随机访问与MongoDB收集
- 25. 流星排序集合随机
- 26. GridView复制随机项目
- 27. C# - 随机化Linq项目
- 28. android随机项目from arraylist
- 29. outputcache随机删除项目?
- 30. 如何随机选择集合中的项目
我知道水库采样算法,但我的情况略有不同,这里是因为我可以” t首先存储第一个k元素。当每个元素到达时,它将被存储或丢弃。 –
但是......你写过关于存储他们......好吧,那么凯文的答案是给你的。 – MBo