Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Метод Флойда





Пусть требуется определить кратчайшие пути m[ xi, xj ] между всеми парами вершин xi и xj графа G = (X, U). Решение задачи может быть получено n -кратным применением метода Форда - Беллмана (для произвольных весов дуг) или метода Дейкстры (для неотрицательных весов). Предельные оценки вычислительной сложности подобных процедур определяются как O (n 4) и O (n 3) операций соответственно. Поэтому в первом случае при большой размерности задачи ее решение крайне затруднительно или даже невозможно.

Более эффективной процедурой поиска всех кратчайших путей m[ xi, xj ] для i, j = является алгоритм Флойда, который применяется к графовым моделям как с неотрицательными, так и с произвольными весами дуг. Если граф содержит контур суммарной отрицательной длины, то алгоритм Флойда фиксирует его существование. При этом предельная оценка трудоемкости для случая произвольных весов дуг составляет O (n 3) операций, а для неотрицательных весов время решения примерно на 50 % меньше по сравнению с n -кратным применением алгоритма Дейкстры [5].

Алгоритм Флойда базируется на использовании последовательности из n преобразований итераций начальной матрицы весов дуг, элементы которой определяются следующим образом:

На каждой k -й итерации (k £ n) элементы матрицы С определяют длины кратчайших путей между каждой парой вершин xi и xj при условии, что путь m[ xi, xj ] может проходить только через вершины из множества { x 1, x 2,..., xk }. Таким образом, итоговое значение матрицы C после выполнения n итераций показывает искомые значения длин кратчайших путей m[ xi, xj ].

В основе алгоритма Флойда лежат следующие очевидные уравнения:

, (1.8)

. (1.9)

Пусть кратчайший путь m[ xi, xj ] может содержать промежуточные вершины из множества { x 1, x 2,..., xk -1, xk }. Тогда второе уравнение показывает, что если этот путь не содержит вершину xk +1, то его длина определяется как . В противном случае путь m[ xi, xj ] можно разбить на две части m[ xi, xk +1] и m[ xk +1, xj ]. Следовательно, его длина составляет . В целом уравнения (1.8) и (1.9) позволяют легко вычислить длины кратчайших путей m[ xi, xj ] между всеми парами вершин xi, xj Î X.

 

Алгоритм 1.5 (метод Флойда)

 

Данные: матрица весов дуг ориентированного графа G = (X, U); произвольные значения cij для (xi, xj) Î U.

Результаты: кратчайшие расстояния между всеми парами вершин (xi, xj) Î X.

Шаг 1 (присвоение начальных значений)

Установить номер итерации k = 0.

Шаг 2 (итерационный процесс)

Присвоить k = k + 1. Для всех i ¹ k, удовлетворяющих условию , и для всех j ¹ k, таких, что , вычислить новые значения

Все другие элементы матрицы C сохранить без изменений, т. е.

Шаг 3 (проверка условий окончания)

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

б) Если и k = n, то решение получено. Конец алгоритма.

в) Если и k < n, то переход к шагу 2.

 

Кратчайший путь m[ xi, xj ] можно построить исходя из его длины следующим образом. Сначала определяется предпоследняя вершина пути предшествующая xj, по условию . Затем находится вершина для которой и т. д. подобно использованию соотношения (1.2).

В работах [5, 8, 11] представлен метод построения путей m[ xi, xj ], основанный на хранении дополнительной информации об индексах вершин, составляющих тот или иной путь. Для этого требуется еще одна матрица , элемент vij которой указывает индекс вершины, непосредственно предшествующей xj в пути m[ xi, xj ].

Начальные значения присваиваются элементам матрицы V на шаге 1 алгоритма 1.5. Обновление матрицы производится на шаге 2 следующим образом:

Полученные значения позволяют построить кратчайший путь

m[ xi, xj ] = (xi, xv, …, x g, x b, x a, xj)

между любой парой вершин, где

Пример 1.4. Пусть граф G = (X, U) имеет вид, показанный на рис. 1.9. Требуется вычислить расстояния между всеми парами вершин и сформировать матрицу V для построения кратчайших путей.

Рис. 1.9. Представление графа G для примера 1.4

 

На первой итерации алгоритма 1.5 матрицы C (0) = C и V (0) = V не изменяются, так как элементы , которые могут быть уменьшены, при k = 1 определяются индексами i Î Ø и j Î {2, 3, 4, 5}. Следовательно, C (1) = C (0) и V (1) = V (0).

На второй итерации (k = 2) производится вычисление новых значений для элементов cij и vij, где i Î {1} и j Î {3, 4, 5}:

При k = 3 могут измениться элементы с индексами i Î{1, 2, 4} и j Î {4, 5}. Результаты работы алгоритма 1.5 на каждой итерации имеют следующий вид, где C (5) = C * и V (5) = V*:

 

 

 

 

Построение кратчайшего пути m[ x 1, x 4], для которого длина определяется как = 3, производится следующим образом. Согласно определению матрицы V элемент показывает индекс предпоследней вершины x 5 искомого пути. Далее , т. е. искомый путь имеет вид m[ x 1, x 4] = (x 1, …, x 3, x 5, x 4). Следующее значение указывает еще одну промежуточную вершину x 2. Окончательно имеем и путь m[ x 1, x 4] = (x 1, x 2, x 3, x 5, x 4).

В заключение следует отметить, что структура матрицы V позволяет легко найти в графе контур суммарной отрицательной длины при его существовании (c ii < 0) как кратчайший путь вида m[ xi, xj ].

 

У П Р А Ж Н Е Н И Я

 

1.41. Продолжить решение задачи из примера 1.4 для итераций k =3, 4, 5. Построить кратчайший путь из вершины x 2 в x 4 без применения матрицы V.

1.42. Вычислить расстояния между всеми парами вершин для графа, показанного на рис. 1.10,а. Определить кратчайший путь из x 1 в x 6 и, наоборот, из x 6 в x 1.

1.43. Разработать программу вычисления минимальных расстояний между всеми парами вершин графа по методу Флойда.

1.44. Разработать программу построения кратчайших путей по матрице V.

1.45. Определить контур отрицательной длины для графа, приведенного на рис. 1.10,б.

Рис. 1.10. Графы для упражнений: а - 1.42; б - 1.45

 


Date: 2015-10-21; view: 1614; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию