Довідка та теорія
Бінарна мін-купа — це повне бінарне дерево, у якого кожен рівень заповнений повністю, окрім, можливо, останнього, що заповнюється зліва направо, і яке підтримує інваріант: кожен предок менший або дорівнює обом своїм нащадкам.
Представлення масивом
Оскільки дерево завжди повне, покажчики не потрібні. Для
вузла з індексом i його предок знаходиться за
індексом ⌊(i−1)/2⌋, а нащадки — за
2i+1 та 2i+2. Форма дерева повністю
визначається схемою індексації.
Спливання (вставка)
Нове значення додається в кінець масиву, потім порівнюється зі
своїм предком і обмінюється з ним, поки менше за нього, доки
властивість купи не відновиться або вузол не досягне кореня.
Це один шлях від кореня до листка, тому складність
O(log n).
Занурення (видалення мінімуму)
Видалення мінімуму обмінює корінь з останнім елементом,
зменшує масив на один, а потім повторно обмінює новий корінь з
меншим із нащадків, доки властивість купи не відновиться.
Також O(log n).
Побудова купи Флойда за O(n)
Виклик занурення для кожного внутрішнього вузла, починаючи з
⌊n/2⌋−1 і закінчуючи 0, будує купу з
n довільних значень. Хоча це виглядає як
O(n log n), більшість вузлів розташовані ближче
до низу дерева, де занурення проходить лише короткий шлях;
сумарна робота по всіх рівнях утворює збіжний ряд, що дає
O(n).
Застосування
Бінарні купи ефективно реалізують черги з пріоритетом,
лежать в основі пірамідального сортування (сортування
на місці за O(n log n)) та підтримують фронт
алгоритмів Дейкстри й Прима, де потрібно
постійно знаходити й видаляти наступний найдешевший елемент.