В этот более ранний вопрос ОП запросил структуру данных, аналогичную стеку, поддерживающую следующие операции в O (1) раз каждый:
- Push, который добавляет новый элемент поверх стека,
- Поп, который удаляет верхний элемент из стека,
- Find-Max, который возвращает (но не удаляет) самый большой элемент стека и
- Find-Min, который возвращает (но не удаляет) наименьший элемент стека.
Несколько минут назад я нашел этот связанный вопрос с просьбой дать разъяснения по аналогичной структуре данных, вместо того чтобы разрешать использование max и мин для запроса, позволяет запрашивать медианный элемент стека. Эти две структуры данных, по-видимому, являются особым случаем более общей структуры данных, поддерживающей следующие операции:
- Push, который нажимает элемент поверх стека,
- Поп, который выставляет верхнюю часть стека, и
- Find-Kth, который для фиксированного k определяется при создании структуры, возвращает k-й наибольший элемент стека.
Можно поддерживать все эти операции, сохраняя стек и сбалансированное двоичное дерево поиска, содержащее верхние элементы k, которые позволят всем этим операциям работать в O (log k) времени. Мой вопрос таков: возможно ли реализовать вышеприведенную структуру данных быстрее этого? То есть мы можем получить O (1) для всех трех операций? Или возможно O (1) для push и pop и O (log k) для статистического поиска заказа?