Как ускорить поиск top-N без полной сортировки

Поддерживайте min-heap размера N. Корень хранит наименьший из текущих лучших; более крупный новый элемент заменяет его. Время O(M log N), память O(N).

Короткий ответ

Что ответить на собеседовании

Поддерживайте min-heap размера N. Корень хранит наименьший из текущих лучших; более крупный новый элемент заменяет его. Время O(M log N), память O(N).

Подробный разбор

Ответ с пояснениями

Условие

Нужно выбрать N наибольших значений из потока M элементов, где N намного меньше M. Как избежать сортировки всего набора и какую сложность получить?

Ответ

Поддерживайте min-heap размера N. Корень хранит наименьший из текущих лучших; более крупный новый элемент заменяет его. Время O(M log N), память O(N).

Первые N элементов заполняют heap, затем каждый следующий сравнивается с корнем. Если нужен отсортированный результат, в конце отсортируйте только N выбранных значений. При N=0 сразу возвращайте пустой результат, при N>M — все элементы. Для массива существуют и алгоритмы отбора, но у потока heap удобнее из-за ограниченной памяти.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее