数据结构维护值的时间窗口?

时间:2014-10-18 14:18:01

标签: c++ algorithm data-structures

我正在解决一个问题,我需要保持十秒钟的积分时间窗口。当新点进入时,它们会添加到队列末尾,并且随着时间的推移,这些点将超过10秒,因此请离开队列前面。队列可以变得非常大,比如1000或更多元素。

有趣的是,我还需要快速访问中间的元素,比如说早于3秒前的第一个元素。快速做到这一点很困难。

请注意,队列始终排序。

我考虑过排序数组,但从前面删除元素的速度很慢。列表搜索速度很慢。

我在c ++中这样做,但欢迎任何语言。

1 个答案:

答案 0 :(得分:0)

  

我正在处理一个问题,我需要保持十秒钟的积分点。当新点进入时,它们会添加到队列末尾,并且随着时间的推移,这些点将超过10秒,因此请离开队列前面。队列可以变得非常大,比如1000或更多元素。

1000个元素在任何方面看起来都不大,所以我不知道那里有什么问题。实际的时间要求会更有用。

  

请注意,队列始终排序。

按什么排序?时间?由于时间似乎是索引本身并且它是一个FIFO,所以根据定义似乎就是这种情况。

  

我考虑过排序数组,但从前面移除元素的速度很慢。

为什么需要另外分类?它有多慢,它需要多快?您使用的是什么实现?如果您知道点数的上限,为什么不使用循环缓冲区呢?

  

列表搜索速度很慢。

您使用的搜索方法是什么?它的实现是什么样的?它有多慢?它需要多快?事先知道有关搜索的性质可以帮助加快它的速度吗?二元搜索不够快吗?