Поиск бегущей медианы из потока целых чисел

Возможный дубликат:
Алгоритм скользящей медианы в C

Учитывая, что целые числа считываются из потока данных. Найти медиану прочитанных до сих пор элементов эффективным способом.

Решение, которое я прочитал: мы можем использовать максимальную кучу слева для представления элементов, которые меньше эффективной медианы, и минимальную кучу справа для представления элементов, которые больше эффективной медианы.

После обработки входящего элемента количество элементов в кучах отличается не более чем на 1 элемент.Когда обе кучи содержат одинаковое количество элементов, мы находим среднее значение корневых данных кучи как эффективную медиану. Когда кучи не сбалансированы, мы выбираем эффективную медиану из корня кучи, содержащей больше элементов.

Но как бы мы построили максимальную кучу и минимальную кучу, то есть как мы узнали бы здесь эффективную медиану? Я думаю, что мы бы вставили 1 элемент в max-heap, а затем следующий 1 элемент в min-heap, и так далее для всех элементов. Поправьте меня, если я ошибаюсь здесь.

219
задан Community 23 May 2017 в 01:33
поделиться