0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Алгоритм Дейкстры - это алгоритм, который находит кратчайшие пути от одной заданной вершины до всех остальных вершин во взвешенном графе</p>
1
<p>Алгоритм Дейкстры - это алгоритм, который находит кратчайшие пути от одной заданной вершины до всех остальных вершин во взвешенном графе</p>
2
<p>Граф - это набор вершин и ребер. Вершины описывают объекты, ребра - связи между ними. У каждого ребра есть вес. Вес задает стоимость перехода: расстояние, время, цену, расход энергии. Алгоритм применим только тогда, когда все веса ребер неотрицательные. При отрицательных весах результат может быть неверным.</p>
2
<p>Граф - это набор вершин и ребер. Вершины описывают объекты, ребра - связи между ними. У каждого ребра есть вес. Вес задает стоимость перехода: расстояние, время, цену, расход энергии. Алгоритм применим только тогда, когда все веса ребер неотрицательные. При отрицательных весах результат может быть неверным.</p>
3
<p>Алгоритм вычисляет не один маршрут "из A в B", а минимальные расстояния от источника ко всем достижимым вершинам. При сохранении предшественников можно восстановить сами пути.</p>
3
<p>Алгоритм вычисляет не один маршрут "из A в B", а минимальные расстояния от источника ко всем достижимым вершинам. При сохранении предшественников можно восстановить сами пути.</p>
4
<h2>Где используют алгоритм</h2>
4
<h2>Где используют алгоритм</h2>
5
<p>Алгоритм подходит для задач, где систему удобно представить графом, а цель - минимизировать суммарную стоимость:</p>
5
<p>Алгоритм подходит для задач, где систему удобно представить графом, а цель - минимизировать суммарную стоимость:</p>
6
<ul><li><p>построение маршрутов на картах и в навигации;</p>
6
<ul><li><p>построение маршрутов на картах и в навигации;</p>
7
</li>
7
</li>
8
<li><p>выбор оптимальных пересадок в транспортных сервисах;</p>
8
<li><p>выбор оптимальных пересадок в транспортных сервисах;</p>
9
</li>
9
</li>
10
<li><p>маршрутизация в сетях передачи данных;</p>
10
<li><p>маршрутизация в сетях передачи данных;</p>
11
</li>
11
</li>
12
<li><p>планирование движения роботов и автономных устройств;</p>
12
<li><p>планирование движения роботов и автономных устройств;</p>
13
</li>
13
</li>
14
<li><p>поиск пути и принятие решений в игровом ИИ;</p>
14
<li><p>поиск пути и принятие решений в игровом ИИ;</p>
15
</li>
15
</li>
16
<li><p>анализ потоков в инженерных моделях и схемах.</p>
16
<li><p>анализ потоков в инженерных моделях и схемах.</p>
17
</li>
17
</li>
18
</ul><p>В каждом случае меняется смысл веса, но правило одно: суммируется стоимость пройденных ребер.</p>
18
</ul><p>В каждом случае меняется смысл веса, но правило одно: суммируется стоимость пройденных ребер.</p>
19
<h2>Как работает алгоритм</h2>
19
<h2>Как работает алгоритм</h2>
20
<p>Алгоритм выполняется шаг за шагом. Он поддерживает текущие оценки расстояний от источника и постепенно "закрепляет" вершины с уже найденным минимальным расстоянием.</p>
20
<p>Алгоритм выполняется шаг за шагом. Он поддерживает текущие оценки расстояний от источника и постепенно "закрепляет" вершины с уже найденным минимальным расстоянием.</p>
21
<p>Состояния, которые используются в процессе:</p>
21
<p>Состояния, которые используются в процессе:</p>
22
<ul><li><p>метка расстояния для каждой вершины (лучшее найденное значение);</p>
22
<ul><li><p>метка расстояния для каждой вершины (лучшее найденное значение);</p>
23
</li>
23
</li>
24
<li><p>признак обработанности вершины;</p>
24
<li><p>признак обработанности вершины;</p>
25
</li>
25
</li>
26
<li><p>при необходимости - массив предшественников для восстановления маршрута.</p>
26
<li><p>при необходимости - массив предшественников для восстановления маршрута.</p>
27
</li>
27
</li>
28
</ul><h2>Шаги выполнения</h2>
28
</ul><h2>Шаги выполнения</h2>
29
<ol><li><p>Инициализация</p>
29
<ol><li><p>Инициализация</p>
30
<p>Источнику присваивается 0. Остальным вершинам присваивается бесконечность. Все вершины считаются необработанными.</p>
30
<p>Источнику присваивается 0. Остальным вершинам присваивается бесконечность. Все вершины считаются необработанными.</p>
31
</li>
31
</li>
32
<li><p>Выбор вершины</p>
32
<li><p>Выбор вершины</p>
33
<p>Среди необработанных выбирается вершина с минимальной меткой расстояния. Она становится текущей.</p>
33
<p>Среди необработанных выбирается вершина с минимальной меткой расстояния. Она становится текущей.</p>
34
</li>
34
</li>
35
<li><p>Релаксация ребер</p>
35
<li><p>Релаксация ребер</p>
36
<p>Для каждого соседа текущей вершины считается новая длина пути:</p>
36
<p>Для каждого соседа текущей вершины считается новая длина пути:</p>
37
<p>dist[current] + weight(current, neighbor)</p>
37
<p>dist[current] + weight(current, neighbor)</p>
38
<p>Если новое значение меньше текущей метки соседа, метка обновляется. При восстановлении пути также обновляется предшественник.</p>
38
<p>Если новое значение меньше текущей метки соседа, метка обновляется. При восстановлении пути также обновляется предшественник.</p>
39
</li>
39
</li>
40
<li><p>Фиксация</p>
40
<li><p>Фиксация</p>
41
<p>Текущая вершина помечается обработанной. Ее метка больше не изменяется.</p>
41
<p>Текущая вершина помечается обработанной. Ее метка больше не изменяется.</p>
42
<p>Цикл повторяется, пока есть необработанные вершины с конечной меткой. Если вершина остается с бесконечностью, она недостижима из источника.</p>
42
<p>Цикл повторяется, пока есть необработанные вершины с конечной меткой. Если вершина остается с бесконечностью, она недостижима из источника.</p>
43
</li>
43
</li>
44
</ol><h2>Что получается на выходе</h2>
44
</ol><h2>Что получается на выходе</h2>
45
<p>Результат работы - минимальные расстояния от источника:</p>
45
<p>Результат работы - минимальные расстояния от источника:</p>
46
<ul><li><p>до каждой достижимой вершины есть численное значение стоимости пути;</p>
46
<ul><li><p>до каждой достижимой вершины есть численное значение стоимости пути;</p>
47
</li>
47
</li>
48
<li><p>при хранении предшественников можно восстановить конкретный маршрут.</p>
48
<li><p>при хранении предшественников можно восстановить конкретный маршрут.</p>
49
</li>
49
</li>
50
</ul><p>Слово "расстояние" условное. В роли веса часто используют:</p>
50
</ul><p>Слово "расстояние" условное. В роли веса часто используют:</p>
51
<ul><li><p>время прохождения;</p>
51
<ul><li><p>время прохождения;</p>
52
</li>
52
</li>
53
<li><p>стоимость;</p>
53
<li><p>стоимость;</p>
54
</li>
54
</li>
55
<li><p>задержку в сети;</p>
55
<li><p>задержку в сети;</p>
56
</li>
56
</li>
57
<li><p>расход энергии;</p>
57
<li><p>расход энергии;</p>
58
</li>
58
</li>
59
<li><p>штраф или риск.</p>
59
<li><p>штраф или риск.</p>
60
</li>
60
</li>
61
</ul><h2>Ограничения и важные условия</h2>
61
</ul><h2>Ограничения и важные условия</h2>
62
<p>Алгоритм Дейкстры требует неотрицательных весов. При наличии отрицательных ребер нужно применять другие методы. Точность результата зависит не от данных, а от соблюдения условия по весам. Эффективность реализации зависит от структуры графа и выбранных структур данных, поэтому для больших графов используют приоритетные очереди.</p>
62
<p>Алгоритм Дейкстры требует неотрицательных весов. При наличии отрицательных ребер нужно применять другие методы. Точность результата зависит не от данных, а от соблюдения условия по весам. Эффективность реализации зависит от структуры графа и выбранных структур данных, поэтому для больших графов используют приоритетные очереди.</p>