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

4.5. Алгоритм отыскания фундаментального множества циклов на графе

Опишем простой алгоритм нахождения фундаментальных циклов [13]. Этот алгоритм основан на поиске в глубину. Каждая новая вершина, встречающаяся в процессе поиска, помещается в стек, представленный таблицей STACK, и удаляется из стека после использования. Очевидно, что стек всегда содержит последовательность вершин с рассматриваемой в данный момент вершины до корня. Поэтому же, если анализируемое ребро замыкает цикл (т.е. и u не находится непосредственно под верхним элементом стека), то вершина u находится в стеке и цикл, замыкаемый ребром , представлен верхней группой элементов стека, начиная с и кончая вершиной u. Здесь – номер вершины в порядке, в котором вершины посещаются при поиске в глубину, начиная с некоторой начальной вершины.

Нахождение фундаментального множества циклов для компоненты связности, содержащей вершину u. Переменные: d, num, STACK, RECORD, WGN.

Алгоритм 4.5.1 (нахождения множества фундаментальных циклов графа).

Вход: граф G = (V, E), представленный списками инцидентности RECORD [ ], .

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

1. Procedure CYCLE (u);

2. begin

3. , STACK [d]:= , num: ; WGN[ ]:=num;

4. for u RECORD [ ] do

5. if WGN [u] then CYCLE (u)

6. else if ( STACK [d-1]) and (WGN [ ] WGN [u]) then

* замыкает новый цикл*

7. выписать цикл с вершинами

STACK [d], STACK [ ], …, STACK [c], где STACK [c] ;

8. *использованная вершина удаляется из стека*

9. end; *цикл*

10. begin *главная программа*

11. for do WGN [ ]: ; num: ; *инициализация*

12. d: , STACK [0]: ; *d – число элементов в стеке*

13. for do

14. if WGN[ ] then CYCLE(u)

15. end.

Вычислительная сложность этого алгоритма имеет порядок .

5. Остов минимального веса. Алгоритм Краскала и Прима

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

Рассмотрим следующую задачу: во взвешенном связном графе требуется найти остов минимального веса. Эта задача возникает при проектировании линий электропередач, трубопроводов, дорог и т. п., когда требуется заданные центры соединить некоторой системой каналов связи так, чтобы любые два центра были связаны либо непосредственно соединяющим их каналом, либо через другие центры и каналы, и чтобы общая длина (или, например, стоимость) каналов связи была минимальной. В этой ситуации заданные центры можно считать вершинами полного графа с весами ребер, равными длинам (стоимостям) соединяющих эти центры каналов. Тогда искомая сеть будет кратчайшим остовным подграфом полного графа. Очевидно, что этот кратчайший остовный подграф должен быть деревом. Поскольку полный граф содержит различных остовных деревьев, то решение этой задачи «слепым» перебором вариантов потребовало бы чрезвычайно больших вычислений даже при относительно малых . Однако для ее решения имеются эффективные алгоритмы. Опишем два из них – алгоритмы Дж. Краскала и Р. Прима, применимые к произвольному связному графу.

Задача об остове минимального веса (о кратчайшем остове): в связном взвешенном графе порядка найти остов минимального веса.

Рис. 5.1.1

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