Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
41
Добавлен:
05.06.2015
Размер:
352.68 Кб
Скачать

§ 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

w Fk
c(v, w) .
c(v, w)
w , то

есть дуги, исходящие из 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

Соседние файлы в папке Лекции Олейник PDF