Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комбинаторные алгоритмы. Множества, графы, коды. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать

4.3. Родственные графам объекты

Иногда введенное определение графа оказывается недостаточ­ным, и приходится рассматривать более общие объекты: мультиграф, псевдограф, орграф.
Мультиграф – это граф, в котором допускаются кратные ребра,
Е является не множеством, а семейством элементов из V
т. е.
В
псевдографе кроме кратных ребер допускаются еще петли
(2)
.
ребра, соединяющие вершину саму с собой.
ориентированных графов (или орграфов) множество V
Для заменяется декартовым квадратом ченных пар (
u, v) элементов множества V. Итак, орграф – пара
2
V
= V × V, состоящим из упорядо-
(2)
G = (V, E) , где V – множество вершин, Е – множество ориентирован-
ных ребер, которые называются то вершины
u и v называются ее началом и концом соответственно. На
дугами, Е V
2
. Если е = (u, v) – дуга,
рисунке дуги принято отмечать стрелками, указывающими направле­ние от начала к концу дуги. Для орграфов цепь называется а цикл –
контуром. Другая терминология применяется и в отношении
степеней вершин. Число дуг, исходящих из вершины
путем,
v, называется
полустепенью исхода, а входящих – полустепенью захода. Обознача-
ются эти числа, соответственно,
d
(v) и d
+
(v).
Для орграфов справедливы все определенные ранее отношения и операции над неориентированными графами. Однако если полный неориентированный граф порядка полный орграф того же порядка имеет та вычисляется
дополнение орграфа.
n имеет m = n (n – 1) / 2 ребер, то
2
m = n
дуг. С учетом этого фак-

4.4. Способы машинного представления

Изображение графов на плоскости в виде точек и соединяющих их линий является наиболее понятным для человека способом пред­ставления графов. Однако если требуется решать с помощью ЭВМ задачи, связанные с графами, то данный способ становится бесполез­ным. Его в лучшем случае можно использовать для внешнего пред­ставления входных и выходных
данных алгоритмов.
41
Известны различные способы машинного представления гра­фов, которые различаются объемом занимаемой памяти и скоростью выполнения операций над графами. Рассмотрим из них четыре основ­ных [11].
Способ 1. Матрица инцидентности. Это классический матрич­ный способ представления графа. Пусть
(
n, m)-граф, V = {1, …, n}, n 2, E = {e
инцидентности
зывается (
графа G c заданной нумерацией вершин и ребер на-
n × m)-матрица A(G) = {a
}, элементы которой определяются
ij
G = (V, E) – помеченный
, …, em}, m 1. Матрицей
1
следующим образом:
=
a
ji
ei
j
==
,ребру инцидентна вершина если,1
).,...,1;,...,1( случае противном в0
mjni
Для орграфов определение матрицы инцидентности видоизме­няется:
, дуги концом является вершина если,1
⎧ ⎪
=
a
ji
⎪ ⎩
Если орграф имеет петли, т. е. дуги вида е договариваются обозначать a
= 2, хотя возможны и другие соглаше-
ij
= (i, i), то их обычно
j
ei
j
, дуги началом является вершина если,1
ei
j
==
mjni
).,...,1;,...,1( случае противном в0
ния.
Матрица инцидентности пригодна для представления мульти­графов и псевдографов.
Пример 4.3. Пусть заданы граф G
, орграф G2 (рис. 4.2, 4.3).
1
Соответствующие им матрицы инцидентности приведены на рис. 4.4,
4.5.
1
2
1
e
2
2
e
1
e
4 3
G1
Рис. 4.2 Рис. 4.3
e3
e
2
4
e3
e1
4 3
e4
G2
e5
e
6
42
0011
⎛ ⎜
=
(
)
GA
1
⎜ ⎜
⎜ ⎝
⎞ ⎟
0100
1110
1001
⎟ ⎟
0000
=
(
)
GA
2
⎛ ⎜
⎜ ⎜ ⎝
0 0 0 0 11
1 10 1 1 0
11 0 0 0 0
0 0 2 10 1
Рис. 4.4 Рис. 4.5
С алгоритмической точки зрения, матрица инцидентности как способ задания графов имеет ряд существенных недостатков. Во­первых, требуется для (n, m)-графа nm ячеек памяти, причем большин­ство из них будет занято нулями. Во-вторых, неудобен доступ к дан­ным. Ответы на элементарные вопросы типа «Существует ли дуга (u, v)?», «Какие
вершины смежны с вершиной v?» требуют в худшем случае перебора всех столбцов матрицы. В-третьих, матрица инци­дентности непригодна для представления взвешенных графов.
Способ 2. Матрица смежности.
Пусть G = (V, E) – помеченный
граф порядка n 1, V = {1, …, n}. Матрицей смежности графа G c заданной нумерацией вершин называется (n × n)-матрица B(G) = {b
},
ij
элементы которой определяются следующим образом:
=
b
ji
ji
=
,смежны и вершины если,1
).,...,1,( случае противном в0
nji
Всякий орграф G = (V, E) можно также задать матрицей смеж-
b
ij
=
ji
}, где
⎧ ⎨ ⎩
Eji
=
,),( если,1
).,...,1,( случае противном в0
nji
ности B(G) = {b
Если в орграфе есть петли, т. е. дуги вида (i, i), то для них, как прави­ло, полагают b
Пример 4.4. Матрицы смежности для графа G
ii
= 1.
и орграфа G2,
1
(рис. 4.2, 4.3) указаны на рис. 4.6, 4.7.
43
01100
⎛ ⎜
Рис. 4.6 Рис. 4.7
=
(
)
GB
1
⎜ ⎜
⎜ ⎝
⎞ ⎟
00100
01011
00101
⎟ ⎟
00000
(
⎛ ⎜
)
GB
=
2
⎜ ⎜
0010
⎟ ⎟
0100
0010
⎟ ⎟
1011
Неориентированные графы всегда имеют симметричные матри-
цы смежности.
Главным преимуществом матрицы смежности является то, что за один шаг можно получить ответ на вопрос «Существует ли в графе ребро{u, v}?». Другими словами, матрица смежности обеспечивает «прямой доступ» к ребрам графа. Недостаток данного способа пред­ставления графа – это большая
потребность в памяти: нужно n2 ячеек.
Для взвешенных графов и орграфов вместо матриц смежности используют матрицы весов. Пусть G = (V, E) – помеченный граф, для которого V = {1, …, n}, w(i, j) – вес ребра {i, j} E. Матрицей весов графа G называется (n × n)-матрица W(G) = {w
}, элементы которой
ij
определяются формулой
=
w
ji
Ejijiw
=
,},{ если),,(
nji
).,...,1,( случае противном в0
Аналогично определяется матрица весов для орграфа.
Способ 3. Перечень ребер. Данный способ является наиболее
экономичным в отношении памяти (особенно для разреженных гра-
2
фов, когда m гораздо меньше n
). Он предполагает задание графа
G = (V, E) с помощью последовательности пар < u, v >. Пара < u, v > соответствует ребру {u, v} E, если граф неориентированный, или ду­ге (u, v) E, если ориентированный. Поскольку пару < u, v > можно хранить, используя две ячейки (по одной на каждую концевую верши-
то для хранения всей последовательности пар достаточно 2m яче-
ну), ек. Если граф взвешенный, то понадобится еще m ячеек для хранения весов ребер (дуг) графа.
44
Этот способ также не лишен недостатков. Во-первых, чтобы оп­ределить, содержит ли граф заданное ребро, надо посмотреть в худ­шем случае все элементы последовательности, т. е. выполнить 2m эле­ментарных операций. Ситуацию можно несколько улучшить, предва­рительно упорядочив пары < u, v > лексикографически, и затем применить двоичный поиск. Во-вторых,
если граф G = (V, E) имеет изолированные вершины, то необходимо хранить множество V вершин графа G = (V, E), а это еще n дополнительных ячеек памяти.
Пример 4.5. Перечни ребер для графа G
и орграфа G
1
(рис. 4.2, 4.3) представлены на рис. 4.8, 4.9 соответственно.
1 3 1 2 1 4 2 3 2 3 3 2 3 4 4 1
4 2 4 4
Рис. 4.8 Рис. 4.9
Способ 4. Списки смежности. При таком способе задания графа
G = (V, E) каждой вершине i V ставится в соответствие ее окрестность в виде списка N массив М = (М
хранится указатель на первый элемент списка Ni (i = 1, …, n).
в M
i
вершин, смежных с ней. Кроме того, формируется
i
, …, Мn) указателей на списки смежности вершин, т. е.
1
Примечательно, что каждое ребро {i, j} неориентированного графа представляется дважды: через вершину i в списке N вершину j в списке N
. Поэтому для неориентированного (n, m)-графа
j
и через
i
требуется 4m + n ячеек памяти, а для ориентированного – только 2m + n. Для проверки условия, содержит ли граф заданное ребро, не-
обходимо выполнить порядка n элементарных операций.
Очевидно, что данный способ применим также для взвешенных графов и орграфов.
2
45
M
Пример 4.6. Списки смежности для графа G
и орграфа G2
1
(рис. 4.2, 4.3) изображены на рис. 4.10, 4.11 соответственно.
М
1
3
nil
2
3
3
nil
1
2
4nil
4
1
34nil
5
nil
Рис. 4.10
M
М
2
1
nil
2
3
nil
2
3
4
nil
4
1
2
nil
Рис. 4.11
Выбор того или иного способа представления графа зависит от конкретной задачи. Нередки случаи, когда в программе необходимо перейти от одного способа представления графа к другому.
46

4.5. Порядок выполнения задания

4.5.1. Разработать алгоритм и программу перехода от способа A представления графа к способу В. Номер варианта задания определяет значения А и В (табл. 4.1). Оценить вычислительную сложность разра­ботанного алгоритма.
4.5.2. Разработать алгоритм и программу проверки отношений и выполнения операций над графами. Отношения и операции определя­ются номером варианта задания (табл. 4.1). Считать, исходных данных выступают один или два графа в зависимости от варианта задания. Исходные графы заданы и вводятся перечнями их вершин и ребер. Графы могут быть неориентированными и ориен­тированными. Для представления графов в памяти ЭВМ взять способ В. Тестовые примеры придумать самостоятельно. Оценить сложность алгоритма и программы по
времени и используемой памяти.
что в качестве

4.6. Варианты

Таблица 4.1
Номер
варианта
1 1 2 Операция объединения
2 1 3 Отношение включения
3 2 3 Операция дополнения
4 2 4 Отождествление двух заданных
5 3 4 Удаление заданной вершины
6 1 4 Отношение равенства
Способ
представления графа
А В
Отношения и операции
над графами
вершин
Удаление заданного ребра
47
ЗАДАНИЕ 5
Базовые задачи и алгоритмы на графах
Во многих задачах теории графов необходимо обойти некото­рый граф, посещая каждую его вершину в точности один раз и выпол­няя при этом некоторую систематическую обработку информации, относящуюся к этой вершине. К таким задачам относятся: отыскание остовного дерева; распознавание связности, двудольности и ациклич­ности графа; поиск «узких» мест графа; проверка достижимости шин и др. Все эти задачи и алгоритмы их решения составляют опера­ционный базис теории графов. Изучение методов систематического перебора вершин графа и практика решения на компьютере базовых задач теории графов – цель данного задания.

5.1. Обход вершин графа в глубину или ширину

Среди различных методов систематического обхода всех вершин графа наиболее известны поиск в глубину и поиск в ширину [5, 6, 1219]. Алгоритмы поиска лежат в основе многих задач на графах.
В алгоритме 5.1, реализующем обход вершин графа в глубину или ширину, предполагается, что граф G = (V, E), где V = {v n 1, задан списками смежности. Это означает, что для каждой вер­шины v V известна ее окрестность N(v). Обход начинается с вер­шины s V, которая также должна быть задана.
вер-
, …, vn},
1
Алгоритм 5.1. Поиск в глубину или ширину
1. Инициализация. Пусть Х – одномерный массив для записи меток вершин графа. Вначале все вершины графа считать неотмечен­ными: для каждой вершины v V положить Х[v]:= 0.
Начало обхода. Исходную вершину s записать в структуру
2. данных Q и отметить, полагая X[s]:= 1.
Посещение вершины. Из Q извлечь вершину u и вывести ее
3. в качестве очередной пройденной вершины.
48
4.
Пополнение Q. Проанализировать каждую вершину ω N(u).
Если X[ω] = 0, т. е. вершина ω еще не отмечена, то записать ее в Q и отметить, полагая X[ω]:= 1.
5.
Продолжение или завершение обхода. Если Q , то перейти
к пункту 3. Иначе обход завершить. Если структура данных Q – стек (удаление и добавление эле-
ментов производится с одного конца), то обход вершин графа по алго­ритму 5.1 соответствует поиску в глубину. Поиск в глубину называют иногда обходом в вертикальном порядке. Если Qочередь (удаление элементов производится с одного конца, а добавление – с другого), то обход называется поиском в ширину, или обходом в горизонтальном порядке.
Для связного графа G алгоритм 5.1 обеспечивает обход всех
вершин графа, поскольку в Q попадают по порядку все вершины из множества
N(v1) ∪ N(vn) = V.
При этом каждая вершина обходится только один раз. Действительно, посещаются только те вершины, которые попали в Q (пункт 3 алго­ритма). В Q записываются только неотмеченные вершины, которые сразу же отмечаются (пункт 4 алгоритма).
Оценим сложность алгоритма 5.1. Каждое включение и ис-
ключение вершины из Q выполняется за время О (1). Поэтому для всей работы, связанной с изменением Q, достаточно времени О (n), где n = | V |. Для каждой вершины u V пункт 4 алгоритма выполня­ется d(u) = | N(u) | раз. Поэтому затраты на его выполнение в целом можно оценить так:
⎛ ⎜
=
Vu
),()( mOudO
где m = | Е | – число ребер графа. Таким образом, временная сложность поиска в глубину или ширину составляет O (n + m). Заметим, что здесь использовано равенство
,2)( mudVu=
справедливое для любого (n, m)-графа G = (V, E) и известное в теории графов как «лемма о рукопожатиях».
49
Пример 5.1. Рассмотрим (7, 10)-граф G = (V, E), для которого
V = {1, 2, 3, 4, 5, 6, 7} (рис. 5.1). При поиске в глубину вершины этого
графа будут проходиться в следующем порядке: 1, 5, 7, 6, 4, 3, 2. Об­ход начинается с вершины s = l.
2
1
N(1) = (2, 3, 5)
N(2) = (1, 4, 5)
N(3) = (1, 5)
4
5
3
N(4) = (2, 5)
N(5) = (1, 2, 3, 4, 6, 7)
N(6) = (5, 7)
7
6
N(1) = (5, 6)
Рис. 5.1
На рис. 5.2 и в табл. 5.1 приведены результаты обхода: ПГ-
номера (номера по порядку поиска в глубину) вершин; метки (исход­ные номера) вершин; текущее состояние стека Q.
Таблица 5.1
7* 1*
5*
2*
6*
4*3*
Вершина u
ПГ-номер Метка
1* 2* 3* 4* 5* 6* 7*
1 5 7 6 4 3 2
Стек Q
2, 3, 5 2, 3, 4, 6, 7 2, 3, 4, 6 2, 3, 4 2, 3 2
Рис. 5.2
При поиске в ширину для s = 1 вершины будут проходиться
в следующем порядке: 1, 2, 3, 5, 4, 6, 7. На рис. 5.3 и в табл. 5.2 указа­ны результаты этого обхода: ПШ-номера (номера по порядку поиска в ширину) вершин; метки вершин; текущее состояние очереди Q.
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]