2012-10-17 2 views
0

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

Известные алгоритмы перечислены, но «не есть способ удаления точек из множества образцов:

  • Colt Stream Quantiles: Это один не имеет никакого способа удаления кусок данных после добавил
  • Apache Math Percentile: этот просто вычисляет квантильности массива, не удаляет данные из массива.

Вот пример проблемы: Скажем, я хочу вычислить произнесенную произвольную, но постоянную процентную скорость вентилятора набора ветряных мельниц (в качестве оценки скорости ветра). Скорости вентиляторов обновляются асинхронно каждые несколько миллисекунд. Эта библиотека должна позволять мне обновлять скорости ветра одной ветряной мельницы за один раз, не переучитывая медиану.

ответ

2

Если вы поддерживаете обновляемое упорядоченное представление данных, получение квантилей легко и эффективно, просто используя длину вашего массива. Например, если у вас есть N элементов, медиана будет в позиции N/2 и так далее. Когда вы вставляете новый элемент в свою структуру данных, это все равно будет удерживаться. Эффективность тогда просто зависит от вставки нового элемента.

+0

Да, это теоретически легко, но я очерняю его волосатым. Итак, есть ли библиотека или что-то, что делает это ... хочу избежать написания кода и тестирования. – fodon

+0

+1 http://stackoverflow.com/a/2329236/49246 – starblue

1

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

+0

Пакетная идея будет работать для статистики на одном и том же объекте, но это статистика по коллекции объектов ... добавлен пример на вопрос. – fodon

+0

Вы хотите добавить/удалить один за раз? Вы можете сделать это, сохранив кольцевой буфер и количество отсчетов. Чтобы удалить декремент, счетчик для удаленного значения и добавьте инкремент в счетчик добавленного значения. –

+0

да, это будет делать, но процентиль нужно будет вычислять каждый раз, когда нет? – fodon

Смежные вопросы