假设有一个数据流到达D(0),D(1),D(2),......当D(i )来了,我想知道D(i - N)。最简单的方法是存储最近的N个项目,并在新数据到来时不断更新它们。但问题是N可能很大,因此没有足够的内存来存储它们。无论如何,通过存储比N更少的物品来实现这一点?一个常数M的空间是优选的吗?提前致谢。找到最后一个项目,但没有储存n个项目的流中的N为
回答
据我所知,除非您可以利用的数据中存在一些规律性。如果数据是完全随机的(从而没有元素可以从其他元素推断出来),那么选择不保存元素将使得不可能在迭代k + N中再现该元素。
相反,考虑:
- 可以减少ñ?
- 您可以将信息存储在磁盘上,或者(如果您处于嵌入式环境中)以较慢,更便宜的内存形式存储信息?
- 数据中是否存在某种模式?如果有例如一个重复的模式,你可以利用它,或者如果数字之间存在某种数学关系,也许某种公式可以帮助重建其他数字。即使没有可察觉的模式,也许你可以使用一些压缩算法来减少数据大小?
- 数据是否存在一些限制,例如:每个数字在0到255之间?如果是这样,你可以减少存储需求。
(这样做有什么应用,顺便?)
我用[P2算法]估计传感器网络中e2e延迟的分位数(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.74。 2672&代表= REP1&类型= PDF)。由于我只关心最近N个项目的e2e延迟,因此我将移动一个大小为N的窗口,因为e2e延迟采样会继续到来。当样本D(i)出现时,我把它放在窗口中并驱逐D(i-N),两者都是逻辑上的,因为我无法保存整个样本窗口。 – sinoTrinity 2011-05-11 21:48:05
@sinoTrinity:嗯 - 我不擅长统计,但是这篇文章的重点并不在于它们描述的算法,只需要存储一些值,而不是全部_N_? (您只需存储少量值的价格是您只能得到分位数的近似值 - 我的说法是您需要存储所有值,假设您想要一个确切的结果,这取决于所有_N_值。) – 2011-05-11 22:38:21
是的,这都是估计。 P2估计到目前为止所有样本的分位数。它包含了所有的历史。但是我想估计最近N个样本的分位数,只是因为很久以前发生的事情可能根本就没有意义。 – sinoTrinity 2011-05-11 22:50:03
- 1. 查找是否有超过n/2个项目在n个项目列表中匹配。 O(nlog(n))
- 2. 得到一个tage值前n个最高项目的索引
- 3. 获取第(N-1)页上的最后一个项目
- 4. 选择时间序列中的最后n个项目
- 5. 找出一组项目的最后一个项目在SQL
- 6. 是否可以创建一个引用n个现有项目和一个新项目的多项目模板?
- 7. 获取集合上的最后N个项目
- 8. 如何排序包含N个项目但排序每10个项目的ArrayList
- 9. PostgreSQL的:每个项目的前N个项目在同一个表
- 10. 如何在nongodb中从n到n个项目
- 11. 从队列中获取最后n个项目
- 12. 保存最多N个项目的LIFO数据结构
- 13. 获取BST的第n个项目
- 14. 找到固定项目重复列表中的第n项
- 15. 如何一次处理RxJS流n项目,一旦项目完成后,又自动填充回n?
- 16. Python:循环做同样的事情到一个项目n次,而不是一次n项目
- 17. 在一个网格中的n个项目的平衡布局
- 18. 是否可以选择最后n个项目与第n孩子?
- 19. ASP.NET的ListView:如何插入“特定”项目每N个项目?
- 20. PHP添加逗号到每一个项目,但最后一个
- 21. Python列表中第n个最大项目的索引
- 22. 查找列表中第n个项目的索引
- 23. 如何有效地找出一个序列是否至少有n个项目?
- 24. 试图在存储中存储多个项目,但只添加最后一个存储
- 25. MySQL和SQLAlchemy:为多个项目获取N条最新评论
- 26. 如何根据项目总数找到数组中N个项目的所有组合?
- 27. CQWP:每组显示n个项目
- 28. 如何分组N个项目?
- 29. Sass在第N个项目循环
- 30. 每n个项目在收集在VB.Net
'N'完全是随机的? – Tomalak 2011-05-11 21:24:50
N是固定给定的应用程序。但与可用内存相比,它相对较大。具体来说,我需要N约1000. – sinoTrinity 2011-05-11 21:54:19