我正在解决一个问题,我需要保持十秒钟的积分时间窗口。当新点进入时,它们会添加到队列末尾,并且随着时间的推移,这些点将超过10秒,因此请离开队列前面。队列可以变得非常大,比如1000或更多元素。
有趣的是,我还需要快速访问中间的元素,比如说早于3秒前的第一个元素。快速做到这一点很困难。
请注意,队列始终排序。
我考虑过排序数组,但从前面删除元素的速度很慢。列表搜索速度很慢。
我在c ++中这样做,但欢迎任何语言。
答案 0 :(得分:0)
我正在处理一个问题,我需要保持十秒钟的积分点。当新点进入时,它们会添加到队列末尾,并且随着时间的推移,这些点将超过10秒,因此请离开队列前面。队列可以变得非常大,比如1000或更多元素。
1000个元素在任何方面看起来都不大,所以我不知道那里有什么问题。实际的时间要求会更有用。
请注意,队列始终排序。
按什么排序?时间?由于时间似乎是索引本身并且它是一个FIFO,所以根据定义似乎就是这种情况。
我考虑过排序数组,但从前面移除元素的速度很慢。
为什么需要另外分类?它有多慢,它需要多快?您使用的是什么实现?如果您知道点数的上限,为什么不使用循环缓冲区呢?
列表搜索速度很慢。
您使用的搜索方法是什么?它的实现是什么样的?它有多慢?它需要多快?事先知道有关搜索的性质可以帮助加快它的速度吗?二元搜索不够快吗?