Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1714

.pdf
Скачиваний:
7
Добавлен:
30.04.2022
Размер:
1.86 Mб
Скачать

Следовательно, матрица K + имеет вид

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2 0 0 0 0

 

 

0 1

 

0 0 1

 

 

 

 

 

0 2 0 0 0

 

 

 

0 0

 

1

1 0

 

 

 

+

+

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K = F B =

0 0 1 0 0

 

0 0

 

0 1 0

=

 

 

 

 

 

 

 

 

 

 

0 0 0 2 0

 

 

0 1

 

0 0 1

 

 

 

 

 

 

0 0 0 0 1

 

 

1 0

 

0 0 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

1

 

0

 

 

0

 

1

 

 

 

 

 

 

 

 

 

 

 

 

0

2

 

1

 

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

1

 

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

0

1

 

0

 

 

2

 

1

 

 

 

 

 

 

 

 

 

 

 

 

1

0

 

0

 

 

0

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аналогично находим δ

(υ )=1, δ (υ

2

)= 2, δ (υ

3

)=1, δ (υ

4

)= 2

и δ (υ

)= 2 :

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

 

 

 

 

 

 

υ1

υ2 υ3

υ4 υ5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

υ1

1

0

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

2

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

F =

υ2

 

 

 

 

 

 

 

 

 

 

 

 

υ3

0 0

1

0

0

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

2

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

υ4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

0

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

υ5

 

 

 

 

 

 

 

 

Таким образом, матрица K имеет вид

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 0 0 0 0

 

 

0 1

 

0 0 1

 

 

 

 

 

0 2 0 0 0

 

 

0 0

 

1

1 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K = F B =

0 0 1 0 0

0 0

 

0 1 0

=

 

 

 

 

 

 

 

 

0 0 0 2 0

 

0 1

 

 

0 0 1

 

 

 

 

 

 

 

0 0 0 0

2

 

 

1 0

 

0 0 0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

 

0

 

 

0

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

0

2

 

1

 

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

 

1

 

 

1

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

=

 

 

 

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

0

1

 

0

 

 

2

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

 

0

 

 

0

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

81

Согласно теореме 12.8 определяем число остовов орграфа, входящих в вершину υ1 . Для этого вычислим алгебраическое дополнение любого элемента

первой строки матрицы K + , например элемента k11+ :

 

 

 

 

2

1

1

0

 

 

2

1

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K

+

1+1

 

0

1

1 0

 

 

 

1

1

 

 

1 1

 

 

 

 

 

 

 

 

 

=1

 

0 1

1

= 2

1

 

= 2.

 

=(1)

 

 

 

 

 

 

 

11

 

 

1 0

2

1

 

 

 

 

 

 

0 2

 

 

1 1

 

 

 

 

 

 

 

1

0

2

 

 

 

 

 

 

 

 

0

0

0

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для того чтобы найти число остовов орграфа, выходящих из вершины υ1 , вычислим алгебраическое дополнение любого элемента первого столбца матрицы K , например элемента k11:

 

 

 

2

1

1

0

 

 

2

1 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

K11

=(1)1+1

 

0

1

1

0

= 2

 

= 2

 

2

 

1

1

 

1

 

1 1

 

 

= 4.

 

 

 

 

 

 

 

1 0

2

1

 

0

1

1

 

 

0

2

 

 

1 1

 

 

 

 

 

 

 

1

0

2

 

 

 

 

 

 

 

 

 

 

 

 

 

0

0

0

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Следовательно, у данного орграфа имеется четыре остова (каркаса), выходящих из вершины υ1 , и два остова (каркаса), входящих в эту вершину.

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

Теорема 12.9. Число ребер произвольного неорграфа G, которые необходимо удалить для получения остова, не зависит от последовательности их удаления и равно m n + p , где m – число ребер, n – число вершин, p – число

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

Число γ (G)= m n + p называется цикломатическим числом графа G.

Следовательно, при любом выборе остова число хорд равно цикломатическому числу γ (G). Например, у псевдографа, изображённого на рис. 87, цикломати-

ческое число равно γ (G)= m n + p =9 7 + 2 = 4 (при вычислении цикломати-

ческого числа петля считается однократным звеном). Заметим, что под остовом несвязного графа понимается лес.

82

υ2

υ4

υ7

υ1

 

υ6

υ3 υ5

Рис. 87. Несвязный псевдограф

Для мультиграфа, изображённого на рис. 85, цикломатическое число равно γ (G)= m n + p = 6 4 +1 =3. Один из возможных его остовов представлен

на рис. 88.

υ2 υ3

υ1

υ4

Рис. 88. Один из остовов мультиграфа

Для орграфа, изображённого на рис. 86, цикломатическое число равно γ (G)= m n + p =8 5 +1 = 4 . Два остова, входящих в вершину υ1 , представле-

ны на рис. 89, а все четыре остова, выходящих из этой вершины, изображены на рис. 90.

1

υ2

1

υ

 

υ3

 

υ3

υ5

υ4

υ5

υ4

Рис. 89. Остовы, входящие в вершину υ1

83

1

2

1

υ2

 

υ3

 

υ3

υ5

υ4

υ5

υ4

υ1

2

υ1

2

 

υ3

 

υ3

υ5

υ4

υ5

υ4

Рис. 90. Остовы, выходящие из вершины υ1

Теорема 12.9 имеет следующие два следствия.

Следствие 12.1. Неорграф G является деревом или лесом тогда и только тогда, когда γ (G)= 0 .

Следствие 12.2. Неорграф G имеет единственный цикл тогда и только тогда, когда γ (G)=1.

84

13. Экстремальные задачи на графах

13.1. Задача об остове наименьшего веса

Существует ряд практических задач, в которых ищется наиболее экономичный способ взаимосвязи n пунктов. Например, необходимо построить автомобильные дороги, связывающие n дачных посёлков так, чтобы их суммарная длина была минимальной. Любые два посёлка должны быть связаны дорогой либо непосредственно либо дорогами, проходящими через другие посёлки. Аналогичная задача возникает при прокладке водопроводов, газопроводов, линий связи и т.п.

Математически такого рода задачи формулируются следующим образом. Каждому ребру ui графа с n вершинами ставится в соответствие число wi

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

такой остов, чтобы сумма весов всех ветвей остова w = n1wi была минималь-

i=1

ной (максимальной) в зависимости от того, как ставится задача. Такой остов графа называется его экстремальным деревом.

Известно, что количество различных остовов графа с n вершинами равня-

ется nn2 . Решение задачи полным перебором вариантов потребовало бы чрезвычайно больших вычислений. Для решения задач подобного рода были разработаны эффективные алгоритмы – Краскала* и ближайшего соседа (алгоритм Прима*).

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

1.Выбираем первую ветвь искомого остова – ребро с минимальным (максимальным) весом и присоединяем его к пустому графу.

2.Рассматриваем следующее минимальное (максимальное) по весу ребро. Если оно не образует цикла с ранее выбранными ветвями, то его вводят в

остов.

3.Второй пункт повторяем до тех пор, пока не отберем (n 1) ребро.

Алгоритм Краскала позволяет построить экстремальный граф любого связного графа.

* Биографические сведения см. в прил. 2.

85

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

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

 

υ

υ2

 

 

1

 

 

20

14

27

19

υ6

13

16

υ3

22

υ7

 

 

17

24

υ5 25 υ4

Рис. 91. Взвешенный граф

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

Далее выбираем следующее ребро наименьшего веса – 14 (рис. 92,б). На третьем, четвертом и пятом шагах соответственно выбираем ребра с весами 16 (рис. 92,в), 17 (рис. 92,г) и 19 (рис. 92,д). Следующим ребром минимального веса из оставшихся является ребро с весом 20, но это ребро в остов включать нельзя, так как оно образует цикл с ребрами весом 13 и 14. Следовательно, в остов нужно включить ребро с весом 22 (рис. 92,е). На этом построение остова заканчиваем, так как уже отобрано шесть ребер.

Таким образом, минимальная длина дорог, связывающих посёлки, равна

13 +14 +16 +17 +19 + 22 =101 км.

Замечание 13.1. Экстремальное дерево может быть построено для произвольного графа, не обязательно полного, так как связи между некоторыми вершинами могут быть нежелательными или недопустимыми.

86

υ1 υ2

υ6

13

υ3

 

 

υ7

 

υ

υ4

 

5

 

 

 

а)

 

υ

υ2

 

1

 

 

14

 

υ6

13

υ3

 

υ7

16

 

υ

υ4

 

5

 

 

 

в)

 

υ

υ2

 

1

 

 

14

19

υ6

13

υ3

 

υ7

16

 

 

17

υ5 υ4

д)

υ1

14

υ6 13 υ7

υ5

б)

υ1

14

υ6 13 υ7

17

υ5

г)

υ1

14

υ6 13 υ7 22 17

υ5

е)

υ2

υ3

υ4

υ2

υ3

16

υ4

υ2

19

υ3

16

υ4

Рис. 92. Алгоритм Краскала: а) первый шаг, б) второй шаг, в) третий шаг, г) четвертый шаг, д) пятый шаг, е) шестой шаг

87

Алгоритм ближайшего соседа

Алгоритм Краскала требует для построения остова предварительной сортировки рёбер графа по весам на каждом шаге, что весьма затруднительно для графов с большим числом рёбер. Несколько проще алгоритм ближайшего соседа (алгоритм Прима).

1.Отмечаем произвольно выбранную вершину графа, с которой начинается построение. Строим ребро с наименьшим (наибольшим) весом, инцидентное этой вершине.

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

3.Продолжаем далее разыскивать каждый раз ребро с минимальным

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

4.Третий пункт повторяем до тех пор, пока не отберем (n 1) ребро.

Пример 13.2. Решить задачу, рассмотренную в примере 13.1, с помощью алгоритма ближайшего соседа.

Решение. Выберем в качестве начальной вершины, например, вершину υ2 (см. рис. 91). Тогда инцидентным ей ребром минимального веса является

ребро с весом 19 (рис. 93,а).

Теперь выбираем ребро минимального веса, инцидентное вершинам υ2 и υ3 . Этим ребром служит ребро с весом 16 (рис. 93,б). На третьем, четвертом и

пятом шагах соответственно выбираем ребра с весами 13 (рис.93,в), 14 (рис. 93,г) и 17 (рис. 93,д). И, наконец, включаем в остов ребро с весом 22 (рис. 93,е).

Ребро с весом 20 в остов мы не включаем по тем же соображениям, что при использовании алгоритма Краскала (оно образует цикл с ребрами весом 13

и 14).

Следует отметить, что если в качестве начальной вершины выбрать вершину υ6 , то последовательность шагов, выполняемых по алгоритму ближайше-

го соседа, совпадет с алгоритмом Краскала.

88

υ

υ2

1

 

 

19

υ6

υ3

 

υ7

 

υ

υ4

 

5

 

 

 

а)

 

υ

υ2

 

1

 

 

 

19

υ6

13

υ3

 

υ7

16

 

υ

υ4

 

5

 

 

 

в)

 

υ

υ2

 

1

 

 

14

19

υ6

13

υ3

 

υ7

16

 

 

17

υ5 υ4

д)

υ1 υ2

19

υ6 υ7

υ5

б)

υ1

14

υ6 13 υ7

υ5

г)

υ1

14

υ6 13 υ7 22 17

υ5

е)

υ3

16

υ4

υ2

19

υ3

16

υ4

υ2

19

υ3

16

υ4

Рис. 93. Алгоритм ближайшего соседа: а) первый шаг, б) второй шаг, в) третий шаг, г) четвертый шаг, д) пятый шаг, е) шестой шаг

89

13.2. Задача о коммивояжере

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

Математическая постановка задачи выглядит так: найти гамильтонов цикл минимального веса.

Отметим некоторые практические задачи, сводящиеся к задаче коммивояжера.

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

2.Имеется станок с числовым программным управлением, который высверливает отверстия в печатных платах по заданной программе. Составляем граф, в котором вершины соответствуют требуемым отверстиям, и ищем обход вершин с затраченным на него минимальным временем.

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

Пример 13.3. Дан взвешенный орграф (рис. 94). Найти кратчайший гамильтонов цикл.

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

Начнем движение по графу из произвольной вершины, например из вершины υ1 . Из двух возможных дуг υ1 ×υ5 и υ1 ×υ2 предпочтение отдаем корот-

кой дуге υ1 ×υ5 длины 1. Далее из вершины υ5 двигаемся без ветвления до вершины υ3 , т.е. проходим простой путь υ1 υ5 υ4 υ3 . После этого из υ3 направляемся по более короткой дороге в вершину υ6 , затем в υ2 и возвращаемся в υ1 , тем самым получаем гамильтонов цикл υ1 υ5 υ4 υ3 υ6 υ2 υ1

(рис. 95).

90