내가 원하는 것은 빠른 것을 원한다는 것입니다. 그렇지 않으면 이미 답을 얻을 수 있습니다. 이미 가지고있는 배열의 길이만큼 이미 가지고있는 모든 수를 합산하십시오. 이것은 매우 간단합니다.
그러나 때로는 배열이 바운드되는지 여부를 알 수 없으며 마이크에서 오는 데이터와 같이 무한 할 수도 있습니다. 이 경우에는 이동 평균을 제안하는 것이 좋습니다. 즉, 배열에서 마지막 x 값을 가져 와서 해당 값의 평균 만 계산해야합니다. 결과 값을 계산하는 데 필요한 알고리즘과 시간은 x 값 또는 1000x 값에 상관없이 동일하게 유지됩니다.
편집 :
x 대 1000x는 복잡도에서 비롯됩니다. 5 개의 숫자를 합한 것, 즉 5 개의 연산을 합한 다음 5로 나누고 6 개의 연산을 더한다고 가정 해 봅시다 (예를 들어 모두 동일한 컴퓨터 시간을 사용한다고 가정 할 것입니다. 그러나 실제로는 나누기가 느립니다) 추가에 비해). 동일한 코드를 사용하지만 숫자가 1000 인 경우 1001 작업을 수행하면 첫 번째 경우보다 훨씬 더 많은 시간이 걸립니다!
"이동 평균"을 사용하면 고정 된 숫자의 숫자를 사용하므로 숫자가 5 개 또는 1000 개이든 관계없이 실행하는 데 일정한 시간이 걸립니다.
이동 평균은 한 번에 배열에서 동일한 숫자를 사용하지 않는다는 단순한 표현입니다. 다음 배열 상상 :
int x = { 1, 4, 6, 3, 1 };
int arrayLength = 5;
그런 다음이 배열의 평균이 될 것이다
int runningTotal = 0;
for(int i = 0; i < arrayLength; i++)
{
runningTotal += x[i];
}
double average = runningTotal/arrayLength
3 개 값의 이동 평균은에서
int movingLength = 3;
int runningTotal = 0;
for(int i = 0; i < movingLength; i++)
{
runningTotal += x[arrayLength - i - 1];
}
double average = runningTotal/movingLength;
그래서 첫 번째 값이 될 것이다 배열은 배열이 커질 때 계산의 일부가 아닙니다.
는 데이터 전송 속도를 들어 당신이 정말로 전체 전송을 통해 직선 평균 가중 이동 평균 및하지를 사용하고 싶습니다. – Yaur
가능한 복제본 [C#에서 간단한 이동 평균을 더 빨리 계산하는 방법] (http://stackoverflow.com/questions/12884600/how-to-calculate-simple-moving-average-faster-in-c) – Yuck