Скачиваний:
47
Добавлен:
11.02.2016
Размер:
748.54 Кб
Скачать

3.3. Нахождение компонент связности

Вершины xi и xj слабо связны, если существует путь (xi, xj) в графе G=(X,E).

Вершины xi и xj сильно связны, если существуют пути (xi, xj) и (xj, xi).

Если в графе нет путей из xi в xj и нет обратного пути из xj в xi, то вершины xi и xj несвязны. Для неориентированного графа имеет смысл только понятие сильной связности.

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

Пример 3.4: Задан граф (рис.3.4). Найти его компоненты связности.

Данный граф может быть разбит на следующие компоненты связности:

1){x1,x2,x3,x4};

2){x5,x6,x7};

3){x8}

Между компонентами - только слабая связность: есть пути из вершин 1-ой компоненты в вершины 2-ой и 3-ей компоненты, а также из вершин 2-ой компоненты в вершину 3-ей.

Рис. 3.4

Алгоритм построения компонент связности в неориентированном графе

1. i=0. Все вершины графа не отмечены.

2. i=i+1. Выбираем очередную неотмеченную вершину, отмечаем её и все связанные с нею вершины значением индекса i с помощью распространения волны отметок по ребрам, идущих от уже отмеченных индексом i вершин. Таким образом выделяется i компонента связности. Если есть ещё неотмеченные вершины, то выполняется п.2, иначе выделение компонент связности закончено.

8

Пример 3.9.

Рис. 3.9

3.5.1. Алгоритм построения произвольного остова

1. Для каждой компоненты i графа выполняем пункты 2 и 3.

2. Строим частичный подграф, содержащий все ni вершин i-й компоненты и не содержащий ребер (0- граф).

3. Если в текущий частичный граф включены уже ni-1 ребер, то остов для компоненты i построен, иначе выбираем очередное ребро компоненты и пытаемся его включить в текущий граф.

Если в текущем графе это не приводит к образованию цикла, то включаем ребро, иначе - не включаем.

Ребро считаем рассмотренным.

Выполняем пункт 3.

13

Пример 3.7

Рис. 3.7

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

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

Пример 3.8.

Рис. 3.8

Для несвязного графа рассматриваются отдельные его компоненты. Остов такого графа - совокупность его компонент.

12

Пример 3.5

Рис. 3.5

Решение:

1. i=0

2. i=1. Отмечаем индексом i=1 вершину x1 и связанные с ней вершины x3, x7 и x9. Получена первая компонента связности: k1 {x1,x3,x7,x9 }

2. i=2. Отметим индексом i=2 вершину x2 и вершины x6,x10. Построена вторая компонента связности:k2 {x2,x6,x10}

2. i=3. Отмечаются индексом i=3 вершины x4 и x8 . Построена третья компонента связности: k3 {x4, x8 }.

2. i=4. Отмечаются индексом i=4 вершину x5, которая формирует четвертую компоненту связности – k4 {x5}

3.4. Алгоритмы нахождения подграфов

Циклом называется замкнутый маршрут в неориентированном графе. Для ориентированного графа определяется аналогично понятие контур - замкнутый путь.

9

Пример 3.6. В графе (рис.3.6) каждому ребру присвоен свой номер. Выделим соответствующее ему число циклов. Для нашего примера циклами Ci являются замкнутые маршруты, образованные ребрами : C1={1, 2, 5, 4}, C2={5, 6, 7}, C3={3, 6, 2}, C4={1, 2, 6, 7, 4} и т. д. Среди этих циклов найдутся такие, которые включают в себя другие циклы. Так, цикл C4 состоит из циклов C1 и C2 , у которых имеется общее ребро 5, не вошедшее в цикл 4. Говорят, что цикл 4 получен линейной комбинацией циклов 1 и 2, т. е. является линейно зависимым от них.

Рис. 3.6

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

Присвоим каждому ребру графа номерj, j=1,m и сопоставим каждому циклу Сi двоичный m-разрядный вектор Vi , компоненты vij которого определяются следующим образом: vij = 0, если ребро j не входит в цикл Ci , vij = 1 - в противном случае.

Тогда линейной комбинацией векторов Vi является результат векторной операции сложения по модулю два этих векторов.

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

10

На языке теории множеств это означает объединение множеств Ci без их пересечения, что соответствует операции «симметрическая разность» двух множеств.

j

1

2

3

4

5

6

7

V1

1

1

0

1

1

0

0

V2

0

0

0

0

1

1

1

V4

1

1

0

1

0

1

1

В нашем примере общим является ребро 5, которое исключено из цикла 4.

Линейно-независимым от совокупности других циклов называется цикл, который не может быть построен линейной комбинацией этих циклов.

Максимальное множество линейно-независимых циклов образует систему независимых циклов; мощность этого множества называется цикломатическим числом. Это число определяется по формуле Эйлера

=m-n+p (3.2)

Соседние файлы в папке XLAM