Достижимость - Reachability
В теория графов, достижимость относится к способности получить от одного вершина к другому в пределах графика. Вершина может достичь вершины (и доступен из ), если существует последовательность смежный вершины (т.е. дорожка ) который начинается с и заканчивается .
В неориентированном графе достижимость между всеми парами вершин может быть определена путем идентификации связанные компоненты графа. Любая пара вершин такого графа может достигать друг друга. если и только если они принадлежат одному компоненту связности; следовательно, в таком графе достижимость симметрична ( достигает если только достигает ). Связные компоненты неориентированного графа можно идентифицировать за линейное время. Остальная часть статьи посвящена более сложной проблеме определения попарной достижимости в ориентированный граф (который, кстати, не обязательно должен быть симметричным).
Определение
Для ориентированного графа , с множеством вершин и набор кромок , достижимость связь из это переходное закрытие из , то есть набор всех упорядоченных пар вершин в для которого существует последовательность вершин так что край в для всех .[1]
Если является ациклический, то его отношение достижимости есть частичный заказ; любой частичный порядок может быть определен таким образом, например, как отношение достижимости его переходная редукция.[2] Примечательным следствием этого является то, что, поскольку частичные порядки антисимметричны, если может достигать , тогда мы знаем, что не можешь достичь . Интуитивно, если бы мы могли путешествовать из к и обратно к , тогда будет содержать цикл, что противоречит ацикличности. направлен, но не ациклический (т.е. содержит хотя бы один цикл), то его отношение достижимости будет соответствовать предзаказ вместо частичного заказа.[3]
Алгоритмы
Алгоритмы определения достижимости делятся на два класса: те, которые требуют предварительная обработка и те, которые этого не делают.
Если вам нужно сделать только один (или несколько) запросов, может быть более эффективным отказаться от использования более сложных структур данных и напрямую вычислить достижимость желаемой пары. Это можно сделать в линейное время используя такие алгоритмы, как поиск в ширину или итеративный поиск в глубину с углублением.[4]
Если вы будете делать много запросов, можно использовать более изощренный метод; точный выбор метода зависит от характера анализируемого графа. В обмен на время предварительной обработки и дополнительное пространство для хранения мы можем создать структуру данных, которая затем сможет отвечать на запросы о достижимости любой пары вершин всего за время. Ниже описаны три различных алгоритма и структуры данных для трех различных, все более специализированных ситуаций.
Алгоритм Флойда-Уоршалла
В Алгоритм Флойда-Уоршолла[5] может использоваться для вычисления транзитивного замыкания любого ориентированного графа, что дает начало отношению достижимости, как в определении выше.
Алгоритм требует время и пространство в худшем случае. Этот алгоритм интересует не только достижимость, но и вычисляет кратчайшее расстояние между всеми парами вершин. Для графов, содержащих отрицательные циклы, кратчайшие пути могут быть не определены, но достижимость между парами все же может быть отмечена.
Алгоритм Торупа
Для планарный диграфы доступен гораздо более быстрый метод, как описано Миккель Торуп в 2004 г.[6] Этот метод может отвечать на запросы о достижимости на плоском графе в время после траты время предварительной обработки для создания структуры данных размер. Этот алгоритм также может предоставить приблизительное расстояние кратчайшего пути, а также информацию о маршруте.
Общий подход состоит в том, чтобы связать с каждой вершиной относительно небольшой набор так называемых путей-разделителей, так что любой путь из вершины в любую другую вершину должен проходить хотя бы через один из разделителей, связанных с или . Схема разделов, связанных с достижимостью, приводится ниже.
Учитывая график , алгоритм начинается с организации вершин в слои, начиная с произвольной вершины . Слои строятся чередующимися шагами, сначала учитывая, что все вершины достижимы. от предыдущий шаг (начиная с ), а затем все вершины, которые достигают к предыдущий шаг, пока все вершины не будут назначены слою. При построении слоев в каждой вершине появляется не более двух слоев, а каждая направленный путь, или дипат, в содержится в двух соседних слоях и . Позволять быть последним созданным слоем, то есть наименьшим значением для такой, что .
Затем граф повторно выражается в виде серии орграфов. где каждый и где это сокращение всех предыдущих уровней в одну вершину. Потому что каждое погружение появляется не более чем в двух последовательных слоях, и потому что каждый образован двумя последовательными слоями, каждое погружение в полностью появляется как минимум в одном (и не более 2-х подряд таких графиков)
Для каждого , идентифицируются три разделителя, которые при удалении разбивают график на три компонента, каждая из которых содержит не более вершины оригинала. Так как состоит из двух слоев противоположных погружных каналов, каждый сепаратор может состоять из до 2 погружных каналов, в общей сложности до 6 погружных каналов по всем сепараторам. Позволять быть этим набором дипатов. Доказательство того, что такие разделители всегда можно найти, связано с Теорема о плоском сепараторе Липтона и Тарьяна, и эти разделители могут быть расположены в линейном времени.
Для каждого , направленный характер обеспечивает естественную индексацию его вершин от начала до конца пути. Для каждой вершины в , мы размещаем первую вершину в достижимый , а последняя вершина в что доходит до . То есть мы смотрим, насколько рано в мы можем получить от , и как долго мы можем оставаться в и все равно вернуться к . Эта информация хранится в каждом . Тогда для любой пары вершин и , может достигать через если подключается к раньше чем подключается от .
Каждая вершина помечена, как указано выше, для каждого шага рекурсии, которая строит. Поскольку эта рекурсия имеет логарифмическую глубину, всего дополнительная информация сохраняется для каждой вершины. С этого момента алогарифмический запрос времени на достижимость так же прост, как поиск по каждой паре меток для общего, подходящего . Исходный документ затем работает, чтобы уменьшить время запроса до .
Обобщая анализ этого метода, сначала рассмотрим, что многоуровневый подход разбивает вершины так, что каждая вершина рассматривается только раз. Фаза разделения алгоритма разбивает граф на компоненты, которые не более размер исходного графа, что приводит к глубине алогарифмической рекурсии. На каждом уровне рекурсии требуется только линейная работа для определения разделителей, а также возможных связей между вершинами. Общий результат время предварительной обработки только дополнительная информация, хранящаяся для каждой вершины.
Алгоритм Камеды
Еще более быстрый метод предварительной обработки, созданный Т. Камедой в 1975 г.,[7]можно использовать, если график планарный, ациклический, а также обладает следующими дополнительными свойствами: все 0-степень и все 0-превосходить вершины появляются на одном и том же лицо (часто предполагается, что это внешняя грань), и можно разделить границу этой грани на две части, так что все вершины с нулевой степенью появляются на одной части, а все вершины с нулевой степенью - на другой (т. е. два типа вершин не чередуются).
Если проявляет эти свойства, то мы можем предварительно обработать график только за время и только хранить дополнительные биты на вершину, отвечая на запросы о доступности для любой пары вершин в время с простым сравнением.
Предварительная обработка выполняет следующие шаги. Добавляем новую вершину у которого есть ребро к каждой вершине с нулевой степенью, и еще одна новая вершина с ребрами из каждой вершины с нулевой степенью выхода. Обратите внимание, что свойства позволяют сделать это при сохранении планарности, то есть после этих добавлений пересечений краев не будет. Для каждой вершины мы храним список смежностей (внешних ребер) в порядке планарности графа (например, по часовой стрелке относительно вложения графа). Затем мы инициализируем счетчик и начать обход в глубину с . Во время этого обхода список смежности каждой вершины просматривается слева направо по мере необходимости. Когда вершины выталкиваются из стека обхода, они помечаются значением , и затем уменьшается. Обратите внимание, что всегда обозначается значением и всегда помечен . Затем повторяется обход в глубину, но на этот раз список смежности каждой вершины просматривается справа налево.
По завершении и , и их грани удаляются. Каждая оставшаяся вершина хранит двумерную метку со значениями из к .Даны две вершины и , и их ярлыки и мы говорим, что если и только если , , и существует хотя бы один компонент или что строго меньше чем или соответственно.
Главный результат этого метода состоит в том, что доступен из если и только если , который легко вычисляется в время.
Связанные проблемы
Связанная проблема - решить запросы о доступности с некоторым числом вершинных отказов. Например: «Может вершина все еще дойти до вершины хотя вершины потерпели неудачу и больше не могут быть использованы? »Подобная проблема может касаться сбоев краев, а не сбоев вершин, или их сочетания. Методика поиска в ширину работает так же хорошо с такими запросами, но создание эффективного оракула более важно испытывающий.[8][9]
Другая проблема, связанная с запросами о достижимости, заключается в быстром пересчете изменений отношений достижимости при изменении какой-либо части графа. Например, это актуальная проблема для вывоз мусора который должен уравновесить восстановление памяти (чтобы ее можно было перераспределить) с проблемами производительности работающего приложения.
Смотрите также
использованная литература
- ^ Скиена, Стивен С. (2011), «15.5 Transitive Closure and Reduction», Руководство по разработке алгоритмов (2-е изд.), Springer, стр. 495–497, ISBN 9781848000698.
- ^ Кон, Пол Мориц (2003), Базовая алгебра: группы, кольца и поля, Springer, стр. 17, ISBN 9781852335878.
- ^ Шмидт, Гюнтер (2010), Реляционная математика, Энциклопедия математики и ее приложений, 132, Cambridge University Press, стр. 77, ISBN 9780521762687.
- ^ Герстинг, Джудит Л. (2006), Математические структуры для компьютерных наук (6-е изд.), Macmillan, p. 519, г. ISBN 9780716768647.
- ^ Кормен, Томас Х.; Лейзерсон, Чарльз Э.; Ривест, Рональд Л.; Штейн, Клиффорд (2001), «Транзитивное замыкание ориентированного графа», Введение в алгоритмы (2-е изд.), MIT Press и McGraw-Hill, стр. 632–634, ISBN 0-262-03293-7.
- ^ Торуп, Миккель (2004), «Компактные оракулы для достижимости и приблизительных расстояний в плоских орграфах», Журнал ACM, 51 (6): 993–1024, Дои:10.1145/1039488.1039493, Г-Н 2145261, S2CID 18864647.
- ^ Камеда, Т. (1975), "О векторном представлении достижимости в плоских ориентированных графах", Письма об обработке информации, 3 (3): 75–77, Дои:10.1016/0020-0190(75)90019-8.
- ^ Деметреску, Камил; Торуп, Миккель; Чоудхури, Резаул Алам; Рамачандран, Виджая (2008), «Оракулы для расстояний, избегающих сбойного узла или соединения», SIAM Журнал по вычислениям, 37 (5): 1299–1318, CiteSeerX 10.1.1.329.5435, Дои:10.1137 / S0097539705429847, Г-Н 2386269.
- ^ Хальфтермейер, Пьер, Возможность подключения к сети и компактные схемы маркировки для аварийного планирования, Университет Бордо.