Как насчет процедуры биннинга? Предположим (в целях иллюстрации), что вы знаете, что значения находятся в диапазоне от 1 до 1 миллиона. Установите N лотков размера S. Поэтому, если S = 10000, у вас будет 100 лотков, соответствующих значениям [1: 10000, 10001: 20000, ..., 990001: 1000000]
Затем, шаг за шагом значения. Вместо того, чтобы хранить каждое значение, просто увеличьте счетчик в соответствующей ячейке. Используя среднюю точку каждой ячейки в качестве оценки, вы можете сделать разумное приближение к медиане. Вы можете масштабировать его до точного или грубого разрешения, изменяя размер ячеек. Вы ограничены только тем, сколько у вас памяти.
Поскольку вы не знаете, насколько велики могут быть ваши значения, просто выберите размер корзины, достаточно большой, чтобы вы не могли исчерпать память, используя несколько быстрых вычислений за пределами конверта. Вы также можете хранить корзины редко, так что вы можете добавить корзину только в том случае, если она содержит значение.
Редактировать:
Ссылка, предоставленная ryfm, дает пример того, как это сделать, с дополнительным шагом использования кумулятивных процентов для более точной оценки точки в пределах среднего бина, а не просто с использованием средних точек. Это хорошее улучшение.