Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

В теории графов , достижимость относится к способности , чтобы получить от одной вершины к другой в пределах графика. Вершина может достичь вершины (и достижима из ), если существует последовательность смежных вершин (т.е. путь ), которая начинается с и заканчивается .

В неориентированном графе достижимость между всеми парами вершин может быть определена путем идентификации связанных компонентов графа. Любая пара вершин в таком графе может достигать друг друга тогда и только тогда, когда они принадлежат одной компоненте связности; следовательно, в таком графе достижимость симметрична ( достигает тогда и только тогда, когда достигает ). Связные компоненты неориентированного графа могут быть идентифицированы за линейное время. Остальная часть статьи посвящена более сложной проблеме определения попарной достижимости в ориентированном графе (который, кстати, не обязательно должен быть симметричным).

Определение [ править ]

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

Если является ациклическим , то его отношение достижимости является частичным порядком ; любой частичный порядок может быть определен таким образом, например, как отношение достижимости его транзитивной редукции . [2] Примечательным следствием этого является то, что, поскольку частичные порядки антисимметричны, если можно достичь , то мы знаем, что достичь невозможно . Интуитивно, если бы мы могли путешествовать от туда и обратно , тогда мы бы содержали цикл , что противоречит его ацикличности. Если направлено, но не ацикличный (т.е. содержит хотя бы один цикл), то его отношение достижимости будет соответствовать предварительному порядку, а не частичному порядку. [3]

Алгоритмы [ править ]

Алгоритмы определения достижимости делятся на два класса: те, которые требуют предварительной обработки, и те, которые не требуют .

Если у вас есть только один (или несколько) запросов, может быть более эффективным отказаться от использования более сложных структур данных и напрямую вычислить достижимость желаемой пары. Это может быть выполнено за линейное время с использованием таких алгоритмов, как поиск в ширину или итеративный поиск с углублением в глубину . [4]

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

Алгоритм Флойда-Уоршалла [ править ]

Алгоритм Флойд-Воршалл [5] может быть использован для вычисления транзитивного замыкания любого ориентированного графа, что приводит к достижимости отношению , как в определении, выше.

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

Алгоритм Торупа [ править ]

Для плоских орграфов доступен гораздо более быстрый метод, как описано Миккелем Торупом в 2004 году. [6] Этот метод может отвечать на запросы о достижимости на планарном графе во времени после затраченного времени на предварительную обработку для создания структуры данных размера. Этот алгоритм также может предоставить приблизительное расстояние кратчайшего пути, а также информацию о маршруте.

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

Для данного графа алгоритм начинается с организации вершин в слои, начиная с произвольной вершины . Слои построены в чередующихся шагах, первым принимая во внимание все вершины , достижимые из предыдущего шага (начиная только с ) , а затем всеми вершинами , которые достигают к предыдущему шагу , пока все вершины не были назначены к слою. При построении слоев каждая вершина появляется максимум в двух слоях, и каждый направленный путь или погружение содержится в двух смежных слоях и . Пусть будет последний созданный слой, то есть самое низкое значение для этого .

Затем граф повторно выражается в виде серии орграфов, где каждый и где является сжатием всех предыдущих уровней в одну вершину. Поскольку каждый наклонный переход появляется не более чем в двух последовательных слоях, и поскольку каждый образован двумя последовательными слоями, каждый наклонный переход появляется полностью как минимум на одном (и не более чем на двух последовательных таких графиках)

Для каждого определены три разделителя, которые при удалении разбивают граф на три компонента, каждая из которых содержит не более вершин оригинала. Поскольку он состоит из двух слоев противоположных погружных каналов, каждый сепаратор может состоять из до 2 погружных каналов, в общей сложности до 6 погружных каналов по всем сепараторам. Пусть будет это набор дипатов. Доказательство того, что такие разделители всегда можно найти, связано с теоремой о плоских разделителях Липтона и Тарьяна, и эти разделители могут быть расположены за линейное время.

Для каждого из них направленность предусматривает естественную индексацию его вершин от начала до конца пути. Для каждой вершины в мы находим первую вершину в достижимом , а последнюю вершину в, которая достигает . То есть мы смотрим на то, как рано мы можем уйти , и как далеко мы можем остаться и все же вернуться . Эта информация хранится с каждым . Тогда для любой пары вершин и , может достичь с помощью , если коннекторы к ранее оединяет .

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

Подводя итог анализу этого метода, сначала рассмотрим, что подход расслоения разбивает вершины так, что каждая вершина рассматривается только раз. Фаза разделения алгоритма разбивает граф на компоненты, которые не превышают размер исходного графа, что приводит к логарифмической глубине рекурсии. На каждом уровне рекурсии требуется только линейная работа для определения разделителей, а также возможных связей между вершинами. Общий результат - время предварительной обработки с сохранением только дополнительной информации для каждой вершины.

Алгоритм Камеды [ править ]

Подходящий Орграф для Kameda это метод с и добавлен.
Тот же график, что и выше, после запуска алгоритма Камеды, показывающий метки DFS для каждой вершины

Еще более быстрый метод предварительной обработки, предложенный Т. Камедой в 1975 г. [7], можно использовать, если граф является плоским , ациклическим , а также демонстрирует следующие дополнительные свойства: появляются все вершины с нулевой степенью и все вершины с нулевой степенью на одной и той же грани (часто предполагается, что это внешняя грань), и можно разделить границу этой грани на две части, так что все вершины с нулевой степенью появляются на одной части, а все вершины с нулевой степенью появляются на другой (т.е. два типа вершин не чередуются).

Если проявляет эти свойства, то мы можем предварительно обработать граф только за время и сохранить только дополнительные биты на вершину, отвечая на запросы о достижимости для любой пары вершин во времени с помощью простого сравнения.

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

По завершении, и и их инцидентные края удаляются. Каждая оставшаяся вершина хранит двумерную метку со значениями от до . Учитывая две вершины и , и их ярлыки и мы говорим , что тогда и только тогда , и существует по крайней мере один компонент , или который строго меньше или , соответственно.

Основной результат этого метода состоит в том, что достижимость тогда и только тогда , когда , что легко вычисляется во времени.

Связанные проблемы [ править ]

Связанная проблема состоит в том, чтобы решить запросы о достижимости с некоторым количеством отказов вершин. Например: «Может ли вершина по- прежнему достигать вершины, даже если вершины вышли из строя и больше не могут использоваться?» Подобная проблема может относиться к сбоям ребер, а не к сбоям вершин, или их сочетанию. Методика поиска в ширину также хорошо работает с такими запросами, но создание эффективного оракула является более сложной задачей. [8] [9]

Другая проблема, связанная с запросами о достижимости, заключается в быстром пересчете изменений в отношениях достижимости при изменении некоторой части графа. Например, это актуальная проблема для сборки мусора, которая должна сбалансировать восстановление памяти (чтобы ее можно было перераспределить) с проблемами производительности работающего приложения.

См. Также [ править ]

  • Гаммоид
  • st -соединение

Ссылки [ править ]

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