
- •Задание 1 Алгоритм построения минимального остовного дерева
- •1.1 Теоретическая часть
- •1.2 Пример выполнения задания
- •1.3 Варианты заданий
- •Задание 2. Алгоритм Дейкстры.
- •2.1 Теоретическая часть
- •2.2 Пример выполнения задания
- •2.3 Варианты заданий
- •Задание 3. Алгоритм Флойда
- •3.1 Теоретическая часть
- •3.2 Пример выполнения задания
- •3.3 Варианты заданий
- •Задание 4 Алгоритм нахождения максимального потока
- •4.1 Теоретическая часть
- •4.2. Пример выполнения задания
- •4.3 Варианты заданий
Задание 3. Алгоритм Флойда
3.1 Теоретическая часть
Этот алгоритм
более общий по сравнению с алгоритмом
Дейкстры, так как он находит кратчайшие
пути между любыми двумя узлами сети. В
этом алгоритме сеть представлена в виде
квадратной матрицы с
строками и
столбцами. Элемент
равен расстоянию
от узла
к узлу
,
которое имеет конечное значение, если
существует дуга
,
и равен бесконечности в противном
случае.
Покажем сначала
основную идею метода Флойда. Пусть есть
три узла
,
и
и заданы расстояния между ними (рис.
3.1). Если выполняется неравенство
,
то целесообразно заменить путь
путем
.
Такая замена (далее ее будем условно
называть треугольным оператором)
выполняется систематически в процессе
выполнения алгоритма Флойда.
Рисунок 3.1 – Треугольный оператор Флойда
Алгоритм Флойда требует выполнения следующих действий.
Этап 0.
Определяем начальную матрицу расстояний
и матрицу последовательности узлов
.
Диагональные элементы обеих матриц
помечаются знаком "—", показывающим,
что эти элементы в вычислениях не
участвуют. Полагаем
.
Основной этап
.
Задаем строку
и столбец
как ведущую строку и ведущий столбец.
Рассматриваем возможность применения
треугольного оператора ко всем элементам
матрицы
.
Если выполняется неравенство
,
то делаем следующее:
a)
создаем матрицу
путем замены в матрице
элемента
суммой
,
b)
создаем матрицу
,
меняя в матрице
элемент
на
.
Полагаем
повторяем этап
.
Поясним действия,
выполняемые на
-м
этапе алгоритма, представив матрицу
так, как она показана на рис. 3.2. На этом
рисунке строка
и столбец
являются ведущими. Строка
— любая строка с номером от 1 до
,
а строка
— произвольная строка с номером от
до
.
Аналогично столбец
представляет любой столбец с номером
от 1 до
,
а столбец
— произвольный столбец с номером от
до
.
Треугольный оператор выполняется
следующим образом. Если сумма элементов
ведущих строки и столбца (показанных в
квадратиках) меньше элементов, находящихся
на пересечении столбца и строки (показаны
в кружках), соответствующих рассматриваемым
ведущим элементам, то расстояние (элемент
в кружке) заменяется суммой расстояний,
представленных ведущими элементами.
После реализации
этапов алгоритма определение по матрицам
и
кратчайшего пути между узлами
и
выполняется по следующим правилам.
1. Расстояние между
узлами
и
равно элементу
в матрице
.
2. Промежуточные
узлы пути от узла
к узлу
определяем по матрице
.
Пусть
,
тогда имеем путь
.
Если далее
и
,
тогда считаем, что весь путь определен,
так как найдены все промежуточные узлы.
В противном случае повторяем описанную
процедуру для путей от узла
к узлу
и от узла
к узлу
.
Рисунок 3.2 – Реализация треугольного оператора
3.2 Пример выполнения задания
Найдем для сети, показанной на рис. 3.3, кратчайшие пути между любыми двумя узлами. Расстояния между узлами этой сети проставлены на рисунке возле соответствующих ребер. Ребро (3, 5) ориентированно, поэтому не допускается движение от узла 5 к узлу 3. Все остальные ребра допускают движение в обе стороны.
Рисунок 3.3 – Сеть для примера
Этап 0.
Начальные матрицы
и
строятся непосредственно по заданной
схеме сети. Матрица
симметрична, за исключением пары
элементов
и
,
где
(поскольку невозможен переход от узла
5 к узлу 3).
Этап 1.
В матрице
выделены ведущие строка и столбец с
номером
.
Затемненными представлены элементы
и
,
единственные среди элементов матрицы
,
значения которых можно улучшить с
помощью треугольного оператора. Таким
образом, чтобы на основе матриц
и
получить матрицы
и
выполняем следующие действия.
1. Заменяем
на
и устанавливаем
.
2. Заменяем
на
и устанавливаем
.
Матрицы
и
имеют следующий вид.
Этап 2.
Полагаем
;
в матрице
выделены ведущие строка и столбец.
Треугольный оператор применяется к
элементам матриц
и
,
выделенным затенением. В результате
получаем матрицы
и
.
Этап 3.
Полагаем
;
в матрице
выделены ведущие строка и столбец.
Треугольный оператор применяется к
затемненным элементам матриц
и
.
В результате получаем матрицы
и
.
Этап 4.
Полагаем
,
ведущие строка и столбец в матрице
выделены. Получаем новые матрицы
и
.
Этап 5.
Полагаем
,
ведущие строка и столбец в матрице
выделены. Никаких действий на этом этапе
не выполняем; вычисления закончены.
Конечные матрицы
и
содержат всю информацию, необходимую
для определения кратчайших путей между
любыми двумя узлами сети. Например,
кратчайшее расстояние между узлами 1 и
5 равно
.
Для определения
соответствующих маршрутов напомним,
что сегмент маршрута
состоит из ребра
только тогда, когда
.
В противном случае узлы
и
связаны, по крайней мере, через один
промежуточный узел. Например, поскольку
и
,
сначала кратчайший маршрут между узлами
1 и 5 будет иметь вид
.
Но так как
,
узлы 1 и 4 в определяемом пути не связаны
одним ребром (но в исходной сети они
могут быть связаны непосредственно).
Далее следует определить промежуточный
узел (узлы) между первым и четвертым
узлами. Имеем
и
,
поэтому маршрут
заменяем
.
Поскольку
и
,
других промежуточных узлов нет. Комбинируя
определенные сегменты маршрута,
окончательно получаем следующий
кратчайший путь от узла 1 до узла 5:
.
Длина этого пути равна 12 км.