2017-10-08 5 views
0

Ich habe einen nie endenden Strom von Daten in einem Programm, das ich schreibe. Ich hätte gerne eine feste Größe Puffer-Array, die nur speichert die jüngsten Beobachtungen dieses Stromes T. Für mich ist es jedoch nicht offensichtlich, wie dies auf effiziente Weise implementiert werden kann.Gibt es eine effiziente Möglichkeit, den letzten Teil eines kontinuierlichen Datenstroms in einem Array zu speichern?

Was ich bisher getan haben, zuerst den Puffer der Länge zuzuteilen T und legen eingehenden Beobachtungen in der Reihenfolge von oben, wie sie ankommen: data_0->index 0, data_1->index 1…data_T->index T.

der gut arbeitet, bis der Puffer voll ist. Aber wenn Beobachtung data_T+1 ankommt, Index 0 Bedarf aus dem Puffer und alle T-1 Zeilen muss entfernt werden, um einen Schritt in der Anordnung/Matrix, um bewegt werden, um den neuesten Datenpunkt zu platzieren bei IndexT.

Das scheint ein sehr ineffizienter Ansatz zu sein, wenn der Puffer groß ist und Hunderttausende von Elementen die ganze Zeit um eine Zeile nach oben geschoben werden müssen. Wie ist das normalerweise gelöst?

Antwort

0

Dieser Algorithmus namens FIFO-Warteschlange java fifo queue Schauen Sie sich diese API an, die mehrere Codebeispiele enthält.

+0

Ich schaute auf den Link, aber ich weiß nicht Java, also habe ich nicht viel davon verstanden. Ich schreibe hauptsächlich in Python, C und Matlab. Aber unabhängig von der Sprache suchte ich nach einer konzeptuellen Lösung für das Problem, die in jeder Sprache leicht in ähnlicher Weise umgesetzt werden kann. – Petahanks

+0

Ok also benutze [Ringpuffer] (https://stackoverflow.com/questions/215557/how-do-i-implement-a-circular-list-ring-buffer-in-c) –

+0

Hmm, also im Wesentlichen beginnen zu überschreiben von oben, wenn der Puffer bis zum Boden gefüllt ist? Das war meine erste Idee, aber ich wies sie zurück, weil ich vermutete, dass es zu umständlich wäre, die Indexierung im Auge zu behalten, wenn der Puffer nicht so sortiert wäre, wie die Daten ankommen. Gibt es einen Ansatz, der die Reihenfolge der Daten bewahrt? Damit geht der Puffer immer von Ältesten-> Neuesten oder Neuesten-> Ältesten? – Petahanks

Verwandte Themen