Следующие формулы позволяют отслеживать средние значения только по сохраненному среднему значению и количеству, как вы и просили.
currentScore = (currentScore * currentCount + newValue) / (currentCount + 1)
currentCount = currentCount + 1
Это зависит от того факта, что ваше среднее значение в настоящее время является вашей суммой, деленной на количество. Таким образом, вы просто умножаете счет на среднее значение, чтобы получить сумму, добавляете новое значение и делите на (счет + 1), а затем увеличиваете счет.
Итак, допустим, у вас есть данные {7,9,11,1,12}
, и единственное, что вы храните - это среднее значение и число. После добавления каждого номера вы получаете:
+--------+-------+----------------------+----------------------+
| Number | Count | Actual average | Calculated average |
+--------+-------+----------------------+----------------------+
| 7 | 1 | (7)/1 = 7 | (0 * 0 + 7) / 1 = 7 |
| 9 | 2 | (7+9)/2 = 8 | (7 * 1 + 9) / 2 = 8 |
| 11 | 3 | (7+9+11)/3 = 9 | (8 * 2 + 11) / 3 = 9 |
| 1 | 4 | (7+9+11+1)/4 = 7 | (9 * 3 + 1) / 4 = 7 |
| 12 | 5 | (7+9+11+1+12)/5 = 8 | (7 * 4 + 12) / 5 = 8 |
+--------+-------+----------------------+----------------------+