Материал: Решение задач теории графов методические указания к практическим занятиям по дисциплине «Дискретная математика». Белецкая С.Ю

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

3. Построение остовных деревьев графа

3.1. Теоретические сведения

Связный ациклический граф, имеющий не менее двух вершин, называется деревом. Ориентированным деревом называется орграф без циклов, в котором имеется вершина x0, из которой существует только один ориентированный путь в любую другую вершину. Деревом графа G называется любой его связный ациклический подграф. называется остовным деревом (остовом) Т графа G. При этом ребра остовного дерева T называются ветвями, а ребра графа G, не принадлежащие остову T - хордами. На рис 6. а представлен граф G, на рис. 6. б - одно из его деревьев, на рис. 6 в, г - два остова T1 и T2 графа G, на рис. 6. д - остовное 2 - дерево (лес) графа G.

а б в г д

Рис. 6

Очевидно, что в любом графе существует остов, причем в общем случае остов может быть выделен не единственным способом.

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

Опишем алгоритм поиска в глубину (этот метод стал одной из основных методик проектирования графовых алгоритмов). Поиск начинается с некоторой фиксированной вершины xo, например, с висячей. Затем выбирается вершина x1, смежная с xo. После этого выбирается вершина x2, смежная с x1, и т.д. Ещё не просмотренные вершины будем условно называть новыми. Если на k-м шаге поиска для вершины xk существует новая вершина xk+1, то она выбирается (перестаёт быть новой) и поиск продолжается от вершины xk+1. Если же для вершины xk новых вершин не существует, осуществляется возврат к вершине, из которой мы попали в xk, и поиск осуществляется от неё. Процесс продолжается до тех пор, пока не будет произведён возврат в вершину xo. В процессе поиска вершины соединяют рёбрами.

Поиск в ширину отличается от поиска в глубину тем, что выбор очередной вершины происходит путём просмотра не одной, а всех смежных вершин из списка новых.

Рассмотренные алгоритмы могут быть использованы для построения всех остовных деревьев графа.

При конструкторском и топологическом проектировании РЭА и ЭВА, создании вычислительных сетей важное значение имеет задача определения кратчайшего остова (остова минимального веса) взвешенного графа. Кратчайшим остовом взвешенного графа G будем называть остов, у которого сумма весов всех ребер наименьшая.

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

Алгоритм Краскала заключается в следующем. На начальном этапе из всех ребер графа G выбирается ребро минимального веса и включается в остов. На каждом последующем i-м шаге из еще не включенных в остов ребер выбирается ребро, имеющее минимальный вес и не составляющее циклов с уже выбранными ребрами. Процесс продолжается до тех пор, пока в остов не будет включено n-1 ребро.

Алгоритм Прима отличается от алгоритма Краскала только тем, что на каждом этапе строится не просто ациклический граф, а дерево, которое в дальнейшем последовательно разрастается. При этом, если дерево уже построено, то новое ребро выбирается не из всех оставшихся ребер графа G, а только из тех, которые соединяют вершины дерева с вершинами, не включенными в . Из этих ребер выбирается ребро минимального веса. При этом необходимо следить за тем, чтобы не появлялись циклы.

3.2. Примеры решения задач

Задача 1. Построить остовное дерево графа с использованием стратегий поиска в глубину и ширину.

Рис. 7

Решение.

1. Поиск в глубину.

Начинаем поиск с любой вершины, допустим, с x1. Выбираем вершину, смежную с x1, например x2. Вершины x1 и x2 соединяем ребром. Далее выбираем вершину x3, смежную с x2. Вершины x2 и x3 соединяем ребром. Продолжая двигаться дальше, соединяем вершины x3 и x4. У вершины x4 три смежных вершины - x5,x7 и x8. Для продолжения поиска можно выбрать любую из них, например x5 . Соединяем ребром вершины x5 и x6, а затем x6 и x7. Попав в вершину x7, видим, что смежной с ней является вершина x4. Но продолжать поиск в данном направлении нельзя, так как вершина x4 уже была просмотрена. Согласно алгоритму возвращаемся в предыдущую вершину, то есть в x6. Так как у x6 нет новых вершин, то возвращаемся в вершину x5. Аналогично из x5 переходим в вершину x4. Вершина x8 является новой, поэтому, согласно алгоритму, выбираем вершину x8 и соединяем вершины x4 и x8 ребром, затем соединяем x8 и x9. У x9 нет новых вершин, кроме x1, но соединить эти вершины мы не можем, так как граф тогда не будет остовом. Мы просмотрели все вершины графа G. Возвращаемся в вершину x1. Найденный остов графа G представлен на рис. 8, а.

2. Поиск в ширину.

Начинаем поиск с любой вершины, например с x1. Соединяем ребрами вершину x1 со всеми смежными ей вершинами - x2, x4 и x9. Теперь по порядку рассматриваем эти смежные вершины. Берем вершину x2. Соединяем её со всеми смежными ей вершинами, то есть с x3. Следующая по порядку вершина x4. Соединяем её со смежными вершинами, то есть с x5, x7 и x8. Затем по порядку идет вершина x9, но соединить её со смежной вершиной x8 мы не можем, так как полученный граф не будет являться остовом. Далее рассматриваем вершины x5, x7 и x8. У x5 есть смежная вершина x6. Соединяем их ребром. У вершин x7 и x8 нет таких смежных вершин. Таким образом, мы получили один из остовов графа G (рис. 8, б).

а б

Рис. 8

Задача 2. С использованием алгоритмов Краскала и Прима построить кратчайший остов для графа

Рис. 9

Решение Кратчайший остов для данного графа имеет следующий вид:

В таблицах приводится последовательность выбора ребер остовного дерева с использованием алгоритмов Краскала и Прима.

Алгоритм Краскала

Шаг

Ребро

Вес

1

x6,x7

3

2

x1,x2

5

3

x3,x4

7

4

x1,x3

8

5

x3,x6

9

6

х11,x13

10

7

x6,x9

11

8

x6,x10

12

9

x3,x11

13

10

x8,x9

14

11

x12,x13

15

12

x4,x5

18

Алгоритм Прима

Шаг

Ребро

Вес

1

x6,x7

3

2

x6,x3

5

3

x3,x4

7

4

x1,x3

8

5

x1,x2

9

6

x6,x9

10

7

x6,x10

11

8

x3,x11

12

9

x11,x13

13

10

x8,x9

14

11

x12,x13

15

12

x4,x5

18

Суммарный вес построенного остова равен 125.

3.3. Упражнения

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

а б

Рис. 10

2. Построить кратчайшее остовное дерево с использованием алгоритмов Краскала и Прима для следующих графов:

Источник: https://studfile.net/preview/16567232/