DEV//UNIT
← Алгоритмыdata-structures

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

Min-heap: минимум в корне, вставка и извлечение за O(log n).

время O(log n) insert/extractпамять O(n)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1class MinHeap {
2 private a: number[] = []
3
4 insert(v: number): void {
5 this.a.push(v)
6 let i = this.a.length - 1
7 while (i > 0 && this.a[i] < this.a[parent(i)]) {
8 swap(this.a, i, parent(i))
9 i = parent(i)
10 }
11 }
12
13 extractMin(): number {
14 const min = this.a[0]
15 this.a[0] = this.a[this.a.length - 1]
16 this.a.pop()
17 this.siftDown(0)
18 return min
19 }
20
21 private siftDown(i: number): void {
22 while (true) {
23 const l = 2 * i + 1, r = 2 * i + 2
24 let smallest = i
25 if (l < this.a.length && this.a[l] < this.a[smallest]) smallest = l
26 if (r < this.a.length && this.a[r] < this.a[smallest]) smallest = r
27 if (smallest === i) return
28 swap(this.a, i, smallest)
29 i = smallest
30 }
31 }
32}
33
34function parent(i: number): number {
35 return Math.floor((i - 1) / 2)
36}

Проблема

Min-heap: минимум в корне, вставка и извлечение за O(log n).

Что вы видите

Дерево-куча: новые элементы всплывают к корню, минимум уходит первым.

Как это работает

Приоритетная очередь: вставка со sift-up (всплытие), extractMin со sift-down. Планировщики, таймеры, алгоритмы на графах — везде куча.

Пошаговый разбор

  1. 01

    insert

    Новый лист всплывает, пока меньше родителя.

  2. 02

    extractMin

    Корень уходит, последний sift-down.

  3. 03

    Инвариант

    Родитель всегда ≤ детей.

Complexity и ограничения

time
O(log n) insert/extract
space
O(n)

См. complexity в шапке страницы.

Edge cases

  • Пустой вход

    Корректно завершается без лишних шагов.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Продукт

Классический приём в реальных системах.

Собеседования

Стандартный вопрос на понимание структуры.

Связанные алгоритмы

Shorts

«Кто важнее — тот выше: куча за 60 секунд»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Кто важнее — тот выше: куча за 60 секунд
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/priority-queue