АЛГ-DJK-001O(V²)CLRSревизия 2026-05-04

Алгоритм Дейкстры онлайн

Поиск кратчайшего пути в графе с положительными весами рёбер. Сложность, реализация, сравнение с Беллман-Форд и A*.

⏱ ~30 сек · алгоритм · O(N)
Отчёт · АЛГ-DJK-001|алгоритм / численный метод
calcal.ru / algoritm-dejkstry-onlajn
Загрузка калькулятора…
O(V²)
Сложность
1956
Год создания
V·log V
С heap
+
Только положит. веса

Принцип алгоритма Дейкстры

Алгоритм Дейкстры (Dijkstra\'s algorithm) — классический метод поиска кратчайшего пути от одной (стартовой) вершины ко всем остальным в графе. Разработан Эдсгером Дейкстрой в 1956 г.

Основная идея: жадно расширять «фронт» уже обработанных вершин, всегда выбирая следующую вершину с минимальным текущим расстоянием. Гарантирует оптимальное решение для графов с положительными весами.

Псевдокод

function Dijkstra(Graph, start): dist[start] = 0 for each vertex v in Graph: if v != start: dist[v] = ∞ prev[v] = undefined Q.add_with_priority(v, dist[v]) while Q is not empty: u = Q.extract_min() for each neighbor v of u: alt = dist[u] + length(u, v) if alt < dist[v]: dist[v] = alt prev[v] = u Q.decrease_priority(v, alt) return dist[], prev[]

Сложность Дейкстры

  • Простая (массив): O(V²), где V — число вершин. Хороша для плотных графов (E ≈ V²).
  • Двоичная куча: O((V + E) log V). Лучше для разрежённых графов (E << V²).
  • Фибоначчиева куча: O(E + V log V). Теоретически быстрее, но константы большие.

Сравнение с другими алгоритмами

АлгоритмСложностьВесаПрименение
ДейкстраO(V²)только +маршрутизация
Беллман-ФордO(V·E)+ и −отрицательные веса
A*O(b^d)+GPS, игры
Флойд-УоршеллO(V³)+ и −все пары вершин
BFSO(V+E)без весовкратчайший по рёбрам
ИСТОЧНИКИ
  1. Cormen, Leiserson, Rivest, Stein — Introduction to Algorithms (CLRS), 4th ed.. CLRS. 2022.
  2. Dijkstra E.W. — A note on two problems in connexion with graphs. E.W. Dijkstra. 1959.
  3. Sedgewick R. — Algorithms 4th edition. Robert Sedgewick. 2011.
ЧАСТЫЕ ВОПРОСЫ

Часто задаваемые вопросы

Находит кратчайшие пути от одной (стартовой) вершины ко всем остальным в графе с ПОЛОЖИТЕЛЬНЫМИ весами рёбер. Основа большинства маршрутизаторов в сетях, GPS-навигаторов, систем планирования. Разработан в 1956 г. голландским учёным Эдсгером Дейкстрой.
Зависит от реализации: 1) Простая (массив): O(V²), где V — число вершин. 2) С двоичной кучей (heap): O((V + E) log V). 3) С Фибоначчиевой кучей: O(E + V log V) — теоретически лучшая, на практике медленнее из-за константы. Для разрежённых графов лучше куча, для плотных — массив.
Дейкстра: только положительные веса, быстрее (O(V²) vs O(V·E)). Беллман-Форд: работает с отрицательными весами, обнаруживает отрицательные циклы, но медленнее. Если нужны отрицательные веса (например, выгода от сделки) — только Беллман-Форд. Для маршрутизации — Дейкстра.
A* = Дейкстра + эвристика. Использует оценку «расстояния до цели» (например, евклидово). На больших графах с известной целью A* в 2-100 раз быстрее. Дейкстра: оптимально, но без эвристики. A*: с хорошей эвристикой — быстрее, без — становится Дейкстрой. В GPS-навигаторах используется A* (эвристика — расстояние по прямой).
1) Установить расстояния от старта до всех вершин = бесконечность (кроме самого старта = 0). 2) Положить старт в очередь. 3) Извлечь вершину с минимальным текущим расстоянием. 4) Для каждого её соседа: новое_расстояние = текущее + вес ребра. Если новое меньше известного — обновить. 5) Повторить 3-4 пока очередь не пуста.
Сетевая маршрутизация (OSPF, IS-IS), GPS-навигация, планирование задач с зависимостями (если без отрицательных весов), социальные сети (поиск ближайших друзей по уровням), компьютерные игры (поиск пути), оптимизация запросов в БД. Не подходит: графы с отрицательными весами, очень крупные графы (миллионы вершин — лучше A* или раздельный поиск).
Лиана Арифметова
АВТОРverifiedред. calcal.ru

Лиана Арифметова

Создатель и главный редактор

Миссия: демократизировать сложные расчёты. Превратить страх перед числами в ясность и контроль. Девиз: «Любая повторяющаяся задача заслуживает своего калькулятора».

Mathematical Engineering · МФТИ · редактирует каталог с 2012 года

Был ли этот калькулятор полезен?

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ

Инструмент справочный — не заменяет эксперта

Только для информационных целей. Все расчёты, результаты и данные, предоставляемые инструментом, носят исключительно ознакомительный и справочный характер. Они не являются профессиональной консультацией — медицинской, юридической, финансовой, инженерной или иной.

Точность результатов. Калькулятор основан на общепринятых формулах и методиках, однако фактические результаты могут отличаться в зависимости от индивидуальных условий, исходных данных и применяемых стандартов. Мы не гарантируем полноту, точность или актуальность приведённых расчётов.

Профессиональные решения — медицинские, финансовые, инженерные — должны приниматься только после консультации с квалифицированным специалистом. Не используйте автоматический расчёт как единственное основание для важных решений.

Ограничение ответственности. Авторы и разработчики сервиса не несут ответственности за прямой или косвенный ущерб, возникший из-за использования данных расчётов. Пользователь принимает на себя всю ответственность за интерпретацию результатов.