HTML Diff
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>