Смешанный граф - это граф, который может иметь как направленные, так и ненаправленные ребра. Его лежащий в основе ненаправленный граф получается путем забывания ориентации направленных ребер, а в другом направлении ориентация смешанного графа получается путем назначения направления каждому неориентированному ребру. Набор ребер образует цикл в смешанном графе, если он может быть ориентирован для формирования направленного цикла. Смешанный граф ацикличен тогда и только тогда, когда у него нет циклов.
Это все стандартно, и есть много опубликованных работ, упоминающих ациклические смешанные графы. Поэтому должен быть известен следующий алгоритм проверки ацикличности смешанных графов:
Повторите следующие шаги:
- Удалите любую вершину, у которой нет входящих направленных ребер и нет падающих неориентированных ребер, так как она не может быть частью какого-либо цикла.
- Если у какой-либо вершины нет входящих направленных ребер, но она имеет ровно один падающий ненаправленный край, то любой цикл, использующий ненаправленный край, должен войти в этот край. Замените неориентированный край входящим направленным краем.
Остановитесь, когда больше шагов не будет выполнено. Если результатом является пустой граф, то исходный граф обязательно должен быть ациклическим. В противном случае, начиная с любой оставшейся вершины, можно вернуться назад по графику, на каждом шаге, следуя назад через входящий край или следуя неориентированному ребру, которое не используется для достижения текущей вершины, пока не увидите повторяющуюся вершину. Последовательность ребер, следующая между первым и вторым повторением этой вершины (в обратном порядке), образует цикл в смешанном графе.
В статье Википедии о смешанных графах упоминаются ациклические смешанные графы, но не упоминается, как их тестировать, поэтому я хотел бы добавить к этому кое-что об этом алгоритме, но для этого мне нужна опубликованная ссылка. Может кто-нибудь сказать мне, где он (или любой другой алгоритм проверки ацикличности) появляется в литературе?
Ответы:
Нахождение смешанных циклов в смешанном графе эквивалентно нахождению элементарных направленных циклов (длиной> = 3) в соответствующем ориентированном графе. Соответствующий ориентированный граф получается из смешанного графа путем замены каждого неориентированного ребра двумя направленными ребрами, указывающими в противоположных направлениях. Доказательство: (1) Каждый элементарный направленный цикл (длиной> = 3) в орграфе непосредственно соответствует смешанному циклу в смешанном графе. (2) Каждый смешанный цикл в смешанном графе содержит элементарный смешанный цикл длины> = 3, и каждый такой цикл непосредственно соответствует элементарному направленному циклу (длины> = 3) в ориентированном графе. (1) и (2) вместе доказывают оба направления утверждения, qed, Поэтому мы ищем ссылки, как вычислить (все?) Элементарные циклы (длиной> = 3) в ориентированном графе.
Комментарии указывают, что cs.stackexchange содержит некоторые ответы на этот вопрос, но неясно, как организовать результаты в краткий ответ. Этот пост в блоге, похоже, суммирует (наиболее?) Важные ссылки:
Само тестирование ацикличности кажется простым: вычислить сильно связанные компоненты графа. Любой (элементарный) цикл полностью содержится в сильно связанном компоненте. Сильно связная компонента содержит элементарный цикл, если она не является ненаправленным деревом.
Предложенный Дэвидом Эппштейном алгоритм дополнительно вычисляет один элементарный цикл в качестве доказательства, а вышеприведенные алгоритмы перечисляют все элементарные циклы. Любая вершина или ребро, не содержащиеся в элементарном цикле, могут быть удалены в качестве шага предварительной обработки, чтобы повысить скорость выполнения вышеуказанных алгоритмов. Алгоритм Дэвида Эппштейна может быть использован для этой цели, но даже если он используется только для сильно связанных компонентов, он не удалит все возможные вершины или ребра, которые могут быть удалены. Но даже если его можно расширить для этого (вычисление дерева разреза блоков, по крайней мере, позволяет удалить каждую возможную вершину, которая может быть удалена), неясно, действительно ли это улучшит скорость вышеупомянутых алгоритмов.
источник