Лекции Олейник PDF / Р_3_9
.pdf
§ 3.9. Отыскание кратчайших путей. Алгоритм Дейкстры
Сеть. Длина пути. Расстояние между вершинами. Кратчайший путь. Задача отыскания кратчайших путей.
Базовые понятия и утверждения
Ориентированный граф G (V ,U ) |
называют взвешенным, если на |
множестве его дуг задано отображение |
:U R , т.е. каждой дуге |
u (a, b) приписано действительное число (u) , называемое весом, |
|
или длиной дуги. Взвешенный связный орграф называется сетью.
В этом параграфе речь пойдет исключительно об ориентированных графах, поэтому далее, чтобы избежать излишней громоздкости,
прилагательное «ориентированный» будем опускать. |
|
|
|
Ограничимся случаем неотрицательных весов. |
Пусть на графе G |
||
имеется путь P |
из вершины a в вершину b |
и |
u1, u2 ,..., uk - |
|
k |
|
|
последовательность дуг этого пути. Число P |
ui называется |
||
|
i 1 |
|
|
весом, или длиной пути P . |
|
|
|
Наименьшую из длин путей из вершины a в вершину b назовем |
|||
расстоянием от a |
до b , а тот путь из a в b , длина которого равна |
||
расстоянию от a до b , будем называть кратчайшим путем из a в b . Рассмотрим задачу о кратчайших путях: в заданной сети G
найти расстояние и кратчайший путь от фиксированной вершины s до остальных вершин.
Одним из алгоритмов ее решения является алгоритм Дейкстры. Прежде чем перейти к его изложению, введем ряд условных обозначений.
Через d (v) обозначим расстояние от s до v , т.е. длину кратчайшего пути из s в v (если, конечно, хотя бы один путь из s в v существует). Каждой паре вершин v и w поставим в соответствие число c(v, w) , которое определим следующим образом: если в графе
186
есть дуги, исходящие из v и заходящие в положим равным весу самой «легкой» из них; если ни одной такой дуги в графе нет, то будем считать
Алгоритм Дейкстры последовательно находит ближайшую к s вершину (т.е. вершину, расстояние от s до которой является наименьшим из расстояний от вершины s до других вершин сети) и расстояние от s до нее, затем следующую ближайшую к s вершину и т.д.
На каждом шаге алгоритма всем вершинам графа даются «метки», временные либо постоянные. Постоянные метки имеют те вершины, расстояние до которых от вершины s уже определено (собственно, это расстояние и является постоянной меткой вершины). Любая другая вершина w получает временную метку, равную длине того пути, который является самым коротким (т.е. наименьшим по длине) из всех путей из s в w , идущих, вплоть до w , исключительно через вершины с постоянными метками.
Перейдем к точной формулировке алгоритма Дейкстры.
Алгоритм Дейкстры. 0 - й ша г . Определим первую ближайшую к
s вершину: это сама вершина s , для нее d(s) 0 . |
|
||||
k - й |
ша г . Пусть к |
началу |
шага |
определены |
k вершин, |
ближайшие |
к вершине |
s , |
т.е. |
определено |
множество |
Sk v1 s, v2 ,..., vk , и для всех вершин этого множества вычислены
расстояния |
d (vi ) , i 1, 2,..., k (эти расстояния удобно рассматривать |
||
как постоянные метки вершин из Sk ). Обозначим через Fk |
множество |
||
V \ Sk . |
|
|
|
Если |
множество Fk |
пусто, то все возможные расстояния от |
|
вершины s |
до остальных вершин определены до k -го шага. |
|
|
В противном случае |
для каждой вершины w Fk |
определим |
|
временную метку |
|
|
|
Dk w min d v c v, w .
v Sk
Если ни для одной вершины этот минимум определить нельзя, то все возможные расстояния от вершины s до остальных вершин определены до k -го шага.
187
В противном случае из равенства
|
Dk |
vk 1 min Dk w |
|
|
|
|
w Fk |
|
|
определится вершина |
vk 1 , ближайшая к s из вершин подмножества |
|||
Fk , причем |
|
|
|
|
|
|
d (vk 1 ) Dk vk 1 |
|
|
(вершина vk 1 получает |
при этом |
постоянную |
метку - расстояние |
|
d vk 1 ). |
|
|
|
|
Таким образом, |
по окончании |
k -го шага множество вершин, до |
||
которых от вершины |
s |
вычислено расстояние, |
расширяется на один |
|
элемент.
Восстановление кратчайшего пути. Кратчайший путь от вершины s до вершины w восстанавливается пошагово, начиная с вершины w до возврата к вершине s . Опишем один шаг возвращения.
Для вершины |
w среди всех вершин v , для которых существует дуга, |
||
ведущая |
из v |
в w , находится такая дуга, для |
которой выполнено |
условие |
d w d v c v, w . Тем самым |
восстанавливается |
|
последняя дуга кратчайшего пути от s до w .
Пр и м ер 1 . В графе, изображенном на рис. 3.80, найти расстояния от вершины s до остальных вершин и восстановить кратчайший путь от вершины s до вершины d .
|
a |
|
2 |
d |
|
1 |
1 |
|
|
|
|
b |
|
|
s |
|
|
|
|
3 |
|
|
1 |
|
|
|
|
||
|
1 |
|
|
1 |
|
|
|
|
|
|
c |
3 |
|
p |
|
Рис. 3.80. |
|
|
|
◄ В табл. 3.1 отражены шаги алгоритма Дейкстры. В первом столбце каждой строки указан номер шага, во втором столбце -
188
множество вершин Sk , для которых к началу k -го шага найдено
расстояние от вершины s . В остальных столбцах указаны метки вершин на шаге, номер которого обозначен в заголовке строки.
Таблица 3.1
k |
Sk |
Dk (s) |
Dk (a) |
Dk (b) |
Dk (c) |
Dk (d ) |
Dk ( p) |
0 |
|
0 |
|
|
|
|
|
1 |
s |
|
1 |
3 |
1 |
|
|
|
|
|
|
|
|
|
|
2 |
s, a |
|
|
2 |
1 |
|
|
|
|
|
|
|
|
|
|
3 |
s, a, c |
|
|
2 |
|
|
4 |
|
|
|
|
|
|
|
|
4 |
s, a, c, b |
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
5 |
s, a, c, b, p |
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
Расстояние от вершины |
s |
до a |
равно 1, от s |
до b равно 2, от s |
|||||||||||||
до c равно 1, от s |
до d |
равно 4, от s |
до |
|
p равно 3. |
|
|
|
|||||||||
Кратчайший |
путь |
|
от |
вершины |
s |
|
до |
вершины |
|
d |
проходит |
||||||
последовательно через вершины s, a, b, p, d . ► |
|
|
|
|
|
||||||||||||
Упр а жн е н ие 3 . 3 5 . |
В сети, изображенной на рис. 3.81, найти |
||||||||||||||||
расстояние от вершины |
|
s |
до остальных вершин и указать кратчайший |
||||||||||||||
путь от вершины s |
|
до вершины q . |
|
|
|
|
|
|
|
|
|
||||||
Упр а жн е н ие 3 . 3 6 . |
В сети, изображенной на рис. 3.82, найти |
||||||||||||||||
расстояние от вершины |
|
s |
до остальных вершин и указать кратчайший |
||||||||||||||
путь от вершины s |
|
до вершины t . |
|
|
|
|
|
|
|
|
|
||||||
|
a |
|
2 |
|
q |
|
|
|
|
a |
4 |
q |
3 |
|
t |
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|||||||
|
7 |
4 |
5 |
|
|
3 |
1 |
1 |
|
2 |
|
|
|
|
|||
s |
3 |
c |
|
|
t |
s |
4 |
|
|
1 |
1 |
|
|||||
1 |
|
|
|
1 b |
|
2 |
|
|
|
||||||||
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
2 |
|
|
|
|
4 |
|
|
2 |
|
5 |
4 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
b |
|
3 |
p |
|
|
|
|
c |
|
3 |
|
|
|
|||
|
Рис. 3.81. |
|
|
|
|
|
|
Рис. 3.82. |
|
|
|
|
|||||
Теоретические обоснования
Обоснование алгоритма Дейкстры. Обоснуем вначале равенство d (vk 1 ) Dk vk 1 . Пусть P : s w0u1w1...ur wr vk 1 -
произвольный путь из s в vk 1 . Поскольку Dk vk 1 - длина одного
189
из путей из |
вершины |
s |
в вершину vk 1 , то |
достаточно |
доказать |
|||||||||||||||
неравенство |
Dk vk 1 P . |
Среди всех вершин пути |
P выберем |
|||||||||||||||||
вершину w j |
с наименьшим номером среди тех, |
которые не входят в |
||||||||||||||||||
множество Sk . |
Так как начальная вершина пути |
P входит в |
Sk , |
а |
||||||||||||||||
конечная не входит в Sk , |
то такой номер j найдется. Итак, |
wj 1 Sk , |
||||||||||||||||||
wj Fk . Тогда |
из |
определения |
Dk w |
и длины |
пути |
вытекают |
||||||||||||||
соотношения |
|
|
Dk wj d wj 1 c wj 1 , wj |
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
c w0 , w1 ... c wj 1, wj P . |
|
|
|
|
|
|
||||||||||||
Кроме |
того, |
в |
силу |
выбора |
вершины |
|
vk 1 |
имеем, что |
||||||||||||
Dk vk 1 Dk |
wj . |
С |
|
учетом |
этих |
неравенств |
получаем, |
что |
||||||||||||
Dk vk 1 P . Следовательно, |
d (vk 1 ) Dk vk 1 . |
|
|
|
|
|
||||||||||||||
Осталось |
убедиться, |
что вершина vk 1 |
является |
|
(k 1) -й |
|||||||||||||||
ближайшей к |
s |
|
вершиной. Для этого достаточно доказать неравенство |
|||||||||||||||||
d(vk 1) d w |
для |
всех |
|
w Fk . |
Зафиксируем |
одну |
из |
вершин |
||||||||||||
w F . Обозначим |
через |
|
P |
кратчайший путь |
из |
вершины |
s |
в |
||||||||||||
k |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
вершину vk 1 , а через P2 |
- кратчайший путь из вершины s |
в вершину |
||||||||||||||||||
w . Тогда P |
|
d v |
|
|
и |
P |
d w . Выше доказано равенство |
|||||||||||||
|
1 |
|
|
k 1 |
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
d (vk 1 ) Dk vk 1 . |
|
Повторим |
для |
пути |
|
P2 |
рассуждения, |
|||||||||||||
приведенные |
в |
|
первой части обоснования для пути |
P . |
Среди всех |
|||||||||||||||
вершин пути |
P2 |
выберем вершину w j с наименьшим номером среди |
||||||||||||||||||
тех, которые не входят в множество |
Sk . Имеем: |
wj 1 Sk , |
wj Fk . |
|||||||||||||||||
Тогда |
|
|
Dk wj d wj 1 c wj 1 , wj |
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
||||||||||||
c w0 , w1 ... c wj 1, wj P2 .
190
Кроме |
того, |
в |
силу |
выбора |
вершины |
|
vk 1 |
имеем, что |
||||||||||||
Dk vk 1 Dk wj . Следовательно, |
k |
|
j |
|
|
|
|
|
2 |
|
|
|||||||||
|
|
1 |
|
|
k 1 |
k |
k 1 |
|
|
|
|
|
|
|
||||||
|
|
P |
|
d (v |
) D v |
|
D |
w |
|
d |
|
w |
|
|
P |
|
, |
|||
что и требовалось доказать. ■
191
