Моя ставка заключается в том, что вы хотите что-то быстро, иначе у вас уже есть свой ответ. Суммируйте все числа, которые у вас уже есть по длине массива, который у вас уже есть. Это очень просто.
Однако иногда вы не можете знать, будет ли массив ограниченным, он может быть бесконечным, например, данные, поступающие с микрофона. Предложение скользящего среднего хорошее в этом случае, это означает, что вам нужно взять последние значения x из массива и рассчитать среднее значение только по этим значениям. Алгоритм и время, необходимое для вычисления результата, остаются неизменными, есть ли значения x или значения 1000x.
редактировать:
х против 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;
Итак первые значения в полях array не являются частью вычисления, когда массив растет.
Для скоростью передачи данных до вы действительно хотите использовать взвешенное скользящее среднее, а не прямо в среднем по всей передачи. – Yaur
Возможный дубликат [Как рассчитать простое скользящее среднее быстрее в C#?] (Http://stackoverflow.com/questions/12884600/how-to-calculate-simple-moving-average-faster-in-c) – Yuck