Не существует алгоритма для точного определения медианы отсортированной последовательности неизвестной длины, которая работает с фиксированным объемом памяти.
Чтобы увидеть это, рассмотрим такой алгоритм.Скажем, у него есть буфер длины N
для хранения элементов из последовательности.Пока этот буфер не заполнен, алгоритм просто помещает в него элементы, отслеживая медиану при этом.
Когда алгоритм сканирует N+1
-й элемент и далее, он должен выбрать один элемент для отбрасывания на каждом шаге.Предположим, он уже отсканировал 2N
элементов, уронив половину из них.Давайте дадим ему преимущество сомнения и скажем, что он еще не отбросил медиану входного потока.
Рассмотрим, когда он сканирует 2N+1
-й элемент.Какой предмет он должен уронить?Он не может отбросить наименьший элемент, который у него был до сих пор, поскольку после этого элемента ввод может быть исчерпан, и в этом случае самым низким может быть медиана.Аналогично для любого возможного элемента, который он может отбросить, у входной последовательности есть будущее, которое делает этот отброшенный элемент медианой.
Если вы готовы принять приблизительные результаты, то этот оценщик может работать для вас.