Деление на ноль

Двоичная куча: интерактивная анимация (Binary Heap)

Основа очереди с приоритетом: минимум всегда лежит в корне

Визуализация

Сценарий: Вставка (с просеиванием вверх)
Сценарий:

Дерево кучи - минимум всегда лежит в корне

Массив - индексы a[i] совпадают с узлами дерева

Легенда цветов
узел кучи сравниваем с узлом просеиваемый элемент обмениваем
Нажмите "Пуск" или листайте по шагам.
Размер кучи: 0 Сравнения: 0 Шаг: 0 / 0 Сложность по времени: -

Как работает двоичная куча

Идея структуры: Двоичная куча (Min-Heap) - это полное двоичное дерево, в котором для каждого узла выполняется главное свойство: значение родителя меньше или равно значениям его потомков. Из-за этого минимальный элемент всегда находится в самом корне дерева и доступен мгновенно, за O(1).

Сложность

Сложность - это оценка того, как быстро растет потребление ресурса при росте числа элементов n. Ресурса у структуры два, поэтому и оценки две: по времени и по памяти. Обе записывают через O-нотацию - у нас есть отдельная анимация о том, как читать такие записи.

Операции над кучей эффективны благодаря небольшой высоте дерева. Для кучи из n элементов высота дерева равна целой части log₂(n): чтобы дерево стало глубже на один уровень, число элементов должно удвоиться. Поэтому путь элемента при просеивании вверх или вниз никогда не превышает высоту дерева, гарантируя логарифмическую сложность.

По времени

Показывает зависимость времени работы от количества элементов в куче. В таблице приведены данные для основных операций структуры.

Операция Время Комментарий
Получение минимума (peek) O(1) Минимум всегда находится в корне (нулевой элемент массива).
Вставка (insert) O(log n) Элемент может пройти путь от самого низа дерева до корня (просеивание вверх).
Извлечение минимума (extract) O(log n) После удаления корня, последний элемент может опуститься до самого низа (просеивание вниз).
Построение из массива O(n) Эффективный алгоритм Флойда позволяет построить кучу за линейное время, что быстрее, чем N вставок по O(log n).

По памяти

Характеристика Оценка Комментарий
Затраты памяти O(n) Куча хранит свои элементы внутри единого массива (или динамического массива).

Свойства

Особенности организации данных в Двоичной куче:

Свойство Значение Комментарий
Упорядоченность Частичная Куча не гарантирует полной сортировки элементов массива. Гарантируется только то, что родитель всегда меньше или равен потомкам.
Представление Массив Благодаря структуре полного двоичного дерева, кучу можно хранить в сплошном массиве, не выделяя память под узлы и указатели.

Примеры реализации: Двоичная куча (Binary Heap)

Хотите разобрать тему глубже? В нашем бесплатном курсе есть урок про пирамидальную сортировку - с подробной теорией, задачами и проверочными вопросами. Куча там построена на максимум: сортировке по возрастанию удобно забирать из корня наибольший элемент.