Учитывая последовательность данных (она может иметь дубликаты), перемещение фиксированного размера окна, переместите окно на каждой итерации с начала данных последовательности, такой, что (1) из окна удаляется старейший элемент данных, а новые данные элемент вставляется в окно (2) найдите медиану данных внутри окна при каждом перемещении.
Следующие сообщения не помогают.
Эффективно найти медианное значение случайной последовательности
объединение данных на основе временного окна в R
Моя идея:
Используйте 2 кучи, чтобы удерживать медианную. Со стороны окна сортировать данные в окне на первой итерации минимальная куча удерживает большую часть и максимальную кучу занимает меньшую часть. Если в окне имеется нечетное количество данных, максимальная куча возвращает медианную в противном случае среднее арифметическое верхних элементов две кучи - медиана.
Когда новые данные вставляются в окно, удалите самые старые данные из одного кучи и сравнить новые данные с вершиной максимальной и минимальной кучи, чтобы чтобы решить, какая куча данных должна быть поставлена. Затем найдите медианную как на первой итерации.
Но, как найти элемент данных в куче, проблема. Куча - двоичная дерево не двоичное дерево поиска.
Можно ли решить это с помощью O (n) или O (n * lg m), где m - размер окна и пространство: O (1)?
Любая помощь действительно ценится.
Спасибо