DEV//UNIT

Топологическая сортировка

Порядок вершин, уважающий все направленные рёбра (алгоритм Кана).

время O(V + E)память O(V)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function topoSort(graph: Map<string, string[]>): string[] {
2 const indeg = new Map<string, number>()
3 for (const [v] of graph) indeg.set(v, 0)
4 for (const targets of graph.values()) {
5 for (const t of targets) indeg.set(t, (indeg.get(t) ?? 0) + 1)
6 }
7
8 const queue: string[] = [...indeg.entries()]
9 .filter(([, d]) => d === 0)
10 .map(([v]) => v)
11
12 const order: string[] = []
13 while (queue.length > 0) {
14 const v = queue.shift() as string
15 order.push(v)
16 for (const t of graph.get(v) ?? []) {
17 indeg.set(t, (indeg.get(t) ?? 0) - 1)
18 if ((indeg.get(t) ?? 0) === 0) queue.push(t)
19 }
20 }
21
22 return order
23}

Проблема

Порядок вершин, уважающий все направленные рёбра (алгоритм Кана).

Что вы видите

Зависимости сборки: узлы без входящих готовы сразу; снятие ребер освобождает следующих.

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

In-degree каждого узла; очередь готовых; обработанный узел уменьшает in-degree соседей. Цикл = очередь опустела раньше конца.

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

  1. 01

    In-degree

    Считаем входящие рёбра.

  2. 02

    Готовы

    In-degree 0 — в очередь.

  3. 03

    Снятие

    Обработка уменьшает счётчики соседей.

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

time
O(V + E)
space
O(V)

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

Edge cases

  • Пустой вход

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

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

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

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

Продукт

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

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

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

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

Shorts

«В каком порядке собирать зависимости»

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

Shorts 9:16

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

В каком порядке собирать зависимости
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/topological-sort