Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 598

.pdf
Скачиваний:
10
Добавлен:
30.04.2022
Размер:
2.67 Mб
Скачать

x1 x2 x3 x4 x5 x6

 

x1

0

0

0

0

0

1

 

 

 

x2

 

0

0

1

1

0

1

 

 

 

 

 

 

 

x

 

1

0

0

1

1

0

 

 

P

3

 

 

 

 

 

 

 

 

 

 

x4

0

0

0

0

0

0

 

*

 

x

 

0

0

0

0

0

1

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

0

0

 

*

 

x6

 

Символом * помечены вершины из множества N0 . Удаляя строки 4 и 6, а также столбцы 4 и 6, получим:

 

x1

x2

x3

x5

 

 

x1

0

0

0

0

*

 

 

 

 

 

 

 

 

P x2

0

0

1

0

.

x

 

1

0

0

1

 

 

3

 

 

 

 

 

 

 

x5

 

0

0

0

0

 

*

Символом * помечены вершины из множества N1. Удаляя строки 1 и 5, а также столбцы 1 и 5, получим:

 

 

 

x2

x3

 

 

P

x2

0

1

 

 

x3

 

 

 

.

 

 

0

0

 

*

Символом * помечена вершина из множества N2 . Удаляя строку 3 и столбец 3, получим:

x2

P x2 0 *.

Символом * помечена вершина из множества N3.

111

Построив множества N0 , N1, N2 , N3 , определим значения порядковой функции or x , x X , (на рис. 35 они от-

мечены около вершин).

 

 

 

Определение. Предположим, что

g x функция, ста-

вящая в соответствие любой вершине

xi X

целое число

g xi 0. Функция g x

именуется функцией Гранди для

орграфа G, при условии,

что в любой вершине

xi значение

g xi есть минимальное из целых неотрицательных чисел, не

входящих в множество g xj : xj xi и g xi 0, когда

xi .

Иначе говоря, g xi представляет собой минимальное из неотрицательных чисел, не соответствующих никакой из вершин xi .

Функция Гранди широко используется при доказательстве многих теорем в теории графов, помимо этого, вычисление некоторых характеристик графа приводит к нахождению значений этой функции.

Пример 2. Определим функцию Гранди для орграфа G из примера 1. Разделим совокупность вершин орграфа на

уровни: N0 x4 , x6 , N1 x1, x5 , N2 x3 , N3 x2 .

Используя определение функции Гранди, получим:

g x4 g x6 0, g x1 g x5 1. Аналогично,

для верши-

ны x3 N2

получим:

 

 

x3 x1, x4 , x5 ,

при

 

 

этом

g x4 0, g x1 g x5 1,

и,

значит,

g x3 2.

Подобным

образом для вершины

x N

3

получим:

x x , x , x ,

 

 

 

2

 

 

 

2

3

4

6

при этом

g x

g

x 0,

 

g x 2,

и,

значит,

g x

 

1.

 

4

 

6

 

 

3

 

 

2

 

 

112

На рис. 36 представлен орграф G , возле всех вершин которого проставлены значения функции Гранди.

2

x3

 

1

 

0

 

x4

x2

 

 

 

1

 

1

x1

0

x5

 

x6

 

Рис. 36. Функция Гранди орграфа

Для орграфов без контуров небольшого порядка используют табличный способ нахождения функции Гранди.

Пример 3. Определим функцию Гранди для орграфа из примеров 1 и 2, применяя табличный способ. Таблица заполняется таким образом:

 

 

 

 

Таблица 2

xi

xi

g xi

 

g xj , xj xi

 

 

 

 

 

x1

x6

1

 

0

 

 

 

 

 

x2

x3

1

 

2

 

x4

 

 

0

 

x6

 

 

0

 

 

 

 

 

x3

x1

2

 

1

 

x4

 

 

0

 

x5

 

 

1

 

 

 

 

 

x4

 

0

 

 

 

 

 

 

 

x5

x6

1

 

0

 

 

 

 

 

x6

 

0

 

 

 

 

 

 

 

 

 

 

113

3.3.Нахождение минимальных путей на орграфах

Алгоритм Дейкстры.

Предположим, что G S,U , орграф с взвешенны-

ми дугами. Пусть s вершина начало пути и t вершина конец пути. Веса дуг должны быть больше нуля.

Этап I. Определение длины минимального пути. Шаг 1. Присвоение вершинам начальных меток.

Присвоим d(s) 0 и считаем данную метку постоянной (постоянные метки отмечаются сверху символом *). Для

других вершин

xi S, xi s,

присвоим

d(xi ) и считаем

 

 

 

 

 

 

~

~

 

 

 

эти метки временными. Примем x s, x

имя текущей вер-

шины.

 

 

 

 

 

 

 

 

 

 

Шаг 2. Изменение меток.

 

 

 

 

Для любой вершины xi

с временной меткой, непосред-

 

 

 

 

 

 

~

 

 

 

 

ственно следующей за вершиной х

меняем

значение её мет-

ки по правилу:

 

 

x , d x

x, x .

 

d

 

x min d

 

 

 

 

 

 

 

 

~

 

~

 

 

 

нов.

i

 

стар.

i

 

 

 

i

(35)

 

 

 

 

 

 

 

 

 

 

 

Шаг 3. Превращение метки из временной в постоян-

ную.

Из всех вершин с временными метками берём вершину

x с минимальным значением метки:

 

j

 

d x*j min d xj , xj S, d xj временная .

3.(36).2

 

~

Считаем данную метку постоянной и полагаем

x x*.

 

j

Шаг 4. Проверка на окончание этапа I.

 

114

~

 

~

длина минимального пути от s

Если х t,

то d

х

 

 

 

 

до t. Иначе переходим к шагу 2.

Этап II. Построение кратчайшего пути.

Шаг 5. Последовательный поиск дуг кратчайшего пути.

Из множества вершин, непосредственно предшествую-

~

щих вершине х с постоянными метками, определяем вершину xi , удовлетворяющую соотношению

~ d x

d x

x , x .

 

 

 

 

~

 

i

 

i

 

(37)

 

 

 

 

 

~

~

 

Включаем дугу ( xi , x) в искомый путь и полагаем x xi .

Шаг 6. Проверка на окончаниение этапа II.

~

 

Если х s, то минимальный путь получен

его обра-

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

Пример. Пусть имеется сеть G. Определить кратчайший путь из вершины х1 в вершину х6 , используя алгоритм Дейкстры.

 

( ,13 )

 

х3

( , 6 )

7

х4

9

 

 

6

5

 

8

( ,15 )

(0 )

 

х6

9

 

 

( ,9 )

х

1

 

 

 

 

 

 

 

х2

6

 

 

 

 

 

 

 

11

6

 

 

 

 

 

 

 

6

 

4

 

 

 

 

 

 

( ,11 )

х5

Рис. 37. Поиск кратчайшего пути на сети

115

Решение.

 

 

 

 

 

 

 

 

 

 

 

 

x1

x2 x3

x4 x5 x6

 

 

x1

 

9

 

6

11

 

 

x

 

 

 

8

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

6

9

 

 

3

 

 

 

 

 

 

 

.

 

x4

 

5

7

6

 

 

x

 

 

6

 

 

 

4

 

 

5

 

 

 

 

 

 

 

 

 

x

 

 

 

6

 

 

 

 

 

 

 

 

Поскольку в исходном графе имеется цикл, проходящий через вершины х2 , х3 и х5 , то вершины графа нельзя упорядочить по алгоритму Фалкерсона.

Этап I.

~

Шаг 1. Присвоим d x1 0* , x x1, d x j , j 2, 6.

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

Шаг 2. Совокупность вершин, непосредственно сле-

~

~

 

дующих за x x1, с временными метками,

S x1, x4 , x5

.

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

d x2

min , 0* 9 9, d x4 min , 0* 6 6,

5

 

 

d x

min ,

0* 11 11.

Шаг 3. Одна из временных меток становится постоян-

ной:

~

min d xi , i 2, 6 min 9, , 6, 11, 6* d x4 , x x4.

~

Шаг 4. x x4 t x6 , переходим к шагу 2.

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

~

Шаг 2. S x2 , x3 , x5 .

116

d x2 min 9, 6* 5 9, d x3 min , 6* 7 13, d x5 min 11, 6* 6 11.

Шаг 3. min d x2 , d x3 , d x5 , d x6

~

min 9, 13, 11, 9* d x2 , x x2.

Шаг 4. x2 x6 , переходим к шагу 2.

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

 

3

3

 

 

 

 

~

, d x

min 13, 9* 8

 

Шаг 2.

S x

13.

Шаг 3.

min d x3 , d x5 , d x6

 

 

~

min 13, 11, 11* d x5 , x x5.

Шаг 4. x5 x6 , переходим к шагу 2.

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

 

~

, d x6

min , 11* 4 15.

Шаг 2.

S x6

Шаг 3.

min d x3 , d x6

 

 

 

 

~

 

min 13, 15 13* d x , x x .

 

 

 

3

3

 

Шаг 4. x3 x6 , переходим к шагу 2.

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

 

 

 

6

6

 

~

, d x

min 15,13* 4 15.

Шаг 2.

S x

 

min d x6 min 15

~

Шаг 3.

15* , x x6.

Шаг 4.

x6 t x6 , х6

t х6 , окончание этапа I.

Этап II.

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

Шаг 5. Находим совокупность вершин, непосредствен-

~

но предшествующих x x6 , с постоянными метками

117

~

S x3 , x5 . Проверим для этих двух вершин выполнение со-

отношения (3.3.3):

 

~

*

9

d x

15 13

 

 

 

 

 

 

 

~

*

4

d

x5

x5 , x6 .

d x

15 11

 

 

 

 

 

 

 

d x3 x3 , x6 ,

Вносим дугу x5 , x6 в

~

минимальный путь. x x5 .

 

 

 

 

~

s x1, переход к шагу 5.

 

 

 

Шаг 6.

x

 

 

 

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

 

 

 

 

 

 

~

 

x1, x4 .

 

 

 

Шаг 5.

S

 

 

 

~

11

 

*

11 d x1 x1, x5 ,

 

 

d x

0

 

 

 

 

 

 

 

 

 

 

 

 

~

11

 

*

6 d x4 x4 , x5 . Вносим дугу

x1, x5

в

d x

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

~

 

 

минимальный путь. x x1.

 

 

 

 

 

 

~

s x1, окончание этапа II.

 

 

 

 

Шаг 6.

x

 

 

 

Таким образом, минимальный путь от вершины x1

до

вершины

x6

найден. Его длина (вес) равен 15, этот путь со-

ставляют дуги:

x1, x5 x5 , x6 .

 

 

Алгоритм Беллмана-Мура.

Веса дуг могут быть и меньше нуля.

Этап I. Нахождение длин кратчайших путей от вершины s до всех остальных вершин графа.

Шаг 1. Присвоение начальных значений.

118

 

~

~

 

d (s) 0, d (xj ) , xj

s; x s;

Q x

совокупность вер-

шин в очереди.

Шаг 2. Корректировка меток и очереди.

Убираем из очереди Q вершину, стоящую в начале очереди. Для любой вершины хi , непосредственно следующей за

~

x, изменяем значение её метки по формуле

dнов. xi

Если при этом dнов.

min d

 

x , d

x

x, x .

 

 

 

 

~

 

~

 

стар.

i

 

 

 

i

 

 

 

 

 

 

 

xi dстар. xi , то изменяем порядок оче-

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

Корректировка очереди. Если хi отсутствовала ранее в очереди и не находится в ней сейчас, то помещаем её в конец очереди. Если хi уже находилась раньше в очереди или

стоит там сейчас, то поместим её в начало очереди.

Шаг 3. Проверка на окончание этапа 1.

Если Q , то переходим к шагу 2; иначе происходит

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

Этап II. Построение кратчайшего пути от s до t.

Идентичен такому же этапу в алгоритме Дейкстры и

 

~

 

хi

~

выполняется по формуле d x

d хi

, x .

 

 

 

 

 

Пример. Пусть дана матрица весов сети G:

119

 

 

 

х1

х2

х3

х4

х5

х6

 

 

 

х

 

4

 

6

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

х2

 

7

8 6

 

 

 

х

 

 

 

 

 

7

5

 

 

 

3

 

 

 

 

 

 

 

 

 

 

х4

 

 

 

8

 

9

 

 

 

х

 

 

 

 

 

 

3

 

 

 

5

 

 

 

 

 

 

 

 

 

 

х6

 

 

 

 

 

 

 

 

 

G

 

 

 

 

 

 

 

 

х2

6

 

х5

 

 

 

 

 

4

 

-8

 

 

3

 

 

 

х1

 

 

 

 

9

 

 

 

 

 

 

7

 

-7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

5

 

х6

 

 

 

 

 

 

 

х4

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

 

х3

Рис. 38. Сеть с наличием отрицательных весов дуг

Найти минимальный путь от вершины x1 до вершины x6 .

120