Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1907.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.57 Mб
Скачать

3.11. Построение дерева кратчайших путей

Определение 3.28. Кратчайшим путем s0 от вершины t до вершины x в графе G назовем такой путь, для которого верно следующее:

,

где l(s) – длина пути s, S множество всевозможных путей от вершины t до вершины x. Аналогично определяется понятие кратчайшего пути и для неориентированного графа.

Определение 3.29. Множество кратчайших путей от заданной вершины графа t до всех остальных вершин графа образует дерево кратчайших путей с корнем в вершине t.

Рассмотрим один из алгоритмов нахождения дерева кратчайших путей.

Пусть V – множество всех вершин графа, t – исходная вершина. Каждая вершина имеет две метки (функции):

1) – некоторая вершина, являющаяся предыдущей для v в дереве путей.

2) – расстояние между вершинами и t в дереве путей, если вершина уже включена в дерево. Если не включена в дерево, то – оценка длины пути от t до .

В начале алгоритма в дерево включена только вершина t.

,

.

Здесь (t,v) – длина дуги от t до v. Cреди выбирается минимальная оценка и сравнивается с некоторым путем до , уже включенным в дерево путей. Если меньше длины этого пути, то заменяем путь на новый и меняем .

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

Шаг 1. , – дерево строящегося пути. .

Шаг 2. Выбираем самую короткую дугу: . Тогда , включаем в дерево и вычеркиваем: .

Шаг 3. сравниваем и . Возможны случаи:

а) ;

б) .

Переходим к шагу 2.

Критерии остановки

Если необходим кратчайший путь до фиксированной вершины u, то алгоритм завершается на шаге 2, когда включается в .

Если необходимо построение кратчайших путей до всех вершин, то алгоритм завершается на шаге 2, когда множество становится пустым.

Пример 3.19. Построить дерево кратчайших путей для графа из предыдущего примера (рисунок 3.14).

1)Согласно алгоритму первоначально p(2),…,p(8)=s, в качестве исходной вершины s выбрана вершина 1. d(2)=1, d(3)=d(7)=d(8)=, d(4)=4, d(5)=3, d(6)=3.

2)Выбираем среди d(v) минимальную оценку, в данном случае min d(v)=d(2)=1, включаем вершину v в дерево пути D={1, 2}.

3)Далее сравниваем d(u) и d(2)+(2,u)

d(3)= > d(2)+(2,3)=1+2=3 так как оценка d(3) больше, чем сумма d(2)+(2,3), то d(3)=3; p(3)=2

Данное сравнение проводим для всех вершин графа V.

d(4)=4 < d(2)+(2,4)= 

d(5)=3 < d(2)+(2,5)= 

d(6)=3 = d(2)+(2,6)=1+2=3

d(7)= > d(2)+(2,7)=1+4=5;  d(7)=5; p(7)=2

d(8)= = d(2)+(2,8)= 

Теперь записываем новые значения оценок и повторяем последовательность действий 2–3 до тех пор пока множество вершин графа V не станет пустым.

d(3)=3, d(4)=4, d(5)=3, d(6)=3, d(7)=5, d(8)=

min d(v)=d(3)=3, D={1, 2, 3}

d(4)=4 < d(3)+(3,4)=3+3=6

d(5)=3 < d(3)+(3,5)= 

d(6)=3 < d(3)+(3,6)= 

d(7)=5 < d(3)+(3,7)=3+6=9

d(8)= > d(3)+(3,8)=3+9=12; -> d(8)=12, p(8)=3

d(4)=4, d(5)=3, d(6)=3, d(7)=5, d(8)=12

min d(v)=d(5)=3, D={1, 2, 3, 5}

d(4)=4 < d(5)+(5,4)=3+4=7

d(6)=3 < d(5)+(5,6)= 

d(7)=5 < d(5)+(5,7)= 

d(8)=12 < d(5)+(5,8)= 

d(4)=4, d(6)=3, d(7)=5, d(8)=12

min d(6)=3, D={1, 2, 3, 5, 6}

d(4)=4 < d(6)+(6,4)= 

d(7)=5 < d(6)+(6,7)= 

d(8)=12 > d(6)+(6,8)= 

d(4)=4, d(7)=5, d(8)=12

min d(4)=4, D={1, 2, 3, 5, 6, 4}

d(7)=5 < d(4)+(4,7)= 

d(8)=12 > d(4)+(4,8)=4+1=5; -> d(8)=5; p(8)=4

d(7)=5, d(8)=5

min d(v)=d(8)=5, D={1, 2, 3, 5, 6, 4, 8}

d(7)=5 < d(8)+(8,7)= 

d(7)=5

min d(v)=d(7)=5, D={1, 2, 3, 5, 6, 4, 8, 7}

Итак, V= . В результате работы алгоритма имеем: p(2)=1, p(3)=2, p(4)=1, p(5)=1, p(6)=1, p(7)=2, p(8)=4. На основании этих результатов строим дерево (рисунок 3.16).

Рис. 3.16.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]