Я ищу алгоритм, который определяет процентили для записи живых данных.
Например, рассмотрим разработку серверного приложения.
Сервер может иметь время ответа следующим образом: 17 мс 33 мс 52 мс 60 мс 55 мс и др.
Полезно сообщить время ответа 90-го процентиля, время ответа 80-го процентиля и т.д.
Наивный алгоритм состоит в том, чтобы вставить каждое время ответа в список. Когда запрашивается статистика, сортируйте список и получите значения в соответствующих позициях.
Использование памяти масштабируется линейно с количеством запросов.
Существует ли алгоритм, который дает "приблизительную" статистику процентилей при использовании ограниченной памяти? Например, скажем, я хочу решить эту проблему таким образом, чтобы обрабатывать миллионы запросов, но хочу использовать только один килобайт памяти для отслеживания процентилей (отбрасывание отслеживания для старых запросов не является вариантом, поскольку процентили должны для всех запросов).
Также необходимо, чтобы априорное знание распределения не было. Например, я не хочу заранее указывать диапазоны ковшей.