В теории графов цикл в графе — это непустой след , в котором равны только первая и последняя вершины . Ориентированный цикл в ориентированном графе — это непустой ориентированный путь , в котором равны только первая и последняя вершины.
Граф без циклов называется ациклическим графом . Ориентированный граф без ориентированных циклов называется ориентированным ациклическим графом . Связный граф без циклов называется деревом .
Безхордовый цикл в графе, также называемый дыркой или индуцированным циклом, — это цикл, в котором никакие две вершины цикла не соединены ребром, которое само не принадлежит циклу. Антидыра — это дополнение к дырке в графе. Бесхордовые циклы можно использовать для характеристики совершенных графов : согласно сильной теореме о совершенном графе , граф совершенен тогда и только тогда, когда ни одна из его дырок или антидыр не имеет нечетного числа вершин, большего трех. Хордальный граф , особый тип совершенного графа, не имеет дыр размером больше трех.
Обхват графа — это длина его кратчайшего цикла ; этот цикл обязательно безаккордовый. Клетки определяются как наименьшие правильные графы с заданными комбинациями степени и обхвата.
Периферийный цикл — это цикл в графе, обладающий тем свойством, что каждые два ребра, не входящие в цикл, могут быть соединены путем, внутренние вершины которого выходят за пределы цикла. В графе, который не образован добавлением одного ребра к циклу, периферийный цикл должен быть индуцированным циклом.
Термин цикл может также относиться к элементу пространства циклов графа. Существует много пространств циклов, по одному на каждое поле коэффициентов или кольцо. Наиболее распространенным является пространство двоичных циклов (обычно называемое просто пространством циклов ), которое состоит из наборов ребер, имеющих четную степень в каждой вершине; оно образует векторное пространство над двухэлементным полем . По теореме Веблена каждый элемент пространства циклов может быть образован как непересекающееся по ребрам объединение простых циклов. Базис циклов графа — это набор простых циклов, образующий базис пространства циклов. [2]
Используя идеи алгебраической топологии , пространство двоичных циклов обобщается на векторные пространства или модули над другими кольцами , такими как целые, рациональные или действительные числа и т. д. [3]
Существование цикла в ориентированных и неориентированных графах можно определить по тому, находит ли поиск в глубину (DFS) ребро, которое указывает на предка текущей вершины (т. е. оно содержит заднее ребро ). [4] Все задние ребра, которые пропускает DFS, являются частью циклов. [5] В неориентированном графе ребро родительского узла не должно считаться задним ребром, но обнаружение любой другой уже посещенной вершины будет указывать на заднее ребро. В случае неориентированных графов для нахождения цикла в n -вершинном графе требуется всего O ( n ) времени , поскольку не более n - 1 ребер могут быть ребрами дерева.
Многие алгоритмы топологической сортировки также обнаруживают циклы, поскольку они являются препятствиями для существования топологического порядка. Кроме того, если ориентированный граф разделен на сильно связные компоненты , циклы существуют только внутри компонентов, а не между ними, поскольку циклы сильно связны. [5]
Для ориентированных графов можно использовать распределенные алгоритмы на основе сообщений. Эти алгоритмы основаны на идее, что сообщение, отправленное вершиной в цикле, вернется к самому себе. Алгоритмы обнаружения распределенных циклов полезны для обработки крупномасштабных графов с использованием системы распределенной обработки графов в компьютерном кластере (или суперкомпьютере).
Приложения обнаружения циклов включают использование графиков ожидания для обнаружения взаимоблокировок в параллельных системах. [6]
Вышеупомянутое использование поиска в глубину для поиска цикла можно описать следующим образом:
Для каждой вершины v: посещение(v) = завершено(v) = falseДля каждой вершины v: DFS(v)
где
ДФС(в) = если закончено(v): вернуть если посетил(v): «Цикл найден» возвращаться посетил (v) = правда для каждого соседа w: DFS(w) закончено (v) = правда
Для неориентированных графов «сосед» означает все вершины, связанные с v , за исключением той, которая рекурсивно вызывается DFS(v) . Это упущение не позволяет алгоритму найти тривиальный цикл вида v → w → v ; они существуют в каждом неориентированном графе хотя бы с одним ребром.
Вариант, использующий вместо этого поиск в ширину, найдет цикл наименьшей возможной длины.
В своей статье 1736 года о семи мостах Кенигсберга , которую многие считают рождением теории графов, Леонард Эйлер доказал, что для конечного неориентированного графа существует замкнутый обход, который посещает каждое ребро ровно один раз (что делает его замкнутым маршрутом), необходимо и достаточно, чтобы оно было связным, за исключением изолированных вершин (т. е. все ребра содержались в одной компоненте) и имело четную степень в каждой вершине. Соответствующая характеристика существования замкнутого маршрута, посещающего каждое ребро ровно один раз в ориентированном графе, состоит в том, что граф сильно связен и имеет одинаковое количество входящих и исходящих ребер в каждой вершине. В любом случае результирующий замкнутый след известен как Эйлеров след . Если конечный неориентированный граф имеет четную степень в каждой своей вершине, независимо от того, связен ли он, то можно найти набор простых циклов, которые вместе покрывают каждое ребро ровно один раз: это теорема Веблена . [7] Когда связный граф не удовлетворяет условиям теоремы Эйлера, замкнутый обход минимальной длины, охватывающий каждое ребро хотя бы один раз, тем не менее, может быть найден за полиномиальное время путем решения задачи проверки маршрута .
Гораздо сложнее найти единственный простой цикл, который покрывает каждую вершину ровно один раз, а не покрывает ребра. Такой цикл известен как гамильтонов цикл , и определение его существования является NP-полным . [8] Было опубликовано много исследований относительно классов графов, которые могут гарантированно содержать гамильтоновы циклы; Одним из примеров является теорема Ора о том, что гамильтонов цикл всегда можно найти в графе, для которого каждая несмежная пара вершин имеет степени, сумма которых равна как минимум общему числу вершин в графе. [9]
Гипотеза о двойном покрытии цикла утверждает, что для каждого графа без мостов существует мультимножество простых циклов, которое покрывает каждое ребро графа ровно дважды. Доказать, что это правда (или найти контрпример) остается открытой проблемой. [10]
Несколько важных классов графов могут быть определены или охарактеризованы с помощью их циклов. К ним относятся: