Все темы
97

Самый дешёвый маршрут по взвешенной карте

Tier 1Закрыто

Где применяется

1. Задача

Навигатор должен довезти тебя от дома до аэропорта. Одни дороги короткие, но забиты пробками. Другие длинные, но пустые. Число поворотов тебя не волнует. Нужен маршрут, который займёт меньше всего времени.

Число дорог здесь ничего не решает. Три быстрых участка трассы могут оказаться быстрее двух медленных городских улиц. У каждой связи есть вес, то есть цена: минуты, километры, задержка. Нужно найти наименьшую суммарную цену до каждого места, а число шагов не важно.

Та же задача встречается в компьютерной сети. У каждой линии своя измеренная задержка. Нужна наименьшая суммарная задержка от одного компьютера до всех остальных.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит
Кратчайшие расстояния по Дейкстре
dijkstra(6, [[[1, 4], [2, 1]], [[3, 1]], [[1, 2], [3, 5]], [[4, 3], [5, 6]], [[5, 1]], []], 0)
число над вершиной = лучшее известное расстояние от 0
куча из пар [расстояние, вершина], ближайшая первой
начало →[0, 0]

Ищем кратчайшее расстояние от вершины 0 до каждой вершины. Все расстояния сначала ∞, вершина 0 получает 0 и попадает в кучу.

Гонка скорости
Беллман-Форд и Дейкстра на одном и том же взвешенном графе из 16 вершин

Столбики: текущее расстояние от вершины 0 до каждой вершины. Столбик во всю высоту значит, что до вершины ещё не дошли.

Одна операция: одна проверка ребра или один шаг внутри кучи. За каждый кадр все дорожки делают одинаковое число операций, поэтому медленная отстаёт.

Алгоритм Беллмана-Форда O(V·E)
операций: 0
Алгоритм Дейкстры с кучей O(E log V)
операций: 0

 

А если чисел больше

Операции для n чисел и примерное время при 100 миллионах простых операций в секунду. Это оценка по тому же счёту, а не замер.

n = 1 000
Алгоритм Беллмана-Форда2 млн · 20 мс
Алгоритм Дейкстры с кучей14 тыс. · меньше 1 мс
n = 100 000
Алгоритм Беллмана-Форда20 млрд · 3,3 мин
Алгоритм Дейкстры с кучей2,2 млн · 22 мс
n = 10 000 000
Алгоритм Беллмана-Форда200 трлн · 23 дн.
Алгоритм Дейкстры с кучей299 млн · 3 с

Как узнать

Алгоритм Дейкстры (Dijkstra's algorithm)

Эти слова в условии значат этот паттерн

  • самый дешёвый/короткий путь со взвешенными рёбрами
  • неотрицательные веса рёбер
  • минимальная суммарная стоимость до каждого узла
  • задержка в сети / стоимость маршрута, а не число дорог
  • взвешенный граф, кратчайшие пути из одного источника

Похоже, но не то

V вершин и E рёбер дают O(E log V) с кучей. Отрицательные веса её ломают, там нужен Беллман-Форд.

На LeetCode

Задачи, где нужен самый дешёвый маршрут, а рёбра стоят по-разному и не меньше нуля. Дейкстра достаёт из мин-кучи ближайший незаконченный узел и делает релаксацию его рёбер.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности