Литература / Олейник.Лекции по дискретной математике / вариант .doc / Глава 3 / параграф 3.16
.doc3.16. Задача о кратчайшем пути
Определение. Взвешенный связный орграф называется сетью.
Пусть на графе имеется путь из вершины в вершину и - последовательность дуг этого пути. Число называется весом или длиной пути .
Наименьшую из длин -путей назовем расстоянием от до , а тот -путь, длина которого равна расстоянию от до , будем называть кратчайшим -путем.
Задача о кратчайшем пути состоит в следующем: в заданной сети найти расстояние и кратчайший путь от фиксированной вершины до остальных вершин.
Рассмотрим алгоритм Дейкстры, позволяющий решить задачу о кратчайшем пути.
Для удобства изложения введем ряд условных обозначений. Если существует хотя бы один путь из вершины в вершину , то расстояние от до будем обозначать через . Каждой паре вершин и будем ставить в соответствие число , полагая его равным весу дуги, исходящей из и заходящей в , если таковая существует. Если же такой дуги в графе нет, то полагаем .
Будем говорить, что вершина ближайшая к вершине из подмножества множества вершин графа, если расстояние от до является наименьшим из расстояний от вершины до других вершин из множества .
В основе алгоритма Дейкстры лежит принцип жадности, заключающийся в последовательном вычислении расстояний сначала до ближайшей к вершине, затем до следующей ближайшей и т.д.
Алгоритм Дейкстры. 0-ой шаг. Находится первая ближайшая к вершине вершина: такой вершиной является сама вершина , для которой .
-ый шаг. Пусть к началу шага определены вершин, ближайшие к вершине , т.е. определено множество , и для всех этих вершин вычислены расстояния , . Обозначим через множество .
Если множество пусто, то все возможные расстояния от фиксированной вершины до остальных вершин определены на -ом шаге.
В противном случае из равенства для каждой вершины положим
.
Если ни для одной вершины этот минимум определить нельзя, то все возможные расстояния от фиксированной вершины до остальных вершин определены на -ом шаге.
В противном случае из равенства
,
определится вершина , ближайшая к вершине из вершин подмножества , причем
.
Таким образом, по окончании -го шага множество вершин, до которых от вершины вычислено расстояние, расширяется на один элемент.
Обоснование алгоритма Дейкстры. Обоснуем вначале равенство . Пусть - произвольный -путь. Поскольку - длина одного из путей из вершины в вершину , то достаточно доказать неравенство . Среди всех вершин пути выберем вершину с наименьшим номером среди тех, которые не входят в множество . Так как начальная вершина пути входит в , а конечная не входит в , то такой номер найдется. Итак, , . Тогда из определения и длины пути вытекают соотношения
.
Кроме того, в силу выбора вершины имеем, что . С учетом этих неравенств получаем, что . Следовательно, .
Осталось убедиться, что вершина является -ой ближайшей к вершиной. Для этого достаточно доказать неравенство для всех . Зафиксируем одну из вершин . Обозначим через кратчайший путь из вершины в вершину , а через - кратчайший путь из вершины в вершину . Тогда и . Выше доказано равенство . Повторим для пути рассуждения, приведенные в первой части обоснования для пути . Среди всех вершин пути выберем вершину с наименьшим номером среди тех, которые не входят в множество . Имеем: , . Тогда
.
Кроме того, в силу выбора вершины имеем, что . Следовательно,
,
что и требовалось доказать. ■
Восстановление кратчайшего пути. Кратчайший путь от вершины до вершины восстанавливается пошагово, начиная с вершины до возврата к вершине . Опишем один шаг возвращения. Для вершины среди всех вершин , для которых существует дуга, ведущая из в , находится такая дуга, для которой выполнено условие . Тем самым восстанавливается последняя дуга кратчайшего пути от до .
Пример 1. В графе, изображенном на рисунке, найти расстояние от вершины до остальных вершин и восстановить кратчайший путь от вершины 1 до вершины 5.
k |
|||||||
0 |
|
0 |
|
|
|
|
|
1 |
{1} |
|
1 |
3 |
1 |
||
2 |
{1,2} |
|
|
2 |
1 |
||
3 |
{1,2,4} |
|
|
2 |
|
4 |
|
4 |
{1,2,4,3} |
|
|
|
|
3 |
|
5 |
{1,2,4,3,6} |
|
|
|
|
4 |
|
Кратчайший путь от первой вершины до пятой вершины проходит последовательно через вершины 1,2,3,6,5.