Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Обозначим lij длину дуги (xi, xj), если таковой не существует примем lij = ¥, кроме того, положим lii = 0. Обозначим длину кратчайшего из путей из xi в xj с промежуточными вершинами из множества { x 1, …, xm }. Тогда можно получить следующие уравнения

, (2)

. (3)

Уравнение (2) очевидно. Обоснуем уравнение (3). Рассмотрим кратчай­ший путь из xi в xj с промежуточными вершинами из множества { x 1, …, xm, xm +1}. Если этот путь не содержит xm +1, то . Если же он содержит xm +1, то деля путь на отрезки от xi до xm +1 и от xm +1 до xj, получаем равенство .

Уравнения (2) и (3) позволяют легко вычислить матрицу расстояний [ dij ] между всеми парами вершин графа G (X, E). На первом этапе согласно (2) составляем n ´ n матрицу равную матрице [ lij ] весов ребер (n – число вершин G (X, E)). n раз производим вычисление по итерационной формуле (3), после чего имеем – матрицу расстояний.

Отметим, что алгоритм Флойда непосредственно не указывает сам кратчайший путь между вершинами, а только его длину. Алгоритм Флойда можно модифицировать таким образом, чтобы можно было находить и сами пути. Для этого получим вспомогательную матрицу [ Rij ], которая будет содержать наибольший номер вершины некоторого кратчайшего пути из x i в x j (Rij =0, если этот путь не содержит промежуточных вершин).

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

Последнее выражение следует из обоснования (3).

Теперь кратчайший путь выписывается из следующего рекурсивного алгоритма:

Кратчайший путь из xi в xj:

1°. Если Rij = 0 то выполнить 2°,

иначе выполнить 3°.

2°. Если i = j то выписать xi и закончить,

иначе выписать xi и xj закончить.

3°. Выписать кратчайший путь между xi и .

4°. Выписать кратчайший путь между и xj.

Пункты 3° и 4° предполагают рекурсивное обращение к рассмотренному алгоритму.

С задачей определения кратчайших путей в графе тесно связана задача транзитивного замыкания бинарного отношения.

Напомним, что бинарным отношением на множестве Х называется произвольное подмножество E Ì X ´ X.

Транзитивным называется отношение, удовлетворяющее следующему условию: если (x, y) Î E и (y, z) Î E, то (x, z) Î E для всех x, y, z Î X. Отметим, что бинарное отношение можно однозначно представить орграфом G (X, E). Теперь для произвольного отношения Е определим новое отношение Е * следующим образом

E * = {(x, y) | если в G (X, E) существует путь ненулевой длины из x в y }.

Легко проверить, что Е * - транзитивное отношение. Кроме того, Е * является наименьшим транзитивным отношением на Х в том смысле, что для произвольного транзитивного отношения F É E выполняется E * É F. Отно­ше­ние Е * называется транзитивным замыканием отношения Е.

Если отношение Е представить в виде графа G (X, E) в котором каждая дуга имеет вес 1, то транзитивное замыкание Е * можно вычислить с помощью алгоритма Флойда. При этом надо учесть, что

(xi, xj) Î E * если .

Для большего удобства алгоритм Флойда в этом случае можно моди­фи­ци­ровать следующим образом.

Положим

.

Вместо (3) запишем

,

где Ú – дизъюнкция (логическое сложение),

Ù – конъюнкция (логическое умножение).

После завершения работы алгоритма будем иметь

 

Модифицированный таким образом алгоритм называется алгоритмом Уоршелла.

 

ИНДИВИДУАЛЬНОЕ ЗАДАНИЕ

 

 

 

 

 

 


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

<== предыдущая лекция | следующая лекция ==>
Обоснование алгоритма. Предположим, что уже построена простая цепь mk-1 = {e1, e2, , ek-1} для k³2 методом, указанным в алгоритме | Первая лек
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 1167; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.