Графы и алгоритмы

Пространство циклов графа

Показывать лекцию целиком

Пространство подграфов

Зафиксируем некоторое множество $$V$$ и рассмотрим множество $$\Gamma_{V}$$ всех графов с множеством вершин $$V$$. Буквой $$O$$ будем обозначать пустой граф из этого множества: $$O=(V,\varnothing)$$.

Для графов $$G_{1} =(V,E_{1})$$ и $$G_{2} =(V,E_{2} )$$ из $$\Gamma_{V}$$ определим их сумму по модулю $$2$$ (в дальнейшем в этом разделе будем называть ее просто суммой) как граф $$G_{1} \oplus G_{2} =(V,E_{1} \oplus E_{2} ),$$ где $$E_{1} \oplus E_{2}$$ обозначает симметрическую разность множеств $$E_{1}$$ и $$E_{2}$$. Иначе говоря, ребро принадлежит графу $$G_{1} \oplus G_{2}$$ тогда и только тогда, когда оно принадлежит в точности одному из графов $$G_{1}$$ и $$G_{2}$$. Пример показан на рис. 7.1.

(рис 7.1)

Следующие свойства введенной операции очевидны или легко проверяются.

  • Коммутативность: $$G_{1} \oplus G_{2} =G_{2} \oplus G_{1}$$ для любых $$G_{1}$$ и $$G_{2}$$.
  • Ассоциативность: $$G_{1} \oplus (G_{2} \oplus G_{3} )=(G_{1} \oplus G_{2} )\oplus G_{3}$$ для любых $$G_{1},G_{2},G_{3}$$.
  • $$G\oplus O=G \text{ для любого } G$$.
  • $$G\oplus G=O \text{ для любого } G$$.
  • Отсюда следует, что множество $$\Gamma _{V}$$ относительно операции $$\oplus$$ образует абелеву группу. Нейтральным элементом ("нулем") этой группы служит граф $$O$$, а противоположным к каждому графу является сам этот граф. Уравнение $$G\oplus X=H$$ с неизвестным $$X$$ и заданными графами $$G$$ и $$H$$ имеет единственное решение $$X=G\oplus H$$. Благодаря свойству ассоциативности мы можем образовывать выражения вида $$G_{1} \oplus G_{2} \oplus \ldots \oplus G_{k}$$, не используя скобок для указания порядка действий. Легко понять, что ребро принадлежит графу $$G_{1} \oplus G_{2} \oplus \ldots \oplus G_{k}$$ тогда и только тогда, когда оно принадлежит нечетному количеству из графов $$G_{1},G_{2},\ldots,G_{k}$$.

    Рассмотрим множество из двух элементов $$\{0, 1\}$$. Оно является полем относительно операций умножения и сложения по модулю 2. Определим операцию умножения элементов этого поля на графы: $$0\cdot G=O$$, $$1\cdot G=G$$ для любого графа $$G$$. Множество $$\Gamma_{V}$$ с введенными операциями сложения графов и умножения на элементы поля является линейным векторным пространством.

    Зафиксируем некоторый граф $$G\in \Gamma_{V}$$ и рассмотрим множество всех его остовных подграфов, которое будем обозначать $$S[G]$$. Это множество состоит из $$2^{m(G)}$$ элементов, среди них сам граф $$G$$ и граф $$O$$. Оно замкнуто относительно сложения графов и умножения на элементы поля, следовательно, является подпространством пространства $$\Gamma_{V}$$. Его называют пространством подграфов графа $$G$$.

    Любой граф из $$S[G]$$ может быть выражен как сумма однореберных подграфов. Всего у графа $$G$$ имеется $$m(G)$$ однореберных подграфов и они, очевидно, линейно независимы. Следовательно, однореберные подграфы образуют базис пространства $$S[G]$$, а размерность этого пространства равна $$m(G)$$.

    В пространстве $$S[G]$$ можно очень естественным способом ввести координаты. Занумеруем ребра графа $$G$$: $$EG=\{e_{1},e_{2},\ldots ,e_{m} \}$$. Теперь остовному подграфу $$H$$ можно поставить в соответствие характеристический вектор $$\alpha (H)=(\alpha _{1} ,\alpha_{2},\ldots,\alpha_{m})$$ его множества ребер:

    $$\alpha _{i} =\left\{\begin{aligned} 1, \text{если ребро }e_{i}\ \text{принадлежит } H, \\ 0, \text{если } e_{i}\ \text{не принадлежит } H. \end{aligned}\right}$$

    Получаем взаимно однозначное соответствие между множеством $$S[G]$$ и множеством всех двоичных векторов с $$m$$ координатами. Сумме графов соответствует векторная (покоординатная) сумма по модулю 2 их характеристических векторов.

    Квазициклы

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

    Рассмотрим некоторый граф $$G\in \Gamma_{V}$$. Среди его остовных подграфов, возможно, имеется некоторое количество циклов. Обозначим через $$C[G]$$ подпространство пространства подграфов, порождаемое всеми этими циклами. $$C[G]$$ называется пространством циклов графа $$G$$. Оно содержит граф $$O$$ (если в $$G$$ нет циклов, то $$O$$ является единственным элементом пространства циклов), а все остальные его элементы - это всевозможные линейные комбинации циклов графа $$G$$. Заметим, что коэффициентами в линейных комбинациях являются элементы множества $$\{0,1\}$$, поэтому речь идет на самом деле просто о всевозможных суммах циклов.

    Остовный подграф, у которого степени всех вершин четны, называется квазициклом. Оказывается, множество $$C[G]$$ состоит в точности из всех квазициклов графа $$G$$. Прежде чем доказать это, покажем сначала, что множество всех квазициклов замкнуто относительно сложения.

    Лемма 1. Сумма двух квазициклов есть квазицикл.

    Доказательство. Пусть $$H_{1}$$ и $$H_{2}$$ - квазициклы. Рассмотрим произвольную вершину $$a\in V$$, и пусть ее степени в $$H_{1}$$ и $$H_{2}$$ равны соответственно $$d_{1}$$ и $$d_{2}$$. Тогда степень вершины $$a$$ в графе $$H_{1} \oplus H_{2}$$ будет равна $$d=d_{1}+d_{2} -2d_{1,2}$$, где $$d_{1,2}$$ - число вершин, с которыми $$a$$ смежна в обоих графах $$H_{1}$$ и $$H_{2}$$. Отсюда видно, что число $$d$$ четно, если четны оба числа $$d_{1}$$ и $$d_{2}$$.

    Следующая лемма объясняет строение квазициклов.

    Лемма 2. Любой квазицикл с непустым множеством ребер является объединением простых циклов, не имеющих общих ребер.

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

    Теорема 1. Граф принадлежит множеству $$C[G]$$ тогда и только тогда, когда он является квазициклом графа $$G$$.

    Доказательство. Всякий цикл является квазициклом. Так как элементы $$C[G]$$ - это суммы циклов, то, по лемме 1, все они - квазициклы. Обратное утверждение (каждый квазицикл принадлежит $$C[G]$$ ) следует из леммы 2, так как объединение циклов, не имеющих общих ребер, совпадает с их суммой.

    Фундаментальные циклы

    Компактное представление пространства дает его базис. Если выписать все простые циклы графа $$G$$, то это в большинстве случаев не будет его базисом, так как некоторые из этих циклов могут быть суммами других (см. пример на рис. 7.1). Построить базис пространства $$C[G]$$, состоящий из простых циклов, можно следующим образом. Выберем в графе $$G$$ какой-нибудь каркас $$T$$. Пусть $$e_{1},\ldots e_{s}$$ - все ребра графа $$G$$, не принадлежащие $$T$$. Если добавить к $$T$$ ребро $$e_{i}$$, то в полученном графе образуется единственный (простой) цикл $$Z_{i}$$. Таким образом, получаем семейство из $$s$$ циклов, они называются фундаментальными циклами относительно каркаса $$T$$.

    Теорема 2. Множество всех фундаментальных циклов относительно любого каркаса $$T$$ графа $$G$$ образует базис пространства циклов этого графа.

    Доказательство. Зафиксируем некоторый каркас $$T$$ и рассмотрим фундаментальные циклы $$Z_{1},Z_{2},\ldots ,Z_{s}$$ относительно этого каркаса. В каждом из этих циклов имеется ребро $$e_{i}$$, принадлежащее данному циклу и не принадлежащее никакому из остальных. Поэтому при сложении этого цикла с другими фундаментальными циклами данное ребро не "уничтожится" - оно будет присутствовать в суммарном графе. Следовательно, сумма различных фундаментальных циклов никогда не будет пустым графом, то есть фундаментальные циклы линейно независимы.

    Покажем теперь, что любой квазицикл графа $$G$$ является суммой фундаментальных циклов. Действительно, пусть $$H$$ - такой квазицикл. Пусть $$e_{i_{1}},e_{i_{2}},\ldots e_{i_{t} }$$ - все ребра $$H$$, не принадлежащие $$T$$. Рассмотрим граф $$F=H\oplus Z_{i_{1}} \oplus Z_{i_{2}} \oplus \ldots \oplus Z_{i_{t} }$$. Каждое из ребер $$e_{i_{j} }$$, $$j=1,\ldots t$$, входит ровно в два слагаемых этой суммы - в $$H$$ и в $$Z_{i_{j} }$$. Следовательно, при сложении все эти ребра уничтожатся. Все остальные ребра, присутствующие в графах-слагаемых, принадлежат $$T$$. Значит, $$F$$ - подграф графа $$T$$. Так как все слагаемые являются квазициклами, значит, $$F$$ - тоже квазицикл. Но в $$T$$ нет циклов, поэтому имеется единственная возможность: $$F=O$$, откуда получаем $$H=Z_{i_{1}} \oplus Z_{i_{2}} \oplus \ldots \oplus Z_{i_{t}}$$.

    Из этой теоремы следует, что размерность пространства циклов графа равна числу ребер, не входящих в его каркас. Так как каркас содержит $$n-k$$ ребер, где $$k$$ - число компонент связности графа, то эта размерность равна $$\nu (G)=m-n+k$$. Это число называют цикломатическим числом графа.

    Построение базы циклов

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

    Поиск в глубину особенно удобен благодаря основному свойству DFS-дерева (теорема 1 из лекции 5) - каждое обратное ребро относительно этого дерева является продольным. Это означает, что из двух вершин такого ребра одна является предком другой в DFS-дереве. Каждое такое ребро в процессе поиска в глубину встретится дважды - один раз, когда активной вершиной будет предок, другой раз, когда ею будет потомок. В этом последнем случае искомый фундаментальный цикл состоит из рассматриваемого обратного ребра и участка пути в DFS-дереве, соединяющего эти две вершины. Но этот путь так или иначе запоминается в процессе обхода в глубину, так как он необходим для последующего возвращения. Если, например, для хранения открытых вершин используется стек, то вершины этого пути находятся в верхней части стека. В любом случае этот путь легко доступен и цикл находится без труда. Запишем процедуру построения фундаментальных циклов на базе алгоритма поиска в глубину с построением DFS-дерева. Переменная $$k$$ - счетчик циклов, $$C(k)$$ - последовательность (список) вершин, составляющих цикл с номером $$k$$.

    Алгоритм 1. Построение базы циклов.

  • пометить все вершины как новые
  • $$k:=1$$
  • for $$x\in V$$ do if $$x$$ новая then $$CycleBase(x)$$
  • Procedure $$CycleBase(a)$$

  • открыть вершину $$a$$
  • $$F(a)\, :=a$$
  • $$x\, :=a$$
  • while $$x$$ открытая do
  • if имеется неисследованное ребро $$(x,y)$$
  • then пометить ребро $$(x,y)$$ как исследованное
  • if вершина $$y$$ новая
  • then открыть вершину $$y$$
  • $$F(y):=x$$
  • $$x:=y$$
  • else $$NewCycle$$
  • else закрыть вершину $$x$$
  • $$x:=F(x)$$
  • Procedure $$NewCycle$$

  • $$k:=k+1$$
  • Создать список $$C(k)$$ из одного элемента $$x$$
  • $$z:=x$$
  • repeat $$z:=F(z)$$
  • добавить $$z$$ к списку $$C(k)$$
  • until $$z=y$$
  • Хотя сам поиск в глубину выполняется за линейное от числа вершин и ребер время, решающее влияние на трудоемкость этого алгоритма оказывает необходимость запоминать встречающиеся циклы. Подсчитаем суммарную длину этих циклов для полного графа с $$n$$ вершинами. DFS-дерево в этом случае является простым путем, относительно него будет $$n-2$$ цикла длины $$3$$, $$n-3$$ цикла длины $$4\ldots 1$$ цикл длины $$n$$. Сумма длин всех фундаментальных циклов будет равна

    $$\sum_{i=1}^{n-2}i(n+1-i)=\frac{n^{3} + 3n^{2} -16n+12}{6}.$$

    Таким образом, на некоторых графах число операций этого алгоритма будет величиной порядка $$n^{3}$$.

    Рационализация

    Приведенный алгоритм нетрудно модифицировать так, что он будет строить базу циклов с суммарной длиной, ограниченной сверху величиной порядка $$n^{2}$$ (и такой же будет оценка трудоемкости алгоритма). Рассмотрим в графе произвольную вершину $$x$$ и пусть $$y_{1},y_{2}\ldots y_{k}$$ - все ее предки в DFS-дереве, соединенные с $$x$$ обратными ребрами. Положим также $$y_{k+1} =x$$. Обозначим через $$P_{i}$$ для $$i=1,\ldots,k$$ путь в DFS-дереве, соединяющий $$y_{i}$$ и $$y_{i+1}$$. Описанный выше алгоритм выдает циклы вида $$C_{i} =xP_{i} P_{i+1} \ldots P_{k} x$$, $$i=1,\ldots,k$$. Рассмотрим циклы $$C'_{i} =xP_{i}x$$, $$i=1,\ldots,k$$. Так как $$C_{i} =C'_{i} \oplus C'_{i+1} \oplus \ldots \oplus C'_{k}$$, то совокупность всех таких циклов также образует базу циклов графа. Назовем эту систему циклов сокращенной. Алгоритм легко модифицировать так, чтобы вместо циклов $$C_{i}$$ выдавались циклы $$C'_{i}$$ - нужно только после обнаружения обратного ребра, ведущего от предка $$x$$ к потомку $$y$$ (строка 11), выписать вершины, содержащиеся в стеке, начиная с $$y$$ и заканчивая следующей вершиной, смежной с $$x$$. Для эффективной проверки этой смежности удобно использовать матрицу смежности.

    Оценим суммарную длину $$S$$ циклов сокращенной системы. Предположим, что граф имеет $$n$$ вершин и $$m$$ ребер. Каждое обратное ребро принадлежит не более чем двум циклам сокращенной системы. Значит, суммарный вклад обратных ребер в $$S$$ не превосходит $$2m$$.

    Для каждого цикла из сокращенной системы назовем верхушкой этого цикла вершину цикла с наибольшим глубинным номером (это та вершина $$x$$, при исследовании окрестности которой был найден данный цикл). Очевидно, для каждого прямого ребра в сокращенной системе имеется не более одного цикла с данной верхушкой. Значит, число циклов, в которые входит данное прямое ребро, не превосходит числа вершин, лежащих в дереве выше него (т.е. являющихся потомками вершин этого ребра). Тем более это число не превосходит числа всех вершин графа. Так как имеется не более чем $$n-1$$ прямое ребро, то для суммарного вклада всех прямых ребер в $$S$$ получаем верхнюю оценку $$n^{2}$$. Таким образом, $$S < 2m+n^{2} =O(n^{2})$$, т.е. на порядок меньше максимальной суммарной длины системы фундаментальных циклов.

    Вернуться к учебному плану