Python-курс
⚡ Эффективные сортировки и куча

Куча и приоритетная очередь

heapq и задача top-K за O(n log k).

~30 минПродвинутый 2 урока

Зачем нужна куча

Куча (heap) — структура, которая всегда быстро отдаёт минимальный (или максимальный) элемент. Вставка и извлечение минимума — O(log n), а посмотреть минимум — O(1). Это идеально для приоритетной очереди: обрабатывать задачи по важности, а не по порядку поступления.

Куча — это бинарное дерево, где каждый родитель не больше своих детей (min-heap). Поэтому в корне всегда минимум. В Python куча хранится в обычном спискеИзменяемая упорядоченная коллекция элементов: [1, 2, 3]. По-английски list., а работать с ней помогает модуль heapq.

1 3 2 7 5 8 ← минимум в корне
Родитель ≤ детей. Минимум всегда наверху — достаётся за O(1).
heapq-basics.py

heapify делает из списка кучу на месте. heappush добавляет элемент, heappop извлекает и возвращает минимум, сохраняя свойство кучи. Так можно «вытаскивать» элементы по возрастанию по одному.

Шаг 1 из 8