Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Метод Флойда
Пусть требуется определить кратчайшие пути m[ xi, xj ] между всеми парами вершин xi и xj графа G = (X, U). Решение задачи может быть получено n -кратным применением метода Форда - Беллмана (для произвольных весов дуг) или метода Дейкстры (для неотрицательных весов). Предельные оценки вычислительной сложности подобных процедур определяются как O (n 4) и O (n 3) операций соответственно. Поэтому в первом случае при большой размерности задачи ее решение крайне затруднительно или даже невозможно. Более эффективной процедурой поиска всех кратчайших путей m[ xi, xj ] для i, j = Алгоритм Флойда базируется на использовании последовательности из n преобразований итераций начальной матрицы
На каждой k -й итерации (k £ n) элементы В основе алгоритма Флойда лежат следующие очевидные уравнения:
Пусть кратчайший путь m[ xi, xj ] может содержать промежуточные вершины из множества { x 1, x 2,..., xk -1, xk }. Тогда второе уравнение показывает, что если этот путь не содержит вершину xk +1, то его длина определяется как
Алгоритм 1.5 (метод Флойда)
Данные: матрица Результаты: кратчайшие расстояния Шаг 1 (присвоение начальных значений) Установить номер итерации k = 0. Шаг 2 (итерационный процесс) Присвоить k = k + 1. Для всех i ¹ k, удовлетворяющих условию
Все другие элементы матрицы C сохранить без изменений, т. е.
Шаг 3 (проверка условий окончания) а) Если б) Если в) Если
Кратчайший путь m[ xi, xj ] можно построить исходя из его длины В работах [5, 8, 11] представлен метод построения путей m[ xi, xj ], основанный на хранении дополнительной информации об индексах вершин, составляющих тот или иной путь. Для этого требуется еще одна матрица Начальные значения
Полученные значения 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 = 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], для которого длина определяется как В заключение следует отметить, что структура матрицы 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: 1725; Нарушение авторских прав |