Статистическая выборка кода

Это может быть очень открытый вопрос. Мне нужно быстро измерить время некоторого участка кода. Я использую функцию std::chrono::high_resolution_clock. Мне приходится запускать этот код много раз и измерять продолжительность.

Итак, вот проблема: я могу измерить минимальные и максимальные значения продолжительности и вычислить среднее значение, используя количество отсчетов выборок. В этом случае мне нужно сохранить только 4 значения. Но я также хотел бы знать, как распределяются данные. Для расчета стандартного отклонения или гистограммы необходимо сохранить все точки данных. Однако для этого потребуется либо одна гигантская начальная структура данных, либо динамически растущая структура данных - и то, и другое повлияет на измеряемый код в моей встроенной системе. Есть ли способ рассчитать стандартное отклонение для этого образца, используя стандартное отклонение предыдущего образца?


person ilya1725    schedule 27.02.2017    source источник


Ответы (1)


Для расчета стандартного отклонения или гистограммы необходимо сохранить все точки данных.

Это банальная ложь. Вы можете рассчитать текущее стандартное отклонение с помощью алгоритма Велфорда, который требует только одну дополнительную переменную, помимо скользящего среднего и текущего количества элементов.

Что касается гистограммы, вам не нужно хранить все данные - вам просто нужно вести счетчики для каждой ячейки и увеличивать правую ячейку каждый раз, когда у вас появляется новая выборка. Конечно, для этого простого подхода к выплате вам необходимо заранее знать ожидаемый диапазон и количество ящиков. Если это невозможно, вы всегда можете начать с небольших интервалов в небольшом диапазоне и масштабировать размер интервалов (объединяя соседние интервалы) всякий раз, когда вы встречаете элемент за пределами текущего диапазона. Опять же, все это требует только фиксированного количества памяти (одно целое число для каждой ячейки и два значения для диапазона).

person Matteo Italia    schedule 27.02.2017
comment
это правильно, что я не знаю ожидаемого диапазона значений. Авторегулировка ящиков может работать. Вы знаете пример с открытым исходным кодом? Спасибо за внимание к алгоритму Велфорда. - person ilya1725; 27.02.2017