<<
>>

Алгоритм Дейкстры (случай неотрицательной матрицы весов)

Наиболее эффектный алгоритм решения задачи о кратчайшем (s-t)-пути первоначально дал Дейкстра. Этот метод основан на приписывании вершинам временных пометок, причем пометка вершины дает верхнюю границу длины пути от s к этой вершине.

Значения пометок постепенно уменьшаются с помощью некоторой итерационной процедуры, и на каждом шаге итерации одна из временных пометок становится постоянной. Последнее указывает на то, что пометка уже не является верхней границей, а дает точную длину кратчайшего пути от s к рассматриваемой вершине.

Описание алгоритма Дейкстра:

Пусть - пометка вершины .

Шаг 1. Положить и считать эту пометку постоянной. Положить для всех и считать эти пометки временными. Положить .

Шаг 2. Для всех , пометки которых временные, изменить пометки в соответствии со следующим выражением:

(1.1)

Шаг 3. Среди всех вершин с временными пометками найти такую, для которой .

Шаг 4. Считать пометку вершины постоянной и положить .

Шаг 5.

1. Если , то является длиной кратчайшего пути. Если , перейти к шагу 2 (для случая поиска пути от s к t.)

2. Если все вершины отмечены как постоянные, то эти пометки дают длины кратчайших путей. Если некоторые пометки являются временными перейти к шагу 2 (для случая поиска путей от s ко всем остальным вершинам).

Как только длины кратчайших путей от s будут найдены, то сами пути можно получить при помощи рекурсивной процедуры с использованием соотношения (1.2). Так как вершина непосредственно предшествует вершине в кратчайшем пути от s к , то для любой вершины соответствующую вершину можно найти как одну из оставшихся вершин, для которой

. (1.2)

Если кратчайший путь от s до любой вершины является единственным, то дуги этого кратчайшего пути образуют ориентированное дерево с корнем s. Если существует несколько "кратчайших" путей от s к какой-либо другой вершине, то при некоторой фиксированной вершине соотношение (2) будет выполняться для более чем одной вершины .

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

Пример

Рассмотрим граф G, изображенный на рис. 1.1, где каждое неориентированное ребро рассматривается как пара противоположно ориентированных дуг равного веса. Матрица весов C приведена ниже.

Рис. 1.1. Граф G.

Требуется найти все кратчайшие пути от вершины ко всем остальным вершинам. Постоянные пометки будем снабжать знаком +, остальные пометки рассматриваются как временные.

C= x1 x2 x3 x4 x5 x6 x7 x8 x9
x1 0 12 0 0 0 0 5 2 10
x2 12 0 14 0 0 0 4 0 15
x3 0 14 0 20 0 25 0 0 9
x4 0 0 20 0 2 15 5 0 0
x5 0 0 0 2 0 8 0 0 0
x6 0 0 25 0 8 0 12 11 10
x7 0 4 0 5 0 12 0 0 22
x8 2 0 0 0 24 11 0 0 7
x9 10 15 0 0 0 10 22 7 0

Воспользуемся алгоритмом Дейкстры.

Шаг 1. , , .

Первая итерация

Шаг 2. - все пометки временные. Возьмем сначала . Из (1.1) получаем

,

аналогично , , .

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Не все вершины имеют постоянные пометки, поэтому переходим к шагу 2. Пометки в начале следующей итерации показаны на рис. 1.2(а).

Вторая итерация

Шаг 2. - все пометки временные. Из соотношения (1.1) имеем

,

аналогично , . Пометки изображены на рис. 1.2(б).

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Перейти к шагу 2.

Третья итерация

Шаг 2. - из соотношения (1.1) получаем

,

и аналогично , , .

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Перейти к шагу 2.

Четвертая итерация

Шаг 2. - не все пометки временные, поэтому из соотношения (1.1) получаем

,

и аналогично .

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Перейти к шагу 2.

Пятая итерация

Шаг 2. - не все пометки временные, поэтому из соотношения (1.1) получаем

.

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Перейти к шагу 2.

Шестая итерация

Шаг 2. - все пометки временные, из соотношения (1.1) получаем

,

и аналогично , .

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Перейти к шагу 2.

Седьмая итерация

Шаг 2. - не все пометки временные, поэтому из соотношения (1.1) получаем

.

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Перейти к шагу 2.

Восьмая итерация

Шаг 2. - не все пометки временные, поэтому из соотношения (1.1) получаем

.

Шаг 3. соответствует .

Шаг 4. получает постоянную пометку , .

Шаг 5. Все вершины имеют постоянные пометки. Конец работы алгоритма. Пометки полученные в результате работы алгоритма показаны на рис. 1.2(в).

Найдем кратчайший путь между вершиной и начальной вершиной , последовательно используя соотношение (1.2). Таким образом, полагая , находим вершину , непосредственно предшествующую в кратчайшем пути от к : вершина должна удовлетворять соотношению

.

Единственной такой вершиной является . Далее, применяем второй раз соотношение (1.2), беря ; получаем вершину , непосредственно предшествующую в кратчайшем пути от к . Вершина удовлетворяет соотношению

.

Единственной такой вершиной является и поэтому кратчайший путь от к есть .

- база, дающая все кратчайшие пути от , представляет собой дерево, изображенное жирными линиями на рис. 1.2 (в).

(а)

(б)

(в)

Рис. 1.2. (а) Пометки в конце 1-й итерации. (б) Пометки в конце шага 2 на 2-й итерации. (в) Окончательные пометки вершин и - база.

<< | >>
Источник: Теория графов. Лекция. 2017

Еще по теме Алгоритм Дейкстры (случай неотрицательной матрицы весов):

  1. II. КЛАССИЧЕСКАЯ ПОЛИТИЧЕСКАЯ ЭКОНОМИЯ