Куча (приоритетная очередь)
Min-heap: минимум в корне, вставка и извлечение за O(log n).
1class MinHeap {2 private a: number[] = []3 4 insert(v: number): void {5 this.a.push(v)6 let i = this.a.length - 17 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 min19 }20 21 private siftDown(i: number): void {22 while (true) {23 const l = 2 * i + 1, r = 2 * i + 224 let smallest = i25 if (l < this.a.length && this.a[l] < this.a[smallest]) smallest = l26 if (r < this.a.length && this.a[r] < this.a[smallest]) smallest = r27 if (smallest === i) return28 swap(this.a, i, smallest)29 i = smallest30 }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. Планировщики, таймеры, алгоритмы на графах — везде куча.
Пошаговый разбор
- 01
insert
Новый лист всплывает, пока меньше родителя.
- 02
extractMin
Корень уходит, последний sift-down.
- 03
Инвариант
Родитель всегда ≤ детей.
Complexity и ограничения
См. complexity в шапке страницы.
Edge cases
- Пустой вход
Корректно завершается без лишних шагов.
- Вырожденный случай
Минимум работы — сразу ответ.
Где встречается в реальности
Продукт
Классический приём в реальных системах.
Собеседования
Стандартный вопрос на понимание структуры.
Связанные алгоритмы
«Кто важнее — тот выше: куча за 60 секунд»
Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.
Shorts 9:16
Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.