Фундаментальное множество циклов графа

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

В этой главе будет доказано, что любой цикл графа можно однозначно разложить по фундаментальным циклам этого графа так же, как любой вектор трехмерного пространства однозначно представляется линейной комбинацией базисных векторов i, j, k. Так же будет показано, как построить для данного графа это фундаментальное множество.

В дальнейшем под графом будем понимать связный неориентированный граф, под циклом – элементарный цикл.

Вначале для произвольных множеств А и В введем операцию взятия симметрической разности Фундаментальное множество циклов графа - student2.ru (рис. 8.13, 8.14).

Фундаментальное множество циклов графа - student2.ru
Рис. 8.13. Симметрическая разность двух множеств

Построим симметрическую разность трех множеств. Выберем порядок действий, соответствующий следующей расстановке скобок: (A B) C.

Фундаментальное множество циклов графа - student2.ru

Рис. 8.14. Симметрическая разность трех множеств

В силу симметрии при любой расстановке скобок будет получаться то же множество A B C. Можно установить закономерность: в симметрическую разность входят элементы, содержащиеся одновременно либо в одном, либо в трех множествах, а принадлежащие двум,– удаляются. Обобщим этот результат на произвольное число множеств.

Утверждение 1

Симметрическая разность множеств А1, А2, …, Аk содержит в точности те элементы, которые принадлежат нечетному числу множеств.

Доказать это можно индукцией по числу множеств.

Вернемся к фундаментальным циклам. Это множество определяется через каркас графа.

Пусть уже построен каркас D=<V, T> графа G=<V, E>. Если к каркасу добавить произвольную хорду e Фундаментальное множество циклов графа - student2.ru (E-T), то получившийся граф (D Фундаментальное множество циклов графа - student2.ru e) будет содержать ровно один цикл. Назовем этот цикл Се (рис. 8.15). Добавляя к каркасу поочередно все хорды, получим фундаментальное множество циклов Ф относительно каркаса DФ = {Cе : e Фундаментальное множество циклов графа - student2.ru (E-T)}.

Вопрос 1. Укажите фундаментальное множество циклов графа G относительно каркаса D на рис. 8.15.

Симметрическая разность любого числа циклов графа G является циклом графа G.

Вопрос 2. В графе G (см. рис. 8.15) найти C1 C2, если C1=(1–2–3), C2=(2–3–4).

Фундаментальное множество циклов графа - student2.ru

Рис. 8.15. Ф-цикл

Сформулируем без доказательства следующее утверждение.

Утверждение 2

Произвольный цикл C графа G можно однозначно представить как симметрическую разность некоторого числа фундаментальных циклов.

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

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

Опишем простой алгоритм построения фундаментальных циклов. Он основан на поиске в глубину из произвольного корня k и является рекурсивным. Каждая встреченная новая вершина v помещается в СТЕК и получает номер GLN[v] (порядок просмотра) и удаляется из него после использования. Поэтому СТЕК всегда содержит последовательность вершин от рассматриваемой в данный момент вершины v до корня k.

Анализируемое алгоритмом ребро (v–u) будет замыкать цикл, если (v–u) – хорда.

Критерий хорды следующий:

(v–u) будет хордой, если u – найденная соседка v – уже встречалась раньше при поиске в глубину. В этом случае она находится в СТЕКе и ее номер GLN(u) меньше соответствующего номера GLN(v). Но это еще не все. Если из u мы попали в вершину v, т. е. u является отцом v, то GLN(u) < GLN(v), но (v–u) не хорда, а ветвь каркаса. Эту ситуацию легко распознать, так как в этом случае вершины u и v стоят в СТЕКе рядом.

Если же GLN(u) < GLN(v) и u не является отцом v, то (v–u) – хорда и цикл состоит из верхней группы элементов стека, начиная с v и кончая u (рис. 8.16).

Фундаментальное множество циклов графа - student2.ru
Рис. 8.16. Стек, содержащий фундаментальный цикл

Мы заранее знаем, что наибольшее число вершин, одновременно находящихся в стеке, не превышает n – длины пути от корня до самой удаленной вершины, поэтому стек можно имитировать массивом переменной длины (длина его будет колебаться от 0 до n). Текущее значение длины будет храниться в переменной d, вталкивание в стек вершины v будет изображаться: СТЕК[d]:= v, выталкивание верхушки СТЕКА: d:= d-1.

АЛГОРИТМ {Нахождение множества Ф-циклов графа}

Данные: Граф G=<V, E>, представленный списками ЗАПИСЬ[v], v Фундаментальное множество циклов графа - student2.ru V.

Результаты: Множество фундаментальных циклов Ф графа G.

Переменные: d, num, СТЕК, ЗАПИСЬ, GLN – глобальные.

1 procedure CYCLE(v);

{находит фундаментальное множество циклов для компоненты связности графа, содержащей вершину v}

2 begin

3 d:= d+1; СТЕК[d]:= v;

4 num:= num+1; GLN[v]:= num;

5 for u Фундаментальное множество циклов графа - student2.ru ЗАПИСЬ[v] do

6 if GLN[u]=0 then

7 CYCLE(u) {для новой вершины u}

8 else if (u<>СТЕК[d-1]) AND (GLN[u]<GLN[v]) then

9 печать СТЕК[d],СТЕК[d-1],..,СТЕК[c]=u;

{ребро (v-u) замкнуло новый цикл}

10 d:= d-1; {использованная v удаляется из стека}

11 end;

1 begin {основная программа}

2 for v Є V do GLN[v]:= 0;

3 num:= 0; {инициализация перед началом нумерации}

3 d:= 0; СТЕК[d]:= 0; {d – число элементов в стеке}

4 for v Фундаментальное множество циклов графа - student2.ru V do

5 if GLN[v]=0 then CYCLE(v)

6 end.

Оценим вычислительную сложность алгоритма.

Если отбросить число шагов, требующих выписывания всех фундаментальных циклов (строки 8–9), сложность имеет порядок О(n+m), как у всех алгоритмов, основанных на поиске в глубину.

Число шагов, потраченное на печать всех фундаментальных циклов, пропорционально суммарной длине всех циклов. Количество фундаментальных циклов = число всех хорд = m - (n - 1) = m - n +1. Длина любого цикла не превосходит n. Таким образом, суммарная длина всех циклов не превосходит n(m - n + 1) Фундаментальное множество циклов графа - student2.ru mn + n. Если отбросить случай, когда число ребер m=0, то сложность равна
О(mn).

Ответ 1. Ф = {C1=(1–2–3), C2=(2–3–4)}.

Ответ 2. С1 С2=(1–2–3–4).

Наши рекомендации