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

Pustovoitov_TIS_IDZ

.pdf
Скачиваний:
8
Добавлен:
02.02.2015
Размер:
1.44 Mб
Скачать

Задание 1 Алгоритм построения минимального остовного дерева

1.1 Теоретическая часть

Рассмотрим вкратце алгоритм построения минимального остовного дерева. Обозначим через N 1,2, n множество узлов сети и введем новые обозначения:

Ck — множество узлов сети, соединенных алгоритмом после выполнения k -й итерации этого алгоритма,

Ck — множество узлов сети, не соединенных с узлами множества Ck

после выполнения k -й итерации этого алгоритма.

Этап 0. Пусть C0 и C0 N .

Этап 1. Выбираем любой узел i из множества C0 и определяем C1 i ,

тогда C1 N i . Полагаем k 2 .

Основной этап k . В множестве Ck 1 выбираем узел j* который соединен самой короткой дугой с каким-либо узлом из множества Ck 1. Узел j*

присоединяется к множеству Ck 1 и удаляется из множества Ck 1 . Таким образом, Ck Ck 1 j* , Ck Ck 1 j* . Если множество Ck пусто, то выполнение алгоритма заканчивается. В противном случае полагаем k k 1 и повторяем последний этап.

1.2 Пример выполнения задания

В институте прокладывают компьютерную сеть. В каждом корпусе установлено по одному маршрутизатору. Институт планирует соединить компьютерной сетью шесть корпусов. На рис. 1.1 показана структура планируемой сети и расстояния (в км.) между корпусами. Необходимо спланировать наиболее экономичную компьютерную сеть затратив минимум кабеля.

Этап 0. Пусть C0 и C0 N .

Этап 1. Выберем узел 1 как начальный узел, внесем его в множество C и

исключим из множества C. Тогда

1

C1 1 и C1 2, 3, 4, 5, 6 .

Делаем k 2.

2

 

3

1

 

5

6

 

4

 

 

9

 

 

1

3

10

5

5

8

6

7

 

3

4

Рисунок 1.1 – Компьютерная сеть института

Этап 2. В множестве C1 находим такой узел, который соединен самой короткой дугой с узлами из множества C1 (рис 1.2а). Отыскиваем

(1, j) min{(1,2),(1,5),(1,3),(1,4)} (1, 2) ,

т.к.

min{1,9,5,7} 1.

Таким образом получаем j 2 и дугу (1,2) , которую выделяем жирным цветом, т.е. прокладываем в этом направлении кабель. Затем исключаем узел 2

из множества C и добавляем его в множество C (рис 1.2б). Получаем

C2 1,2 и C2 3, 4, 5, 6 .

Делаем k 3.

Этап 3. В множестве C2 находим такой узел, который соединен самой короткой дугой с узлами из множества C2 (рис 1.2б). Ищем

(i, j) min{(2,5),(2,3),(2,4),(1,5),(1,3),(1,4),} (2, 5),

т.к.

2

min{3,6,4,9,5,7} 3.

Таким образом получаем j 5 и дугу (2, 5) , по которой прокладываем

кабель (рис. 1.2б). Затем исключаем узел 5 из множества C и добавляем его в множество C. Получаем

C3 1,2,5 и C3 3, 4, 6 .

Делаем k 4.

Этап 4. В множестве C3 находим такой узел, который соединен самой короткой дугой с узлами из множества C3 (рис 1.2в). Находим

(i, j) min{(5,1),(5,4),(2,3),(2,4), (1,3),(1,4)} (1, 4) ,

т.к.

min{9,8,6,4,5,7} 4.

Таким образом получаем j 4 и дугу (2, 4)(рис. 1.2в). Затем исключаем

узел 4 из множества C и добавляем его в множество C. Получаем

C4 1,2,4,5 и C4 3, 6 .

Делаем k 5.

Этап 5. В множестве C4 находим такой узел, который соединен самой короткой дугой с узлами из множества C4 (рис 1.2г). Находим

(i, j) min{(2,3),(1,3),(4,3),(4,6)} (4, 6) ,

т.к.

min{6,5,5,3} 3.

Таким образом получаем j 6 и дугу (4, 6) добавляем к сети (рис. 1.2г).

Затем исключаем узел 6 из множества C и добавляем его в множество C.

Получаем

C5 1,2,4,5,6 и C5 3 .

Делаем k 6 .

Этап 6. В множестве C5 находим такой узел, который соединен самой короткой дугой с узлами из множества C5 (рис 1.2д). Находим

3

C1 2 C1 1

9

1 5

7

4

2

1 4

9

1 5

7

4

2

1 4

1 5

5

4

 

 

 

 

2

C2

C2

 

 

 

 

 

3

 

 

 

1

4

6

 

 

5

5

 

 

 

9

 

 

 

 

 

 

 

3

 

1

5

3

 

 

 

6

 

 

 

 

 

7

 

 

6

 

 

 

 

 

 

 

 

 

4

 

 

а) Этап 2

 

 

 

б) Этап 3

 

 

C3

 

2

 

3

 

3

 

1

4

6

6

 

5

 

5

 

 

 

 

 

1

5

 

 

 

 

 

3

 

3

 

 

 

 

 

 

 

 

5

 

6

8

 

6

 

 

 

 

4

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

C3

 

 

 

C4

C4

в) Этап 4

 

 

 

г) Этап 5

 

3

 

 

2

 

3

 

 

1

 

4

6

 

5

 

5

 

 

5

 

 

 

C5

1

 

Альтернативные

3

 

 

3

10

C5

 

 

ребра

 

 

 

 

5

6

 

 

6

 

 

3

 

 

 

4

3

 

 

 

 

 

 

д) Этап 6

 

 

 

е) Этап 7

Рисунок 1.2 – Последовательные итерации выполнения алгоритма построения минимального остовного дерева

4

(i, j) min{(2,3),(1,3),(4,3)} (1, 3) или (4, 3) ,

т.к.

min{6,5,5} 5.

Таким образом получаем j 3 и из двух подходящих дуг (1, 3) и (4, 3)

выберем одну по желанию, к примеру выберем (1, 3) т.к. у нее меньше номер вершины в множестве C. Добавляем выбранную дугу к сети (рис. 1.2д). Затем

исключаем узел 3 из множества C и добавляем его в множество C. Получаем

C6 1,2,4,5,6,3 и C6 .

Делаем k 7 .

Этап 7. Т.к. множество C6 , следовательно выполнение алгоритма закончено. Ответ представлен на рисунке 1.2е. Минимальная длина кабеля для построения такой сети равна 1+3+4+3+5=16 км.

1.3 Варианты заданий

Необходимо построить минимальное остовное дерево для графов, представленных на рисунке 1.3. Длины дуг для различных вариантов задания приведены в таблицах 1.1 и 1.2.

1

2

 

 

 

3

1

2

 

4

 

3

 

5

 

 

 

 

4

 

6

 

5

 

 

 

7

 

6

7

8

 

 

 

8

 

а)

 

б)

Рисунок 1.3 – Варианты графов для задания 1

5

Таблица 1.1 – Варианты длин дуг для графа на рисунке 1.3а

 

Дуги

 

 

 

 

 

 

 

Варианты

 

 

 

 

 

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

 

 

(1,2)

12

18

17

8

15

2

3

13

13

7

18

14

18

15

6

13

17

 

(1,3)

4

1

9

8

5

5

8

9

14

3

18

9

8

10

20

20

6

 

(1,4)

13

4

10

14

15

19

13

2

3

7

2

16

18

3

18

20

17

 

(1,7)

9

11

3

3

3

5

14

19

17

14

5

16

7

9

14

12

11

 

(2,5)

16

12

16

7

9

13

9

14

2

17

13

6

16

19

14

5

8

 

(3,4)

16

6

12

1

10

5

18

19

3

16

9

2

17

2

18

2

13

 

(3,5)

1

18

9

3

5

6

7

16

10

17

10

6

8

15

20

6

19

 

(3,6)

1

8

20

14

15

9

16

7

20

20

7

5

12

18

16

19

16

 

(4,6)

20

2

1

9

13

14

6

4

19

3

12

12

16

1

4

5

14

 

(4,7)

10

15

19

3

16

11

19

3

3

3

16

5

19

15

9

3

5

 

(5,6)

20

10

10

7

7

20

1

20

6

1

8

3

13

14

12

8

17

 

(5,8)

12

8

2

15

16

19

9

8

2

18

13

17

17

19

1

10

3

 

(6,7)

12

20

3

13

1

7

10

2

7

7

12

1

2

9

17

14

3

 

(6,8)

20

3

6

2

8

10

8

12

6

9

8

15

4

8

8

4

5

 

(7,8)

16

6

2

9

13

7

2

18

6

12

19

9

6

8

10

17

2

 

 

Таблица 1.2 – Варианты длин дуг для графа на рисунке 1.3б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дуги

 

 

 

 

 

 

 

Варианты

 

 

 

 

 

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

 

 

(1,2)

8

16

14

11

20

2

18

4

8

5

11

12

8

14

7

7

15

 

(1,3)

1

15

2

16

5

19

18

1

3

6

4

11

10

5

14

16

5

 

(1,5)

11

20

6

18

14

6

6

3

17

20

18

16

19

11

18

3

20

 

(1,6)

5

4

8

10

18

16

19

16

10

18

13

2

9

11

10

11

2

 

(2,3)

17

13

8

2

19

3

1

7

17

19

9

5

13

10

20

10

8

 

(2,4)

14

5

1

16

4

14

1

13

12

16

1

11

4

20

17

20

10

 

(2,8)

3

16

3

13

11

8

9

14

20

18

5

8

16

9

18

11

14

 

(3,4)

11

14

9

1

13

16

15

16

10

8

17

19

14

18

11

11

2

 

(3,8)

11

4

8

2

13

7

15

3

6

6

9

6

12

6

20

18

4

 

(4,7)

17

7

6

10

18

3

17

3

12

4

9

19

2

17

9

3

7

 

(5,6)

14

2

10

11

17

2

16

4

8

17

15

17

14

19

18

13

18

 

(5,7)

18

9

17

10

1

7

16

10

14

14

2

14

12

18

9

10

4

 

(5,8)

14

14

16

1

19

17

3

10

6

11

8

6

4

18

13

9

5

 

(6,7)

12

16

6

4

13

19

14

1

3

7

5

15

20

10

11

2

17

 

(7,8)

3

16

4

2

10

8

10

15

14

1

11

14

3

14

8

5

6

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

Задание 2. Алгоритм Дейкстры.

2.1 Теоретическая часть

Рассмотрим вкратце алгоритм Дейкстры. В процессе выполнения этого

алгоритма при переходе от узла i к следующему узлу j используется специальная процедура пометки ребер. Обозначим через ui кратчайшее

расстояние от исходного узла 1 до узла i , через dij —длину ребра (i,j). Тогда для узла j определим метку uj,i следующим образом.

uj,i ui dij,i , dij 0 .

Метки узлов в алгоритме Дейкстры могут быть двух типов: временные и постоянные. Временная метка впоследствии может быть заменена на другую временную, если будет найден более короткий путь к данному узлу. Когда же станет очевидным, что не существует более короткого пути от исходного узла к данному, статус временной метки изменяется на постоянный.

Вычислительная схема алгоритма состоит из следующих этапов.

Этап 0. Исходному узлу (узел 1) присваивается постоянная метка [0, ].

Полагаем i 1.

Этап i .

а) Вычисляются временные метки ui dij,i для всех узлов j, которые можно достичь непосредственно из узла i и которые не имеют постоянных меток. Если узел j уже имеет метку uj,k , полученную от другого узла k , и,

если ui dij uj тогда метка uj,k заменяется на ui dij,i .

b) Если все узлы имеют постоянные метки, процесс вычислений заканчивается. В противном случае выбирается метка ur ,s с наименьшим значением расстояния ur среди всех временных меток (если таких меток несколько, то выбор произволен). Полагаем i r и повторяем этап i .

2.2 Пример выполнения задания

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

7

15

2 4

100

20

10

50

30 60

1 3 5

Рисунок 2.1 – Сеть для выполнения алгоритма Дейкстры

Этап 0. Назначаем узлу 1 постоянную метку [0, ].

Этап 1. Из узла 1 можно достичь узлов 2 и 3. Вычисляем метки для этих узлов, в результате получаем следующую таблицу меток.

Узел

 

Метка

 

Статус метки

1

 

[0, ]

 

Постоянная

 

 

 

 

 

2

 

[0 100, 1] [100,1]

 

Временная

 

 

 

 

 

3

 

[0 30, 1] [30,1]

 

Временная

 

 

 

 

 

Среди

узлов 2 и 3 узел 3 имеет наименьшее

значение расстояния

u3 30 . Поэтому статус метки этого узла изменяется на «постоянная».

Этап 2. Из узла 3 (последнего узла с постоянной меткой) можно попасть в узлы 4 и 5. Получаем следующий список узлов.

Узел

Метка

Статус метки

1

[0, ]

Постоянная

 

 

 

2

[100, 1]

Временная

 

 

 

3

[30, 1]

Постоянная

 

 

 

4

[30 10, 3] [40, 3]

Временная

 

 

 

5

[30 60, 3] [90, 3]

Временная

 

 

 

Временный статус метки [40, 3] узла 4 заменяется постоянным ( u4 40 ).

Этап 3. Из узла 4 можно достичь узлов 2 и 5. После вычисления меток получим следующий их список.

8

Узел

Метка

Статус метки

1

[0, ]

Постоянная

 

 

 

2

[40 15, 4] [55, 4]

Временная

 

 

 

3

[30, 1]

Постоянная

 

 

 

4

[40, 3]

Постоянная

 

 

 

5

[90, 3] или [40 50, 4] [90,4]

Временная

 

 

 

Временная метка [100, 1], полученная узлом 2 на втором этапе, изменена на [55, 4]. Это указывает на то, что найден более короткий путь к этому узлу

(проходящий через узел 4). На третьем этапе узел 5 получает две метки с одинаковым значением расстояния u5 90.

Этап 4. Из узла 2 можно перейти только в узел 3, но он уже имеет постоянную метку, которую нельзя изменить. Поэтому на данном этапе получаем такой же список меток, как и на предыдущем, но с единственным изменением: метка узла 2 получает статус «постоянной». С временной меткой остается только узел 5, но, так как из этого узла нельзя попасть ни в какой другой, процесс вычислений заканчивается.

 

[100,1](1)

 

 

 

[55,4](3)

 

[40,3](2)

 

15

 

4

 

2

 

100

20

10

50

1

30

 

60

3

 

5

[0, ](1)

[30,1](1)

[90,3](2)

 

 

 

[90,4](3)

Рисунок 2.2 – Графический способ применения алгоритма Дейкстры

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

9

Например, для определения кратчайшего маршрута между узлами 1 и 2 получаем такую обратную последовательность узлов

2 55,4 4 40,3 3 30,1 1

Таким образом, получаем путь 1 3 4 2 общей длиной 55 км.

2.3 Варианты заданий

Определить кратчайший маршрут от вершины 1 до вершины 7 и других вершин.

 

 

 

 

 

f

 

5

 

 

 

 

 

 

 

 

d

 

 

5

 

 

j

 

 

 

 

 

 

 

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

 

 

7

 

 

 

d

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

a

 

 

 

 

 

g

7

 

 

 

 

 

f

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

c

 

 

4

 

h

 

k

a

 

 

 

 

4

 

k

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

6

 

 

1

 

 

b

 

 

 

 

 

 

6

 

 

b

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

c

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а)

 

 

 

 

 

 

 

 

 

 

 

 

б)

 

 

 

 

 

 

 

 

 

 

Рисунок 2.3 – Варианты графов для задания 2

 

 

 

 

Таблица 2.1 – Варианты длин дуг для графов на рисунке 2.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дуги

 

 

 

 

 

 

 

Варианты

 

 

 

 

 

 

 

 

 

1

2

3

4

5

6

7

8

 

9

 

10

 

11

12

13

 

14

 

15

16

17

 

 

 

 

 

 

 

a

 

11

19

17

8

1

8

8

4

 

15

 

7

 

15

18

17

 

20

 

17

17

6

b

 

11

10

11

7

10

9

10

12

 

13

 

10

 

17

15

11

 

7

 

15

19

19

c

 

1

1

15

18

14

15

19

14

 

3

 

17

 

9

13

9

 

7

 

13

11

3

d

 

10

1

17

1

1

15

17

17

 

10

 

12

 

4

12

17

 

6

 

16

11

7

e

 

13

5

17

14

10

9

7

10

 

18

 

8

 

18

2

17

 

6

 

6

13

14

f

 

7

3

7

10

17

15

19

5

 

18

 

3

 

18

10

2

 

13

 

1

1

8

g

 

3

20

5

19

13

20

4

9

 

3

 

15

 

16

12

13

 

7

 

20

17

7

h

 

9

17

15

5

13

14

3

8

 

18

 

20

 

3

12

17

 

3

 

3

8

15

i

 

9

10

11

19

18

20

3

10

 

1

 

7

 

2

7

9

 

11

 

15

9

7

j

 

8

12

10

18

8

13

15

3

 

14

 

16

 

6

12

15

 

1

 

9

14

16

k

 

10

18

9

20

14

9

19

13

 

6

 

20

 

12

13

7

 

7

 

15

13

6

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 3. Алгоритм Флойда

3.1 Теоретическая часть

Этот алгоритм более общий по сравнению с алгоритмом Дейкстры, так как он находит кратчайшие пути между любыми двумя узлами сети. В этом алгоритме сеть представлена в виде квадратной матрицы с n строками и n

столбцами. Элемент i, j равен расстоянию dij от узла i к узлу j, которое

имеет конечное значение, если существует дуга i, j , и равен бесконечности в противном случае.

Покажем сначала основную идею метода Флойда. Пусть есть три узла i ,

j и k и заданы расстояния

между ними

(рис. 3.1).

Если

выполняется

неравенство

dij djk dik , то

целесообразно

заменить

путь

i k путем

i j k .

Такая замена (далее ее будем условно называть

треугольным

оператором) выполняется систематически в процессе выполнения алгоритма Флойда.

dij

j

djk

 

i

dik

k

 

Рисунок 3.1 – Треугольный оператор Флойда

Алгоритм Флойда требует выполнения следующих действий.

Этап 0. Определяем начальную матрицу расстояний D0 и матрицу последовательности узлов S0 . Диагональные элементы обеих матриц помечаются знаком "—", показывающим, что эти элементы в вычислениях не участвуют. Полагаем k 1.

11

 

 

1

2

j

n

 

1

 

 

 

 

 

 

 

d12

d1j

d1n

 

2

d21

d1j

d1n

D0

 

i

 

 

 

 

 

di1

di2

dij

din

 

 

n

 

 

 

 

 

dn1

dn2

dnj

 

 

1

2

j

n

 

1

 

 

 

 

 

 

 

2

j

n

 

2

 

 

 

 

 

 

 

1

j

n

S0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

1

2

j

n

 

 

 

 

n

 

 

 

 

 

 

 

1

2

j

 

 

 

 

 

 

 

 

Основной этап k . Задаем строку k и столбец k как ведущую строку и ведущий столбец. Рассматриваем возможность применения треугольного оператора ко всем элементам dij матрицы Dk 1. Если выполняется

неравенство

dik dkj dij,

i k, j k, i j ,

 

 

то делаем следующее:

 

 

 

 

 

a) создаем матрицу Dk путем замены в матрице

Dk 1 элемента

dij

суммой dik dkj,

 

 

 

 

 

b) создаем матрицу Sk , меняя

в

матрице Sk 1

элемент

sij на

k .

Полагаем k k 1 повторяем этап k .

 

 

 

 

 

Поясним действия, выполняемые на

k -м этапе алгоритма,

представив

матрицу Dk 1 так, как она показана на рис. 3.2. На этом рисунке строка k и

столбец k являются ведущими. Строка i — любая строка с номером от 1 до

12

k 1, а строка p — произвольная строка с номером от k 1 до n .

Аналогично столбец j представляет любой столбец с номером от 1 до k 1, а

столбец q — произвольный столбец с номером от k 1 до n . Треугольный оператор выполняется следующим образом. Если сумма элементов ведущих строки и столбца (показанных в квадратиках) меньше элементов, находящихся на пересечении столбца и строки (показаны в кружках), соответствующих рассматриваемым ведущим элементам, то расстояние (элемент в кружке) заменяется суммой расстояний, представленных ведущими элементами.

После реализации n этапов алгоритма определение по матрицам Dn и

Sn кратчайшего пути между узлами i и

j выполняется по следующим

правилам.

 

1. Расстояние между узлами i и j равно элементу dij в матрице Dn .

2. Промежуточные узлы пути от узла i

к узлу j определяем по матрице

Sn . Пусть sij k , тогда имеем путь i k j. Если далее sik k и skj j,

тогда считаем, что весь путь определен, так как найдены все промежуточные узлы. В противном случае повторяем описанную процедуру для путей от узла i к узлу k и от узла k к узлу j.

 

Столбец

Ведущий

Столбец

 

столбец

 

 

j

 

k

 

q

Строка i

 

 

 

 

 

 

 

 

 

dij

 

 

 

 

 

diq

 

 

dik

 

 

Ведущая k

 

 

 

 

 

 

 

 

 

 

 

dkj

 

 

 

 

 

 

dkq

 

 

 

 

 

 

 

 

 

строка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строка pdpj dpk dpq

Рисунок 3.2 – Реализация треугольного оператора

13

3.2 Пример выполнения задания

Найдем для сети, показанной на рис. 3.3, кратчайшие пути между любыми двумя узлами. Расстояния между узлами этой сети проставлены на рисунке возле соответствующих ребер. Ребро (3, 5) ориентированно, поэтому не допускается движение от узла 5 к узлу 3. Все остальные ребра допускают движение в обе стороны.

5

4

4

2

3

 

 

6

15

5

1

 

10

 

 

3

 

 

Рисунок 3.3 – Сеть для примера

Этап 0. Начальные матрицы D0 и S0 строятся непосредственно по

заданной схеме сети. Матрица D0 симметрична, за исключением пары

элементов d35 и d53 , где d53 (поскольку невозможен переход от узла 5 к

узлу 3).

 

 

 

D0

 

 

 

 

 

S0

 

 

 

1

2

3

4

5

 

1

2

3

4

5

 

 

 

 

 

 

 

 

 

 

 

 

1

3

10

 

 

1

2

3

4

5

2

 

 

 

 

 

2

 

 

 

 

 

3

 

5

 

1

3

4

5

3

 

 

 

 

 

3

 

 

 

 

 

10

 

6

15

1

2

4

5

4

 

 

 

 

 

4

 

 

 

 

 

 

5

6

4

1

2

3

5

5

 

 

 

 

 

5

 

 

 

 

 

 

 

 

4

1

2

3

4

 

 

 

 

 

 

 

 

 

 

 

 

Этап 1. В матрице D0 выделены ведущие строка и столбец с номером k 1. Затемненными представлены элементы d23 и d32 , единственные среди элементов матрицы D0 , значения которых можно улучшить с помощью треугольного оператора. Таким образом, чтобы на основе матриц D0 и S0

получить матрицы D1 и S1 выполняем следующие действия.

14

1. Заменяем d23

на d21 d13

3 10 13 и устанавливаем s23

1.

2. Заменяем d32

на d31 d12

10 3 13 и устанавливаем s32

1.

Матрицы D1 и S1 имеют следующий вид.

 

 

 

 

 

 

 

 

 

D1

 

 

 

 

 

 

S1

 

 

 

 

1

2

 

3

4

 

5

 

1

2

3

4

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

3

 

10

 

 

 

1

2

3

4

 

5

2

 

 

 

 

 

 

 

2

 

 

 

 

 

 

3

 

13

5

 

 

1

1

4

 

5

3

 

 

 

 

 

 

 

3

 

 

 

 

 

 

10

13

 

6

 

15

1

1

4

 

5

4

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

5

 

6

 

4

1

2

3

 

5

5

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

4

 

1

2

3

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Этап 2. Полагаем k 2; в матрице D1 выделены ведущие строка и столбец. Треугольный оператор применяется к элементам матриц D1 и S1,

выделенным затенением. В результате получаем матрицы D2 и S2 .

 

 

 

D2

 

 

 

 

 

S2

 

 

 

1

2

3

4

5

 

1

2

3

4

5

 

 

 

 

 

 

 

 

 

 

 

 

1

3

10

8

 

1

2

3

2

5

2

 

 

 

 

 

2

 

 

 

 

 

3

13

5

 

1

1

4

5

3

 

 

 

 

 

3

 

 

 

 

 

10

13

6

15

1

1

4

5

4

 

 

 

 

 

4

 

 

 

 

 

8

5

6

4

2

2

3

5

5

 

 

 

 

 

5

 

 

 

 

 

 

 

 

4

1

2

3

4

 

 

 

 

 

 

 

 

 

 

 

 

Этап 3. Полагаем k 3; в матрице D2 выделены ведущие строка и столбец. Треугольный оператор применяется к затемненным элементам матриц

D2 и S2 . В результате получаем матрицы D3 и S3 .

15

 

 

 

 

D3

 

 

 

 

 

 

 

 

 

S3

 

 

 

 

 

1

 

2

3

4

 

5

 

 

1

 

2

3

 

4

5

 

1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

3

10

8

 

25

 

 

2

 

3

 

2

 

3

 

2

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

3

 

13

5

 

28

 

1

 

 

1

 

4

 

3

 

3

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

10

 

13

6

 

15

 

1

 

1

 

 

4

 

5

 

4

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

6

 

5

6

 

4

 

2

 

2

 

3

 

 

5

 

5

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

 

1

 

2

 

3

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Этап 4.

Полагаем

k 4,

ведущие

строка

и

столбец

в

матрице D3

выделены. Получаем новые матрицы D4

и S4 .

 

 

 

 

 

 

 

 

 

 

 

 

D4

 

 

 

 

 

 

 

 

 

S4

 

 

 

 

 

1

 

2

3

4

 

5

 

 

1

 

2

3

 

4

5

 

1

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

3

10

8

 

12

 

 

2

 

3

 

2

 

4

 

2

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

3

 

11

5

 

9

 

1

 

 

4

 

4

 

4

 

3

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

10

 

11

6

 

10

 

1

 

4

 

 

4

 

4

 

4

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

8

 

5

6

 

4

 

2

 

2

 

3

 

 

5

 

5

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

 

 

12

 

9

10

4

 

 

4

 

4

 

4

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Этап 5. Полагаем k 5 , ведущие строка и столбец в матрице D4

выделены. Никаких действий на этом этапе не выполняем; вычисления закончены.

Конечные матрицы D4 и S4 содержат всю информацию, необходимую для определения кратчайших путей между любыми двумя узлами сети.

Например, кратчайшее расстояние между узлами 1 и 5 равно d15 12 .

Для определения соответствующих маршрутов напомним, что сегмент маршрута (i, j) состоит из ребра (i, j) только тогда, когда sij j. В противном

случае узлы i и j связаны, по крайней мере, через один промежуточный узел.

Например, поскольку s15 4 и s45 5, сначала кратчайший маршрут между узлами 1 и 5 будет иметь вид 1 4 5. Но так как s14 4 , узлы 1 и 4 в определяемом пути не связаны одним ребром (но в исходной сети они могут

16

быть связаны непосредственно). Далее следует определить промежуточный узел (узлы) между первым и четвертым узлами. Имеем s14 2 и s24 4,

поэтому маршрут 1 4 заменяем 1 2 4. Поскольку s12 2 и s24 4, других промежуточных узлов нет. Комбинируя определенные сегменты маршрута, окончательно получаем следующий кратчайший путь от узла 1 до узла 5: 1 2 4 5 . Длина этого пути равна 12 км.

3.3 Варианты заданий

Определить кратчайшие маршруты между всеми вершинами.

 

 

 

 

 

f

 

5

 

 

 

 

 

d

 

 

5

 

j

 

 

 

 

 

 

 

 

 

j

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

e

 

 

 

 

7

 

 

 

d

 

 

 

 

 

 

2

 

 

 

 

 

 

a

 

 

 

 

 

g

7

 

 

 

f

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

c

 

 

4

 

h

 

k

a

 

 

 

4

 

k

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

 

6

 

1

 

b

 

 

 

 

 

6

 

 

b

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

h

 

 

 

 

 

3

 

 

 

 

 

 

 

c

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

а)

 

 

 

 

 

 

 

 

 

б)

 

 

 

 

 

 

 

 

 

Рисунок 3.3 – Варианты графов для задания 3

 

 

 

 

Таблица 3.1 – Варианты длин дуг для графов на рисунке 3.3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Дуги

 

 

 

 

 

 

 

Варианты

 

 

 

 

 

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

 

14

15

16

17

 

 

 

a

 

6

19

16

16

11

18

8

8

6

19

5

14

9

 

20

15

4

19

b

 

9

5

20

16

10

19

13

2

10

8

10

7

14

 

7

15

12

20

c

 

14

1

16

6

9

17

3

16

4

13

18

5

3

 

3

9

3

4

d

 

12

3

7

15

7

2

4

16

2

20

4

10

16

 

11

11

5

13

e

 

6

15

3

19

12

11

1

12

1

3

12

7

2

 

17

11

12

5

f

 

4

13

8

19

15

19

6

8

13

15

10

1

7

 

12

13

19

1

g

 

18

3

11

17

9

10

4

4

12

6

16

7

9

 

4

15

10

6

h

 

11

9

13

8

7

10

19

16

16

17

15

3

17

 

19

4

8

20

i

 

12

19

20

13

19

9

5

17

6

9

1

12

19

 

14

7

6

6

j

 

6

18

2

4

20

5

9

10

19

4

16

9

15

 

8

12

19

2

k

 

13

4

10

1

10

20

10

17

14

6

17

12

12

 

4

8

12

3

 

 

 

 

 

 

 

 

 

17

 

 

 

 

 

 

 

 

 

 

Задание 4

Алгоритм нахождения максимального потока

4.1 Теоретическая часть

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

Рассмотрим ребро (i,j) с (начальной) пропускной способностью (Cij,Cji).

В процессе выполнения алгоритма части этих пропускных способностей "забираются" потоками, проходящими через данное ребро, в результате каждое ребро будет иметь остаточную пропускную способность. Будем

использовать запись (cij,cji ) для представления остаточных пропускных

способностей. Сеть, в которой все ребра имеют остаточную пропускную способность, назовем остаточной.

Для произвольного узла j,

получающего поток от узла i ,

определим

метку aj,i , где aj — величина потока, протекающего от узла

j к узлу i .

Чтобы найти максимальный поток, выполним следующие действия.

Этап 1. Для всех ребер

i,j положим остаточную пропускную

способность равной первоначальной пропускной способности, т.е.

приравняем cij,cji

 

 

 

ji . Назначим a и пометим узел 1 меткой

C

ij,C

, . Полагаем i 1 и переходим ко второму этапу.

Этап 2. Определяем множество Si как множество узлов j, в которые

можно перейти из узла i

по ребру с положительной остаточной пропускной

способностью (т.е. cij 0

для всех j Si ). Если Si выполняем третий

этап, в противном случае переходим к п. 4.

Этап 3. В множестве Si находим узел k , такой, что

 

 

 

 

cik max cij .

 

 

 

 

j Si

Положим ak cik и пометим узел k меткой ak,i . Если последней

меткой помечен узел стока (т.е. если k n ), сквозной путь найден, и мы переходим к пятому этапу. В противном случае полагаем i k и возвращаемся к п. 2.

18

Этап 4. Откат назад. Если i 1, сквозной путь невозможен, и мы переходим к п. 6. Если i 1, находим помеченный узел r , непосредственно

предшествующий узлу i , и удаляем узел i из множества узлов, смежных с

узлом r . Полагаем i r и возвращаемся ко второму этапу.

 

Этап 5. Определение

остаточной

сети. Обозначим через

Np 1,k1,k2, ,n множество

узлов, через

которые проходит

p -й

найденный сквозной путь от узла источника (узел 1) до узла стока (узел

n ).

Тогда максимальный поток, проходящий по этому пути, вычисляется как

 

fp min a1,ak1,ak2, ,an .

Остаточные пропускные способности ребер, составляющих сквозной

путь, уменьшаются на величину fp в направлении движения потока и

увеличиваются на эту же величину в противоположном направлении. Таким образом, для ребра i,j , входящего в сквозной путь, текущие остаточные пропускные способности cij,cji изменятся следующим образом:

a)

cij fp,cji fp , если поток идет от узла i

к узлу j,

b)

cij fp,cji fp , если поток идет от узла

j

к узлу i .

Далее восстанавливаем все узлы, удаленные в п.

4.

Полагаем i 1 и

возвращаемся ко второму этапу для поиска нового сквозного пути. Этап 6. Решение.

а) При m найденных сквозных путях максимальный поток вычисляется по формуле

Ff1 f2 fm

b)Имея значения начальных (Cij,Cji) и конечных cij,cji пропускных

способностей ребра i,j , можно вычислить оптимальный поток через это ребро следующим образом. Положим , Cij cij,Cji cji . Если 0 ,

поток, проходящий через ребро i,j , равен . Если же 0, тогда поток равен . (Случай, когда одновременно 0 и 0, невозможен.)

Процесс отката назад на четвертом этапе выполняется тогда, когда алгоритм должен "убить" промежуточный узел до момента реализации сквозного пути. Коррекцию пропускных способностей, выполняемых в п. 5, можно пояснить на примере простой сети, показанной на рис. 4.1. На рис.

19

4.1a найден первый сквозной путь N1 1,2,3,4 с максимальным потоком

f1 5. После этого остаточные пропускные способности ребер (1, 2), (2, 3), (3, 4) изменятся соответственно с 5,0 на 0,5 . На рис. 4.1б показан второй

сквозной путь N2 1,2,3,4 с максимальным потоком f2 5. После коррекции пропускных способностей получаем сеть, показанную на рис. 4.1в, где уже невозможно построить сквозной путь. Почему так получилось? При вычислении остаточных пропускных способностей в п. 5 при переходе от сети 4.1б к сети 4.1в невозможна организация потока в направлении 2 3.

Получается, что алгоритм как бы "помнит", что поток в направлении 2 3

уже был в предыдущих сквозных путях, и поэтому снова (на пятом этапе) изменяет пропускную способность с 0 до 5 в направлении от узла 3 к узлу 2.

 

 

[5, 1]

 

 

 

[5, 3]

 

 

 

 

 

 

 

 

2

 

 

 

2

 

 

2

 

0

 

 

5

5

 

 

5

 

5

 

 

0

[ ,

n]5

 

5

0 [5, 3]

[ ,

n]0

 

0

0 [5, 2] 0

 

 

5

5

1

 

 

4

1

 

 

4

1

 

 

 

4

5

 

0

0

5

 

5

5

0

 

 

0

5

0

 

 

5

0

 

 

0

 

5

 

 

0

 

 

 

 

 

 

 

 

3

 

 

 

3

 

 

3

 

 

 

[5, 2]

 

 

 

[5, 1]

 

 

 

 

 

 

Путь: 1 3 2 4

Путь: 1 3 2 4

Сквозных путей нет

f1 5

а)

 

f2 5

б)

 

 

в)

 

 

 

 

 

 

 

 

 

Рис. 4.1. Использование остаточных пропускных способностей для вычисления потока

4.2. Пример выполнения задания

Найдем максимальный поток в сети, представленной на рис. 4.2. На рис. 4.3 предлагается графическая иллюстрация выполнения алгоритма. Считаем полезным сравнить описание выполняемых алгоритмом вычислительных итераций с их графическим представлением.

20

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