找到最后一项但在流中没有N而不存储n项

时间:2011-05-11 21:23:06

标签: stream

假设有一个数据流到达,D(0),D(1),D(2),......当D(i)到来时,我想知道D(i - N)。最直接的方法是存储最新的N项,并在新数据到达时不断更新。但问题是N可能很大,因此没有足够的内存来存储它们。无论如何通过存储比N少得多的物品来实现这一点?常数M <&lt; N个空格是首选?提前谢谢。

1 个答案:

答案 0 :(得分:1)

除非您可以利用的数据有一些规律性,否则我无法看到。如果数据是完全随机的(因此不能从其他元素推断出元素),那么选择不保存元素 k 将使得无法在迭代中重现该元素 k + N

相反,请考虑:

  • 你能减少 N 吗?
  • 您可以在更慢,更便宜的内存中将信息存储在磁盘上或(如果您在嵌入式环境中)吗?
  • 数据中是否有某些模式?如果有例如一个重复的模式,你可以利用它,或者如果数字之间存在某种数学关系,也许某些公式可以帮助从其他数字重建一个数字。即使没有可察觉的模式,也许你可以使用一些压缩算法来减少数据大小?
  • 对数据有一些限制,例如每个数字都在0到255之间?如果是这样,您可能会降低存储要求。

(顺便说一句,这是什么应用?)