DEV//UNIT

Беллман-Форд

Кратчайшие пути с отрицательными рёбрами: V−1 проход ослабления.

время O(V · E)память O(V)уровень: начальный
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function bellmanFord(edges: Edge[], start: string): Map<string, number> {
2 const dist = new Map<string, number>()
3 for (const v of vertices(edges)) dist.set(v, Infinity)
4 dist.set(start, 0)
5
6 // V − 1 проход по ВСЕМ рёбрам
7 for (let pass = 1; pass < vertices(edges).length; pass++) {
8 for (const e of edges) {
9 const candidate = (dist.get(e.from) ?? Infinity) + e.weight
10 if (candidate < (dist.get(e.to) ?? Infinity)) {
11 dist.set(e.to, candidate)
12 }
13 }
14 }
15
16 // ещё один проход: если что-то улучшается — отрицательный цикл
17 for (const e of edges) {
18 if ((dist.get(e.from) ?? Infinity) + e.weight < (dist.get(e.to) ?? Infinity)) {
19 throw new Error('отрицательный цикл')
20 }
21 }
22
23 return dist
24}

Проблема

Кратчайшие пути с отрицательными рёбрами: V−1 проход ослабления.

Что вы видите

Таблички d на узлах обновляются проход за проходом; отрицательное ребро может улучшить уже «готовое».

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

Дейкстра ломается на отрицательных весах; BF честно расслабляет все рёбра V−1 раз. Лишний проход — детектор отрицательных циклов.

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

  1. 01

    Проход

    Все рёбра по кругу.

  2. 02

    Ослабление

    Через вершину дешевле — обновляем.

  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/bellman-ford