Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 14 Графы .doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
129.54 Кб
Скачать

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

Шаг 2.

Найдем соответствие вершины графа, имеющей новую постоянную метку, т.е. Г(x7), а это – множество вершин, являющихся конечными вершинами дуг, у которых начальной вершиной является x7:

Г(x7) = {x2, x4, x6, x9}. У этого множества вершин все пометки временные, равные . Найдем постоянную пометку, для чего сначала находим пометки для каждой из этих вершин x2, x4, x6, x9 по зависимости: , тогда:

l(x2) = min[l(x2), l(x7)+c(x7,x2)] = min[∞, 3 + 2] = 5;

l(x4) = min[l(x4), l(x7)+c(x7,x4)] = min[∞, 3 + 4] = 7;

l(x6) = min[l(x6), l(x7)+c(x7,x6)] = min[∞, 3 + 14] = 17;

l(x9) = min[l(x9), l(x7)+c(x7,x9)] = min[∞, 3 + 24] = 27.

Перевод пометок из временных в постоянные.

Шаг 3.

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

min[l(x2), l(x4), l(x6), l(x9), l(x3), l(x5), l(x8)] = min[5, 7, 17, 27, ∞, ∞, ∞,] =

= 5 = l(x2)

Шаг 4. Вершина графа x2 получает постоянную пометку

5+ = l(x2), а

p = x2

Шаг 5. Постоянной пометкой помечены только три вершины: x1, x2 и x7, но если не все вершины отмечены как постоянные, то требуется все повторить начиная со второго шага. Пометки в начале третий итерации показаны на рис. б)

б) 5+

3+

7

0+

12

6

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

Шаг 2.

Найдем соответствие вершины графа, имеющей новую постоянную метку, т.е. Г(x2), а это – множество вершин, являющихся конечными вершинами дуг, у которых начальной вершиной является x2:

Г(x2) = {x1, x3, x7, x9}. Из этого множества только вершины x3, и x9 имеют пометки временные, равные .

l(x3) = min[l(x3), l(x2)+c(x2,x3)] = min[∞, 5 + 18] = 23;

l(x9) = min[l(x9), l(x2)+c(x2,x9)] = min[∞, 5 + 13] = 18.

Перевод пометок из временных в постоянные.

Шаг 3.

min[l(x2), l(x4), l(x6), l(x8), l(x9), l(x5)] = min[23, 7, 17, 6,18, ∞,] =

= 6 = l(x8)

Шаг 4. Вершина графа x2 получает постоянную пометку

6+ = l(x8), а

p = x8

Шаг 5. Постоянной пометкой помечены только три вершины: x1, x2, x7 и x8 но если не все вершины отмечены как постоянные, то требуется все повторить начиная со второго шага. Пометки в начале четвертой итерации показаны на рис. в)

в)

б) 5+

3+

7

0+

12

6

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

Таким образом, все вершины графа помечены постоянными пометками.

Окончательная пометка вершин и x1-база

5+ 23+

3+

7+

0+

11+ 17+

6+ 12+

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

(псевдоязык Паскаля)

Вход: огргаф G(V,E) Заданный матрицей длин дуг C: array [1…p, 1…p] of real и списками смежности Г; s - исходная вершина графа.

Выход: вектор T: array [1…p] of real длин кратчайших путей от s.

for u V do

T[u] := C[s,u] {начальное приближение определяется матрицей}

X[u] := 0 {все вершины не отмечены}

end for

for i from 1 to p do

m:=∞ {поиск конца нового кратчайшего пути}

for u V do

if X[u] := 0 & T[u] < m then

v:=u, m:= T[u] {вершина u заканчивает новый кратчайший путь из s}

end if

end for

for u Г do

T[u]:= min(T[u], T[v] + C[v,u]) {пересчет оценки длины пути из s в u через v}

end for

X[v]:= 1 {найден кратчайший путь s в v }

end for

Алгоритм, как и алгоритм Форда-Беллмана, основан на идее:

- на очередном шаге нужно выбрать вершину v, до которой точно знаем кратчайший путь от s, и пересчитать оценки путей для вершин, смежных с v. На первом шаге для вершины s T[s]=0

Трудоемкость алгоритма Дейстра составляет n2.

7