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

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

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

Каждая вершина в таком графе используется только один раз (простой маршрут), а длина кратчайшего пути определится суммой весов ребер на переходе i,j=(хi;...хk;...хj):

Li,j=m,n lm,n, где im, nj, mn.

Для поиска кратчайших путей существует несколько алгоритмов. Алгоритмы Форда-Беллмана и Дейкстра позволяют найти кратчайшие пути от заданной вершины графа до любой другой. В результате этих вычислений формируется древовидный остов с корнем в заданной вершине.

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

В основе всех алгоритмов лежит операция сравнения двух простых маршрутов.

На рис. 3.27 показаны два простых маршрута, соединяющих вершины хi и хj. Выбор крат- чайшего пути между вершинами

есть результат сравнения длин двух маршрутов, т.е.

Li,j=min{li,j; (li,p+ lp,j)}.

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

Для того, чтобы определять по алгоритму Флойда. кратчайшие путь и переходы между вершинами xi и xj, необходимо использовать две матрицы: матрицу кратчайших путей ║l(n;n)║ и матрицу кратчайших переходов ║(n;n)║, которые позволяют сравнивать различные маршруты через базовую вершину xp.

Вершина хp в матрице кратчайших путей называется базовой, а строка и столбец матрицы ║lp║ - базовыми (выделены в матрице штриховкой), если она позволяет сравнивать кратчайшие пути между любой парой вершин xi и xj, смежных с вершиной хp. Базовая вершина

позволяет найти путь из вершины xi в вершину xj через вершину xp по формуле lij=(lip+ lpj), представить этот результат для сравнения с имеющимся значением lij и выбрать наименьшее значение.

lp

x0

..

xi

..

xp

..

xj

p

x0

..

xi

..

xp

..

xj

x0

0

..

l0i

..

l0p

..

l0j

x0

x0

..

xi

..

xp

..

xj

...

...

0

...

..

...

..

...

...

x0

..

xi

..

xp

..

xj

xi

li0

..

0

..

lip

..

lij

xi

x0

..

xi

..

xp

..

xj

...

...

..

...

0

...

..

...

...

x0

..

xi

..

xp

..

xj

xp

lp0

..

lpi

..

0

..

lpj

xp

x0

..

xi

..

xp

..

xj

...

...

..

...

..

...

0

...

...

x0

..

xi

..

xp

..

xj

xj

ljo

..

lji

..

ljp

..

0

xj

x0

..

xi

..

xp

..

xj

Если в качестве базовой, использовать последовательно все вершины, начиная с х0, то за p=(n-1) шагов итерации можно найти кратчайшие пути между любой парой вершин. Для p=0 матрица ║l0║ есть матрица весов графа.

Для p=0 элементы матрицы 0 есть концевые вершины перехода из хi в хj. Поэтому в каждом столбце хj матрицы 0 указана вершина хj. На p-м шаге итерации происходит замена вершины перехода вершиной кратчайшего перехода по формулам:

а) если (li,p+ lp,j)pli,jp, то i,j (p+1) = i,j pj;

b) если (li,p+ lp,j)p<li,jp, то i,j (p+1)p.

Следовательно, для анализа n-вершинного графа необходимо последовательно построить (n-1) матриц.

Алгоритм Флойда:

шаг 1: составить матрицу весов ║lp║ и матрицу переходов ║p║ для p=0, где p – шаг итерации;

шаг 2: определить вершину p базовой и выделить базовые строки и столбец;

шаг 3: вычеркнуть строки и столбцы, базовые элементы которых имеют значение , т.к. (li,p+) и (+ lp,j) всегда больше конечного значения li,j;

шаг 4: сравнить каждый невычеркнутый элемент lijp с суммой (li,p+ lp,j)p для формирования значений li,j и i,j на очередном шаге итерации:

a) если (li,p+ lp,j)p<li,jp, то li,jp+1=(li,p+ lp,j)p, а i,j (p+1)=p;

b) если (li,p+ lp,j)p>li,jp, то li,jp+1=li,jp; i,j (p+1)= i,j p.

шаг 5: если p<n, то принять p=p+1 и вернуться к шагу 4, иначе конец.

Пример: Найти кратчайшие пути на графе (см. рис. 3.28).

Ниже таблицами показан процесс вычисления от p=0 до p=7

l0

x0

x1

x2

x3

x4

x5

x6

x7

0

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

9

3

x0

x0

x1

x2

x3

x4

x5

x6

x7

x1

9

0

2

7

x1

x0

x1

x2

x3

x4

x5

x6

x7

x2

2

0

2

4

8

6

x2

x0

x1

x2

x3

x4

x5

x6

x7

x3

3

2

0

5

x3

x0

x1

x2

x3

x4

x5

x6

x7

x4

7

4

0

10

9

x4

x0

x1

x2

x3

x4

x5

x6

x7

x5

8

10

0

7

12

x5

x0

x1

x2

x3

x4

x5

x6

x7

x6

6

5

7

0

10

x6

x0

x1

x2

x3

x4

x5

x6

x7

x7

9

12

10

0

x7

x0

x1

x2

x3

x4

x5

x6

x7

l1

x0

x1

x2

x3

x4

x5

x6

x7

1

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

9

3

x0

x0

x1

x2

x3

x4

x5

x6

x7

x1

9

0

2

12

7

x1

x0

x1

x2

x0

x4

x5

x6

x7

x2

2

0

2

4

8

6

x2

x0

x1

x2

x3

x4

x5

x6

x7

x3

3

12

2

0

5

x3

x0

x0

x2

x3

x4

x5

x6

x7

x4

7

4

0

10

9

x4

x0

x1

x2

x3

x4

x5

x6

x7

x5

8

10

0

7

12

x5

x0

x1

x2

x3

x4

x5

x6

x7

x6

6

5

7

0

10

x6

x0

x1

x2

x3

x4

x5

x6

x7

x7

9

12

10

0

x7

x0

x1

x2

x3

x4

x5

x6

x7

l2

x0

x1

x2

x3

x4

x5

x6

x7

2

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

9

11

3

16

x0

x0

x1

x1

x3

x1

x5

x6

x7

x1

9

0

2

12

7

x1

x0

x1

x2

x0

x4

x5

x6

x7

x2

11

2

0

2

4

8

6

x2

x1

x1

x2

x3

x4

x5

x6

x7

x3

3

12

2

0

19

5

x3

x0

x0

x2

x3

x1

x5

x6

x7

x4

16

7

4

19

0

10

9

x4

x1

x1

x2

x1

x4

x5

x6

x7

x5

8

10

0

7

12

x5

x0

x1

x2

x3

x4

x5

x6

x7

x6

6

5

7

0

10

x6

x0

x1

x2

x3

x4

x5

x6

x7

x7

9

12

10

0

x7

x0

x1

x2

x3

x4

x5

x6

x7

l3

x0

x1

x2

x3

x4

x5

x6

x7

3

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

9

11

3

15

19

17

x0

x0

x1

x1

x3

x2

x2

x2

x7

x1

9

0

2

4

6

10

8

x1

x0

x1

x2

x2

x2

x2

x2

x7

x2

11

2

0

2

4

8

6

x2

x1

x1

x2

x3

x4

x5

x6

x7

x3

3

4

2

0

6

10

5

x3

x0

x2

x2

x3

x2

x2

x6

x7

x4

15

6

4

6

0

10

10

9

x4

x2

x2

x2

x2

x4

x5

x2

x7

x5

19

10

8

10

10

0

7

12

x5

x2

x2

x2

x2

x4

x5

x6

x7

x6

17

8

6

5

10

7

0

10

x6

x2

x2

x2

x3

x2

x5

x6

x7

x7

9

12

10

0

x7

x0

x1

x2

x3

x4

x5

x6

x7

l4

x0

x1

x2

x3

x4

x5

x6

x7

4

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

7

5

3

9

13

8

x0

x0

x3

x3

x3

x3

x3

x3

x7

x1

7

0

2

4

6

10

8

x1

x3

x1

x2

x2

x2

x2

x2

x7

x2

5

2

0

2

4

8

6

x2

x3

x1

x2

x3

x4

x5

x6

x7

x3

3

4

2

0

6

10

5

x3

x0

x2

x2

x3

x2

x2

x6

x7

x4

9

6

4

6

0

10

10

9

x4

x3

x2

x2

x2

x4

x5

x2

x7

x5

13

10

8

10

10

0

7

12

x5

x3

x2

x2

x2

x4

x5

x6

x7

x6

8

8

6

5

10

7

0

10

x6

x3

x2

x2

x3

x2

x5

x6

x7

x7

9

12

10

0

x7

x0

x1

x2

x3

x4

x5

x6

x7

l5

x0

x1

x2

x3

x4

x5

x6

x7

5

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

7

5

3

9

13

8

18

x0

x0

x3

x3

x3

x3

x3

x3

x4

x1

7

0

2

4

6

10

8

15

x1

x3

x1

x2

x2

x2

x2

x2

x4

x2

5

2

0

2

4

8

6

13

x2

x3

x1

x2

x3

x4

x5

x6

x4

x3

3

4

2

0

6

10

5

15

x3

x0

x2

x2

x3

x2

x2

x6

x4

x4

9

6

4

6

0

10

10

9

x4

x3

x2

x2

x2

x4

x5

X2

x7

x5

13

10

8

10

10

0

7

12

x5

x3

x2

x2

x2

x4

x5

x6

x7

x6

8

8

6

5

10

7

0

10

x6

x3

x2

x2

x3

x2

x5

x6

x7

x7

18

15

13

15

9

12

10

0

x7

x4

x4

x4

x4

x4

x5

x6

x7

l6

x0

x1

x2

x3

x4

x5

x6

x7

6

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

7

5

3

9

13

8

18

x0

x0

x3

x3

x3

x3

x3

x3

x4

x1

7

0

2

4

6

10

8

15

x1

x3

x1

x2

x2

x2

x2

x2

x4

x2

5

2

0

2

4

8

6

13

x2

x3

x1

x2

x3

x4

x5

x6

x4

x3

3

4

2

0

6

10

5

15

x3

x0

x2

x2

x3

x2

x2

x6

x4

x4

9

6

4

6

0

10

10

9

x4

x3

x2

x2

x2

x4

x5

x2

x7

x5

13

10

8

10

10

0

7

12

x5

x3

x2

x2

x2

x4

x5

x6

x7

x6

8

8

6

5

10

7

0

10

x6

x3

x2

x2

x3

x2

x5

x6

x7

x7

18

15

13

15

9

12

10

0

x7

x4

x4

x4

x4

x4

x5

x6

x7

l7

x0

x1

x2

x3

x4

x5

x6

x7

7

x0

x1

x2

x3

x4

x5

x6

x7

x0

0

7

5

3

9

13

8

18

x0

x0

x3

x3

x3

x3

x3

x3

x4

x1

7

0

2

4

6

10

8

15

x1

x3

x1

x2

x2

x2

x2

x2

x4

x2

5

2

0

2

4

8

6

13

x2

x3

x1

x2

x3

x4

x5

x6

x4

x3

3

4

2

0

6

10

5

15

x3

x0

x2

x2

x3

x2

x2

x6

x4

x4

9

6

4

6

0

10

10

9

x4

x3

x2

x2

x2

x4

x5

x2

x7

x5

13

10

8

10

10

0

7

12

x5

x3

x2

x2

x2

x4

x5

x6

x7

x6

8

8

6

5

10

7

0

10

x6

x3

x2

x2

x3

x2

x5

x6

x7

x7

18

15

13

15

9

12

10

0

x7

x4

x4

x4

x4

x4

x5

x6

x7

По матрицам ||l7|| и ||i,j7|| можно найти длину кратчайшего перехода между любой парой вершин исходного графа.

Например, между вершинами х0 и х7 длина кратчайшего пути равна 18, а переход 07=(х0, х3, х2, х4, х7), между вершинами х1 и х6 длина кратчайшего пути равна 8, а переход 16=(х1, х2, х6) и т.д.

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

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