Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UchebnoePosobie.doc
Скачиваний:
74
Добавлен:
11.11.2019
Размер:
6.36 Mб
Скачать

3.5. Некоторые алгоритмы на графах

3.5.1. Построение покрывающего остова

При организации каталогов или программных комплексов, нужно устранять всевозможные циклы и петли и строить граф, покрывающий все вершины. Такой граф называют покрывающий остов.

Алгоритм поиска покрывающего остова:

шаг 1: выбрать ребро множества r, не являющееся петлей и сформировать фрагмент покрывающего остова Gi’=<Xi’,ri’>,

а концевые вершины ребра включить в подмножество Х’;

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

а) если фрагменту принадлежит одна концевая вершина, то вторую вершину включить в подмножество Х’, а ребро включить в фрагмент остова Gi’=<Xi’; ri`>,

b) если фрагменту не принадлежит ни одна концевая вершина, то сформировать второй фрагмент остова Gj’=<Xj’; rj`>,

c) если концевые вершины принадлежат различным остовам, то объединить фрагменты, т. е. G’=Gi’Gj’, где X’=Xi’Xj’, r’=ri’rj’,

d) если обе концевые вершины принадлежат одному фрагменту, то исключить ребро из анализа;

шаг 3: если все вершины графа вошли во фрагмент остова, то конец, иначе перейти у шагу 2.

Пример: на рис. 3.25 дан исходный граф. Найти покрывающие остовы, ребра которых не пересекаются.

Для поиска остова прежде всего определим цикломатическое число: (G)=m – n + k(G) =7 – 5 + 1 =3, где m=7 – число ребер, n=5 –число вершин, k(G)=1 – число компонент связности.

Следовательно, граф содержит три базовых цикла, для удаления которых следует удалить три ребра.

Число частичных графов, опирающихся на четыре ребра исходного графа, может быть определено по сочетанию из семи ребер по четыре:

.

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

Анализ показывает, что суграфов, использующих только четыре непересекающихся ребра и опирающихся на все пять вершин исходного графа будет только семь (см. таблицу b).

В таблицах символом “*” отмечены безразличие к наличию ребер в формировании избранных циклов (см. табл.а) и к проверке условия непересечения ребер в остове. (см. табл с).

Последовательность формирования остова по данному алгоритму (например, по исходному графу, приведенному на рис. 3.25, остов 1) представлена таблицей d). Число шагов итерации равно pi=(n-1), где n – число вершин графа.

таблица а)

Таблица b)

a

b

c

d

e

f

g

a

b

c

d

e

f

g

С1

1

*

*

1

1

1

*

о1

1

1

1

0

0

0

1

С2

1

1

*

*

1

*

1

о2

1

1

0

1

0

0

1

С3

*

1

*

1

*

1

1

о3

1

0

1

0

1

0

1

о4

1

0

1

0

0

1

1

таблица с)

о5

1

0

0

1

0

1

1

с)

a

b

c

d

e

f

g

о6

0

0

1

1

0

1

1

p1

*

!

*

*

!

*

*

о7

0

1

1

1

0

0

1

p2

*

!

*

*

*

1

*

p3

*

*

*

!

!

*

*

таблица d)

итерация

pi

ребра графа

вершины графа

a

b

c

d

e

f

g

x1

x2

x3

x4

x5

1

1

0

0

0

0

0

0

1

1

0

0

0

2

1

1

0

0

0

0

0

1

1

0

1

0

3

1

1

1

0

0

0

0

1

1

0

1

1

4

1

1

1

0

0

0

1

1

1

1

1

1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]