(Очень короткий ответ) Текст для комментирования говорит
избегайте ответов на вопросы в комментариях.
Итак, вот оно: Есть статья об онлайн-алгоритме, который, похоже, работает достаточно хорошо:
Применение Estimator OnlineQn .
РЕДАКТИРОВАТЬ
(пользователем user603). Алгоритм, связанный с этой статьей, представляет собой версию Q n с движущимся окном .Qn
Для большой выборки разделенной на временные окна шириной n < N , { x i } t i = t - n + 1, мы можем применить Q n к каждому временному окну, получая N - n + 1 значения Q н . Обозначим эти значения { Q i n } N - n + 1 i ={xi}Ni=1n<N{xi}ti=t−n+1QnN−n+1Qn{Qin}N−n+1i=1
Приведенный здесь алгоритм позволяет получить при средней стоимости меньше, чем наихудший O ( n log ( n ) ), необходимый для вычисления Q i n с нуля.Qin|Qi−1n O(nlog(n))Qin
Однако этот алгоритм не может использоваться для вычисления полной исходной выборки { x i } N i = 1 . Также необходимо поддерживать буфер, размер которого может достигать O ( n 2 ) (хотя он часто намного меньше).Qn{xi}Ni=1O(n2)