2017-10-08 46 views
0

我有一个永无止境的数据流进入我正在写的程序。我想拥有一个固定大小的缓冲区阵列,它只存储该流的最新观察数据。但是,对我而言,如何以有效的方式实现这一点并不明显。有没有一种有效的方法来将最新的连续流部分存储在数组中?

什么到目前为止,我所做的是第一分配长度牛逼的缓冲区,并放置在连续顺序进入观察从顶部到达时:data_0->index 0, data_1->index 1…data_T->index T.

,直到缓冲区已满,工作正常。但是,当观察data_T+1到达时,将被从缓冲器取出索引0需求和需要所有T-1行中的阵列/矩阵被向上移动一个步骤,以最新的数据点放在索引T

这似乎是一个非常低效的方法,当缓冲区很大并且需要将数十万个元素一直推到一排时。 这通常如何解决?

回答

0

这个算法叫FIFO队列java fifo queue 看看这个API它有几个代码示例。

+0

我看了一下这个链接,但是我不知道java,所以我对此不太了解。我主要用Python,C和Matlab编写代码。但是不管语言如何,我都在寻求一个概念上的解决方案,这个问题很容易以任何语言以类似的方式实现。 – Petahanks

+0

确定如此使用[环形缓冲](https://stackoverflow.com/questions/215557/how-do-i-implement-a-circular-list-ring-buffer-in-c) –

+0

嗯,所以基本上开始重写从顶部缓冲区填充到底部?这也是我的第一个初步想法,但我驳斥了它,因为我怀疑,如果缓冲区没有按照数据到达的方式排序,那么跟踪索引会太麻烦。有没有一种方法可以保留数据的连续顺序?所以缓冲区总是从最老的 - >最新的或最新的 - >最老的? – Petahanks

相关问题