Студопедия

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

Разделы сайта

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






Глава 19, Орграфы и ориентированные ациклические графы. Доказательство: Пусть даны булевы матрицы А и В размерности V на V, построим мат­рицу размерности ЗV на 3Vследующего вида:









Доказательство: Пусть даны булевы матрицы А и В размерности V на V, построим мат­рицу размерности ЗV на 3Vследующего вида:

Здесь 0 означает матрицу размерности V на V, все элементы которой равны 0, /оз­начает тождественную матрицу размерностью V на V, все элементы которой равны О, за исключением элементов, стоящих на главной диагонали, которые равны 1. Теперь рассмотрим, как эту матрицу можно использовать в качестве матрицы смежности орг­рафа и вычислить его транзитивное замыкание посредством многократного возведе­ния в квадрат. Для этого потребуется выполнить всего лишь одно действие:

Матрица в правой части этого уравнения есть транзитивное замыкание, поскольку последующие умножения дают эту же матрицу. В то же время в этой матрице содер­жится элемент А*В в ее верхнем правом углу. Какой бы алгоритм мы ни использова­ли для решения задачи получения транзитивного замыкания, мы можем применить его для решения задачи перемножения булевых матриц на том же уровне затрат (т.е. раз­ница в затратах определяется некоторым постоянным множителем). ■

Важность значения этого свойства определяется убежденностью экспертов в том, что задача умножения булевых матриц относится к числу сложных: математики десятилетия­ми работают над тем, чтобы исследовать, насколько она трудна, и решение этой пробле­мы еще не найдено; наиболее известные результаты говорят в пользу того, что время вы­полнения умножения примерно пропорционально V25 (см. раздел ссылок). Теперь, если мы сможем найти решение задачи транзитивного замыкания с линейной зависимостью по времени (пропорциональное V2), то мы получим также и решение задачи перемноже­ния булевых матриц с линейной временной зависимостью. Подобная зависимость между задачами известна как приведение (reduction); мы говорим, что задача перемножения буле­вых матриц сводится (reduces) к задаче транзитивного замыкания (см. раздел 21.6 и часть 8). В самом деле, приведенное выше доказательство показывает, что умножения булевых матриц сводится к нахождению в орграфе путей длиной 2.

Несмотря на проведение интенсивных исследований с участием многих математиков, ни один из них не смог предложить алгоритм умножения булевых матриц с линейной вре­менной зависимостью, следовательно, и мы не сможем предложить простого алгоритма транзитивного замыкания с линейной временной зависимостью. С другой стороны, ни­кому еще не удалось доказать, что такие алгоритмы не существуют, так что возможность появления такого алгоритма не исключается. Короче говоря, мы можем понимать свой­ство 19.9 в том смысле, что, отвергая возможность прорыва в исследованиях, мы не впра­ве ожидать, что в худшем случае время выполнения любого алгоритма транзитивного за­мыкания, какой только мы можем придумать, будет пропорционально V2. Однако вопреки этому заключению, мы можем разработать быстрые алгоритмы для некоторых



Часть 5. Алгоритмы но графах


специальных классов орграфов. Например, мы уже упоминали простой метод вычисле­ния транзитивного замыкания, быстродействие которого для разреженных графов намно­го выше, чем у алгоритма Уоршалла.

Свойство 19.10. С помощью DFS мы можем поддерживать постоянное время ответа на запросы относительно абстрактного транзитивного замыкания орграфа, затрачивая про­странство памяти, пропорциональное V2, и время, пропорциональное V(E+V), на предва­рительную обработку (вычисление транзитивного замыкания).

Доказательство: Как отмечалось в предыдущем разделе, поиск в глубину позволяет найти все вершины, достижимые из исходной, за время, пропорциональное Е, если мы используем представление графа в виде списков смежных вершин (свойство 19.5 и рис. 19.11). В силу этого обстоятельства, если мы выполняем поиск в глубину V раз, по одному разу на каждую вершину, используя ее как исходную, то мы можем вычис­лить набор вершин, достижимых из каждой вершины, т.е. транзитивное замыкание, за время, пропорциональное V(Е + V), Этот же аргумент справедлив для каждого обоб­щенного поиска (см. раздел 18.8 и упражнение 19.66). ■

Программа 19.4. Транзитивное замыкание, построенное на основе поиска в глубину

Класс DFS (поиска в глубину) реализует тот же интерфейс, что и программа 19.3. Она вычисляет транзитивное замыкание Т, запуская DFS в каждой вершине графа G, для вычисления набора узлов, достижимых из этой вершины. Каждое обращение к рекурсивной функции добавляет ребро, исходящее из начальной вершины, и генерирует рекурсивные вызовы с целью заполнения соответствующей строки в матрице транзитивного замыкания. Эта матрица используется также для маркирования посещенных вершин в процессе выполнения поиска в глубину, так что он требует, чтобы класс Graph поддерживал проверку edge на предмет существования ребра.

template < class Graph> class tc { Graph T; const Graph & G; void tcR(int v, int w)

{






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.