Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Глава 19. Орграфы и ориентированные ациклические графы. булевых матриц? Ответ на данный вопрос может быть таким: рассматриваемый алгоритм транзитивного замыкания является оптимальным способом умножения некоторых
булевых матриц? Ответ на данный вопрос может быть таким: рассматриваемый алгоритм транзитивного замыкания является оптимальным способом умножения некоторых типов булевых матриц (число ненулевых элементов которых составляет O(V)). Нижняя граница показывает, что мы не можем надеяться на то, что найдем такой алгоритм транзитивного замыкания, который выполняется за время, пропорциональное V2 для всех орграфов, однако это не исключает возможности, что мы найдем алгоритмы, подобные рассматриваемому, которые работают быстрее на некоторых классах орграфов. Если эти графы суть именно те, которые и требуется обрабатывать, зависимость между транзитивным замыканием и умножением булевых матриц не будет иметь для нас особого значения. Методы, описанные в данном разделе, легко расширить с таким расчетом, чтобы они снабдили клиентские программы средством, позволяющим находить конкретные пути, соединяющие две вершины, путем отслеживания дерева поиска в соответствии с изложенным в разделе 17.8. Мы рассмотрим специальные реализации АТД этого вида в контексте более общих задач поиска кратчайших путей в главе 21. В таблице 19.1 представлены эмпирические результаты сравнения элементарных алгоритмов транзитивного замыкания, описанных в настоящем разделе. Реализация решения, основанного на поиске и ориентированного на представление графа в виде списков смежных вершин, на данный момент является наиболее быстрым методом для разреженных графов. Все остальные реализации вычисляют матрицу смежности (размера V2), следовательно, ни одна из них не подходит для обработки крупных разреженных графов. В случае разреженных графов, транзитивные замыкания которых тоже разрежены, мы можем воспользоваться для вычисления замыканий реализацией, ориентированной на представление графа в виде списка смежных вершин, так что размер ее выхода пропорционален числу ребер в транзитивном замыкании. Естественно, это число служит нижней границей стоимости вычисления транзитивного замыкания, которое мы можем получить для различных типов орграфов, используя для этой цели различные алгоритмические технологии (см. упражнения 19.64 и 19.65). Несмотря на наличие такой возможности, мы в общем случае полагаем, что результат транзитивного замыкания есть насыщенная матрица. В силу этого обстоятельства, мы можем воспользоваться такой реализацией, как DenseGRAPH, которая способна отвечать на запросы о достижимости, при этом мы рассматриваем алгоритмы транзитивного замыкания, вычисляющие матрицу транзитивного замыкания за время, пропорциональное К2, как оптимальные, поскольку на их выполнение затрачивается время, пропорциональное размерам их выходов. Таблица 19.1. Эмпирическое исследование алгоритмов транзитивного замыкания В данной таблице показаны значения времени выполнения различных алгоритмов вычисления транзитивных замыканий случайных орграфов, как насыщенных, так и разреженных. Эти значения разительно отличаются друг от друга. Для всех алгоритмов, за исключением поиска в глубину на орграфе, представленном в виде списков смежных вершин, время выполнения возрастает в 8 раз при увеличении V в два раза. Этот факт подтверждает вывод о том, что по существу это время пропорционально V3. Поиск в глубину на орграфе, представленном в виде списков смежных вершин, требует для своего выполнения время, пропорциональное VE, что может служить объяснением того факта, что время выполнения этого алгоритма возрастает в примерно в 4 раза с увеличением V и Е в два раза каждого (разреженные графы), и примерно в 2 раза, когда мы увеличиваем Е в два раза (насыщенные графы) за исключением тех случаев, когда непроизводительные Часть 5. Алгоритмы на графах
Обозначения: W Алгоритм Уоршалла (раздел 19.3) W* Усовершенствованный алгоритм Уоршалла (программа 19.3) А Поиск в глубину, представление графа в виде матрицы смежности (программы 19.4 и 17.7) L Поиск в глубину, представление графа в виде списков смежных вершин (программы 19.4 и 17.9) Если такая матрица смежности симметрична, она эквивалентна неориентированному графу, благодаря чему поиск транзитивного замыкания становится эквивалентным поиску связных компонентов — транзитивное замыкание представляет собой объединение полных графов в вершинах связных компонент (см. упражнение 19.48). Алгоритмы определения связности, которые мы изучали в разделе 18.5, эквивалентны вычислению абстрактного транзитивного замыкания для симметричных орграфов (неориентированных графов), требуют для своего выполнения время, пропорциональное V, и способны давать ответы на запросы о достижимости за постоянное время. Можем ли мы добиваться таких же успешных результатов в случае орграфов общего вида? Для каких типов орграфов можно вычислить транзитивное замыкание за линейное время? Чтобы ответить на эти вопросы нам придется изучить структуру орграфов более подробно, и в первую очередь — структуру графов DAG.
|