Алгоритм Флойда — Уоршалла — различия между версиями
(→Задача) |
|||
Строка 1: | Строка 1: | ||
==Задача== | ==Задача== | ||
− | Пусть дано отношение <tex>R</tex> на множестве <tex>X</tex>. Необходимо построить его [[Транзитивное замыкание|транзитивное замыкание]] <tex>T = \mathrm{TrCl}(R)</tex>. | + | Пусть дано [[Определение отношения|отношение]] <tex>R</tex> на множестве <tex>X</tex>. Необходимо построить его [[Транзитивное замыкание|транзитивное замыкание]] <tex>T = \mathrm{TrCl}(R)</tex>. |
== Алгоритм == | == Алгоритм == |
Версия 08:57, 12 декабря 2011
Задача
Пусть дано отношение на множестве . Необходимо построить его транзитивное замыкание .
Алгоритм
Сформулируем нашу задачу в терминах графов: рассмотрим граф
, соответствующий отношению . Тогда необходимо найти все пары вершин , соединенных некоторым путем. Иными словами, требуется построить новое отношение , которое будет состоять из всех пар таких, что найдется последовательность , где .Псевдокод
Изначально матрица
заполняется соответственно отношению , то есть . Затем внешним циклом перебираются все элементы множества и для каждого из них, если он может использоваться, как промежуточный для соединения двух элементов и , отношение расширяется добавлением в него пары .for k = 1 to n for i = 1 to n for j = 1 to n W[i][j] = W[i][j] or (W[i][k] and W[k][j])
Сложность алгоритма
Три вложенных цикла работают за время
, то есть алгоритм имеет кубическую сложность.Ссылки
- Реализация алгоритма Флойда на С++
- Реализация алгоритма Флойда на Delphi
- Визуализатор
- Википедия — свободная энциклопедия
Источники
- Романовский И. В. Дискретный анализ: Учебное пособие для студентов, специализирующихся по прикладной математике и информатике. Изд. 3-е. — СПб.: Невский диалект, 2003. — 320 с. — ISBN 5-7940-0114-3.