Комбинаторные алгоритмы для программистов

          

Алгоритм Дейкстры нахождения кратчайшего пути


Рассмотрим алгоритм нахождения путей в ориентированном графе. Пусть есть ориентированный граф

Алгоритм Дейкстры нахождения кратчайшего пути
, у которого все дуги имеют неотрицательные метки (веса дуг), а одна вершина определена как источник. Задача состоит в нахождении весов кратчайших путей от источника ко всем другим вершинам граф
Алгоритм Дейкстры нахождения кратчайшего пути
. Здесь длина пути определяется как сумма весов дуг, составляющих путь. Эта задача часто называется задачей нахождения кратчайшего пути с одним источником. Отметим, что мы будем говорить о длине пути даже тогда, когда она измеряется в других, не линейных, единицах измерения, например, во временных единицах или в денежном эквиваленте.

Можно представить орграф

Алгоритм Дейкстры нахождения кратчайшего пути
в виде карты маршрутов рейсовых полетов из одного города в другой. Каждая вершина соответствует городу, а ребро (дуга)
Алгоритм Дейкстры нахождения кратчайшего пути
- рейсовому маршруту из города
Алгоритм Дейкстры нахождения кратчайшего пути
в город
Алгоритм Дейкстры нахождения кратчайшего пути
. Вес дуги
Алгоритм Дейкстры нахождения кратчайшего пути
- это время полета из города
Алгоритм Дейкстры нахождения кратчайшего пути
в город
Алгоритм Дейкстры нахождения кратчайшего пути
. В этом случае решение задачи нахождения кратчайшего пути с одним источником для ориентированного графа трактуется как минимальное время перелета между различными городами.

Для решения поставленной задачи будем использовать "жадный" алгоритм, который называют алгоритмом Дейкстры (Dijkstra). Алгоритм строит множество

Алгоритм Дейкстры нахождения кратчайшего пути
вершин, для которых кратчайшие пути от источника уже известны. На каждом шаге к множеству
Алгоритм Дейкстры нахождения кратчайшего пути
добавляется та из оставшихся вершин, расстояние до которой от источника меньше, чем для других оставшихся вершин. Если веса всех дуг неотрицательны, то можно быть уверенным, что кратчайший путь от источника к конкретной вершине проходит только через вершины множество
Алгоритм Дейкстры нахождения кратчайшего пути
. Назовем такой путь особым. На каждом шаге алгоритма используется также массив
Алгоритм Дейкстры нахождения кратчайшего пути
, в который записываются длины кратчайших особых путей для каждой вершины. Когда множество
Алгоритм Дейкстры нахождения кратчайшего пути
будет содержать все вершины орграфа, то есть для всех вершин будут найдены особые пути, тогда массив
Алгоритм Дейкстры нахождения кратчайшего пути
будет содержать длины кратчайших путей от источника к каждой вершине.



Содержание раздела