2017-10-08 12 views
0

나는 쓰고있는 프로그램에 들어오는 데이터가 끊이지 않는다. 나는 단지 T 그 스트림의 가장 최근 관측을 저장하는 고정 된 크기의 버퍼 배열을 원합니다. 그러나, 나에게 그 방법을 효율적으로 구현하는 방법은 분명하지 않습니다. 버퍼가 가득 찰 때까지 잘 작동 data_0->index 0, data_1->index 1…data_T->index T.연속 스트림의 가장 최근 부분을 배열에 효율적으로 저장하는 방법이 있습니까?

을 :

는 내가 지금까지했던 것은 첫 번째 길이 T의 버퍼를 할당하고 그들이 도착 정상에서 연속적인 순서로 들어오는 관찰을 배치하는 것입니다. 관찰 data_T+1 도착할 때, 인덱스 0 요구 버퍼에서 제거하고 모든 T-1인덱스 최신 데이터 요소를 배치하기 위해 어레이/매트릭스의 1 개 단계를 이동해야T.

버퍼가 크고 수십만 개의 요소가 항상 한 행 위로 푸시 될 필요가있을 때 매우 비효율적 인 방식 인 것으로 보입니다. 어떻게 이것이 일반적으로 해결됩니까?

답변

0

FIFO 대기열이라고하는이 알고리즘은 java fifo queue 이 API를 보면 여러 가지 코드 예제가 있습니다.

+0

링크를 살펴 봤지만 자바에 대해 잘 모르기 때문에 그 부분을 많이 이해하지 못했습니다. 나는 주로 Python, C 및 Matlab을 코딩한다. 그러나 언어에 관계없이 모든 언어에서 비슷한 방식으로 쉽게 구현할 수있는 문제에 대한 개념적 해결책을 모색하고있었습니다. – Petahanks

+0

그래, [ring buffer] (https://stackoverflow.com/questions/215557/how-do-i-implement-a-circular-list-ring-buffer-in-c) –

+0

흠, 근본적으로 덮어 쓰기를 시작하십시오. 버퍼가 바닥에 가득 차면 상단에서? 그것은 첫 번째 초기 생각 이었지만 버퍼가 데이터가 도착하는 방식으로 정렬되지 않으면 인덱싱을 추적하는 것이 너무 번거로울 수 있다고 생각하여이를 기각했습니다. 데이터의 연속적인 순서를 유지하는 접근법이 있습니까? 버퍼가 항상 가장 오래된 것부터 가장 최신의 것 또는 가장 새로운 것부터 가장 오래된 것까지? – Petahanks