Как считать статистику?
есть альтернативный вариант, со своими плюсами и минусами:
пусть есть квант времени, dt, и есть величина, по которой считается статистика, v(t).
Инициализирующее значение статистики: V = v(t_0).
каждый квант времени происходит обновление, по принципу:
V_new = C*(v(t + (1-C)*V_old
(формально: V(t) = C*v(t) + (1-C)*V(t-dt
таким образом, нужна только одна переменная, V, работает очень быстро, удобно, когда одновременно надо очень много статистик считать. Естественно, не для всех приложений такой принцип сбора статистики подходит.
был же второй ответ с пояснением что такое C
а теперь его нет....
V_new = C*(v(t + (1-C)*V_oldдля message rate вроде подходит
а где про это почитать? там в той книжке может другие умные вещи будут?
например, как похожим способом считать стандартное отклонение?
а где про это почитать?http://en.wikipedia.org/wiki/Low-pass_filter#Algorithmic_imp...
LPF это называется.
Оставить комментарий
pitrik2
ко мне приходят некие данные, сэмплы (например время обработки сообщения)нужно посчитать среднее этих семплов за последние N секунд (другой вариант за последние M семплов, другой вариант за минимум из N и M)
проблема собственно как их хранить, их же может быть очень много
на вскидку три варианта:
1. хранить в циклическом массиве
в случае с M семплами это вроде должно быстро работать
сумму будем пересчитывать при каждом новом элементе: т.е. новый семпл добавляем к сумме, а старый, который из цикл. массива вытираем -> вычитаем из суммы
в случае с минимум M семплов и N секунд
у массива придется дополнительно держать указатель на начало и тоже всё должно работать
в случае огр. только по времени, храним и хвост и начало, плюс массив периодически расширяем
относительно быстро, но иногда запинки на копирование массива в более большой
2. обнулять стату как только случилось N, M, min(N,M)
возникает вопрос: что показывать на экране юзера
показывать ноль как-то нехорошо
вариант 1: показывать старое значение пока не набрали N/2 (M/2, min(N/2, M/2 семплов
вариант 2: как и вариант 1, только старое значение тоже продолжать насчитывать, ну или новое значение начать считать раньше - что в общем-то тоже самое
а как вообще люди в мире делают?
предложенные варианты я только что выдумал, но может быть есть какие-нибудь паттерны для насчитывания статистики?
и второе
как считать message rate?
принять за семпл: разница времен между сообщениями
далее насчитывать стату между ними, приняв N = 1 секунда
и потом на экран выводить 1 секунда делённое на среднее разниц времен?