Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
  Версия для печати (полностью) Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 21.06.2004
Откуда: Санкт-Петербург
Всем привет,

мне нужно написать формулу, считающую скорость вычисления. Задачка на хорошее знание статистики. Может кто из оверов еще не забыл математику? Был бы благодарен помощи :beer:

Задача примерно такая:
Время от времени узлы занимаются вычислениями. Каждую минуту они отчитываются о вычисленном прогрессе. Нужно рассчитать скорость вычисления каждого узла. При этом нужно игнорировать время, в течении которого узел не вычисляет - нужно знать реальную скорость, а не среднюю по всему времени. Глобальным изменением параметров узла, меняющим скорость с какого-то момента можно (пока) пренебречь.

При фиксированной скорости вычислений, выпады вверх практически невозможно (трудно считать быстрее, чем компьютер может физически), а вниз - сколько угодно (в рамках временного интервала мы считали не все время).

Например, у нас есть данные по скорости: 0 0 150 300 300 301 299 150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 180 310 320 290 300 90 0 0

Мы имеем: скорость примерно 300. 0 - ничего не вычислялось, 150, 180, 90 итд - момент включения или выключения. Из этой последовательности нужно результатом получить 300 (ну или в районе).

Вопрос, как?

Нули вырезать легко - считаем любое среднее и отрезаем то, что меньше половины.
150, 180, 90 - в принципе, вырезать можно. Например можно считать максимальное значение; либо же 5 максимальных, потом брать среднее из этих максимальных (получим, к примеру, 310), потом откинуть значения, меньшие 2/3 от максимума, т.е. меньше 200. Останется 300 300 301 299 310 320 290 300. Теперь берем среднее из этих параметров - и получаем результат.

Из-за каких-то проблем могут быть редкие всплески. Предположим, 1000; это не проблема, можно считать среднее медианное и эта выборка не будет играть роли. Но есть проблема - если выборка очень большая, то таких всплесков может набраться много, и первый шаг - с откидыванием результатов меньше 2/3 от среднего максимума - потерпит крах. Т.е. если последовательность очень большая, даже большое количество микровсплесков не должны нам помешать найти последовательность самых больших значений (т.е. скорость).

Видимо, тут нужен какой-то более хитрый фильтр, а не просто примитивный двухуровневый (считаем средний максимум, откидываем слишком малые значения, считаем среднее от оставшегося). Формулу можно сложную, главное, чтобы это вообще вычислялось за разумное время. Вычисляться будет на SQL, при необходимости на PL/pgSQL в постгрессе, при совсем острой необходимости можно считать извне - но это, в общем, неважно, я придумаю, как закодировать, мне нужна сама формула :oops:

Кто-нибудь может что подсказать?

_________________
BE VIGILANT.



Партнер
 

Member
Статус: Не в сети
Регистрация: 21.06.2004
Откуда: Санкт-Петербург
Ап :-)

_________________
BE VIGILANT.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 30


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan