Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комбинаторные алгоритмы. Множества, графы, коды. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
D[2, 1]:= min {D[2, 1], (D[2, 4] + D[4, 1])} = min {, (–1 + 4)} = 3; H[2, 1]:= H[4, 1]; D[3, 1]:= min {D[3, 1], (D[3 ,4] + D[4, 1])} = min {, (–3 + 4)} = 1; H[3, 1]:= H[4, 1]; D[3, 2]:= min {D[3, 2], (D[3, 4] + D[4, 2])} = min {, (–3 + 2)} = –1; H[3, 2]:= H[4, 2].
Поскольку k = n, то решение получено и оно указано на рис. 7.11.
В результирующей матрице D нет отрицательных диагональных эле­ментов. Это говорит о том, что в исходном орграфе (рис. 7.6) туров отрицательной длины.
нет кон-
3020
⎛ ⎜
D =
⎜ ⎜ ⎝
Используя алгоритм 7.4, восстановим, например, кратчайший
(2, 1)-путь по матрице Н:
H[2, 1] = 4, H[2, 4] = 3, H[2, 3] = 2.
Следовательно, (2, 3, 4, 1) – кратчайший (2, 1)-путь длины D[2, 1] = 3.
1203
H =
3011
0424
Рис. 7.11
⎛ ⎜
⎜ ⎜ ⎝
1210
3204
3014
0214

7.5. Кратчайшие контуры и транзитивное замыкание

Если в алгоритме 7.3 всем элементам D[i, i] придать начальные
значения ∞, то конечное значение D[i, i] будет равно весу кратчайшего контура, проходящего через вершину с номером i (i = 1, …, n).
Пример 7.5. Рассмотрим орграф, изображенный на рис. 7.12.
Результаты выполнения алгоритма 7.3 приведены на рис. 7.13. Значе­ния всех диагональных элементов начальной матрицы D равны ∞. В результирующей матрице D[1, 1] = D[2, 2] = D[3, 3] = 2. Это означа­ет, что через каждую вершину орграфа проходит кратчайший контур длины 2.
81
(1)
23
(1)
(1)
(1)
G
G
1
Рис. 7.12
1
k = 0 D =
⎜ ⎜
⎝ ⎛
k = 1 D =
⎜ ⎜
k = 2 D =
⎜ ⎜
k = 3 Без изменений
С задачей определения кратчайших путей тесно связана зада-
ча вычисления транзитивного замыкания орграфа. Транзитивным
замыканием орграфа G = (V, E), V = {1, .., n}, называется орграф G* = (V*, E*), для которого V* = V, а дуга (i, j)
когда вершина j достижима из вершины i в G. Транзитивное замыкание всегда содержит все петли – дуги вида (i, i), так как всякая вершина i V достижима из самой себя с помощью пути длины 0 (i = 1, …, n).
Транзитивное замыкание можно найти с помощью алгоритма
Флойда, полагая веса
всех дуг равными 1.
⎞ ⎟
11
H =
1
1
⎞ ⎟
121
H =
∞∞∞1
212
⎞ ⎟
121
H =
212
Рис. 7.13
⎛ ⎜
⎜ ⎝
⎛ ⎜
⎜ ⎝
⎛ ⎜
⎜ ⎝
Е* тогда и только тогда,
010
⎞ ⎟
202
030
010
⎞ ⎟
212
030
212
⎞ ⎟
212
232
82
Матрица смежности В(G*) = {b
} транзитивного замыкания
ij
(или достижимости) определяется из матрицы D кратчайших путей так:
=<
=
b
ji
jijiD
=
nji
, или ],[ если,1
).,...,1,( случае противном в0
В задании 4 предполагалось, что в матрице смежности петли
орграфа отмечаются числом 1. Поэтому здесь b
= 1 для всех
ii
i = 1, …, n.
2
3
B(G*) =
⎛ ⎜
⎜ ⎝
G*
G*
1
111
⎞ ⎟
111
111
Рис. 7.14
Например, транзитивным замыканием орграфа с рис. 7.12 явля-
ется полный орграф порядка 3 (рис.7.14).

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

7.6.1. Изучить алгоритм Дейкстры и реализовать его в виде про-
граммной процедуры. Процедура должна заканчивать работу после получения всеми вершинами орграфа постоянных меток.
Считать, что на вход алгоритма Дейкстры поступают:
матрица весов W = {w
} орграфа;
ij
– номера вершин s и t, для которых надо найти кратчайший
путь.
На выходе процедура должна выдавать длину кратчайшего (s, t)-
пути и сам этот путь в виде последовательности вершин орграфа. Не­обходимо предусмотреть промежуточную печать состояний массивов D, H, X для каждой итерации алгоритма. При тестировании процеду­ры использовать примеры
7.1–7.3.
83
7.6.2. Изучить алгоритм Флойда, включая восстановление любо-
го кратчайшего (s, t)-пути по матрице Н. Реализовать алгоритм в виде программной процедуры.
Полагать, что на вход алгоритма Флойда поступают:
матрица весов W = {w
} орграфа;
ij
– номера вершин s и t, для которых следует найти кратчайший
путь.
На выходе процедура должна выдавать матрицу D кратчайших
путей между всеми парами вершин, а также длину кратчайшего (s, t)- пути и сам этот путь в виде последовательности вершин орграфа. До­полнительно к этому необходимо предусмотреть промежуточную пе­чать состояний
матриц D и Н для каждой итерации алгоритма. При
отладке процедуры использовать примеры 7.1, 7.2, 7.4, 7.5.
7.6.3. Решить прикладную задачу согласно номеру варианта за-
дания (табл. 7.3).

7.7. Варианты

Таблица 7.3
Номер
варианта
1 Сетевое планирование работ 2 Надежная вычислительная сеть 3 Система двусторонних дорог 4 Плотная система двусторонних дорог 5 Две системы двусторонних дорог 6 Система односторонних дорог
Сетевое планирование работ. Допустим, что нужно реализо-
вать большой проект и этот проект состоит из n этапов. Например, в качестве проекта выступает строительство здания. Этап i может со­стоять в строительстве стен, этап j – вставка окон, этап k – прокладка электропроводки и т. п.
На очерёдность выполнения этапов наложено ограничение пред-
шествования вида: для
всякого этапа j задано множество этапов Γ+(j),
которые должны быть завершены до того, как начнётся выполнение j.
Прикладная задача
84
+
При этом каждая пара этапов (i, j), где i Γ чиной t
, равной минимальной задержке по времени между началом
ij
(j), характеризуется вели-
этапа i и началом этапа j.
Очевидно, что отношение предшествования между этапами
проекта можно изобразить графически, в виде так называемого сете­вого графика. Вершины сетевого графика – этапы проекта. Сетевой график содержит дугу (i, j) с весом t
, если этап i предшествует эта-
ij
пу j. По своему построению сетевой график – взвешенный безконтур­ный орграф. Действительно, предположение о существовании некото­рого контура, содержащего вершину i, приводит к (нелепому для дан­ной задачи) выводу о возможном повторении этапа i.
В задаче требуется найти минимальное время, необходимое для
реализации проекта. Другими словами
, нужно найти в орграфе самый длинный путь между вершиной s, изображающей начало, и вершиной t, изображающей завершение всех необходимых для реализации про­екта работ. Самый длинный путь в сетевом графике называется кри­тическим путем, так как этапы, относящиеся к этому пути, определя- ют полное время реализации проекта, и всякая задержка
с началом выполнения любого из этих этапов приводит к задержке выполнения проекта в целом.
С помощью изменения знаков для всех t
(i, j = 1, …, n) дан-
ij
ную задачу можно свести к задаче о кратчайшем (s, t)-пути, которая в этом случае будет иметь решение, поскольку сетевой график не име­ет контуров. Вершина s – одна из вершин, для которых полустепень
+
захода равна 0, т. е. d рых полустепень исхода равна 0, т. е. d
(s) = 0. Вершина tодна из вершин, для кото-
(t) = 0. Разумно предположить,
что такие вершины s и t всегда единственные, поскольку этого всегда можно добиться введением фиктивных вершин и дуг.
Исходные данные: сетевой график, заданный матрицей весов
(временных задержек).
Результаты: длина критического (s, t)-пути и сам (s, t)-путь. Рекомендация. Использовать алгоритм Флойда. Алгоритм Дейк-
стры применять
в данном случае нельзя (почему?). Предусмотреть
поиск вершин s и t.
Разработанную программу применить для вычисления критическо­го пути сетевого графика, изображенного на рис. 7.15. Числа в скобках, стоящие у дуг, указывают продолжительность задержек в днях.
85
Начало
1
(10)
(5)
(7)
2
(19)
(11)
4
(9)
(16)
3
5
(11)
(3)
7
(8)
(30)
(14)
6
(13)
10
(26)
(30)
(17)
8
(15)
(18)
(21)
9
(8)
(12)
(7)
13 14
Конец
12
(14)
(19)
11
Рис. 7.15
Надежная вычислительная сеть.
Имеется вычислительная сеть, состоящая из n центров хранения и переработки информации. Некоторые пары центров соединены каналами двусторонней связи. Обмен информацией между любыми двумя центрами осуществляется либо непосредственно по соединяющему их каналу, если он есть, либо через другие каналы и центры. Всякий канал, непосредственно связы­вающий центр i с центром j,
характеризуется величиной рij – вероят­ностью безотказной работы (или надежностью). Требуется для любой пары s и t центров сети найти наиболее надежный (s, t)-путь обмена информацией.
Такой сети естественно сопоставить неориентированный взве­шенный граф: вершины – центры, ребра – каналы сети, веса ребер – надежность каналов. Если каждое ребро «расщепить» на две дуги про­тивоположной ориентации
и придать им вес «расщепляемого» ребра, то получим взвешенный орграф. Надежность всякого (s, t)-пути в этом орграфе определяется формулой
Ρ(s, t) = p
,
ij
где произведение берется по всем тем дугам, которые образуют (s, t)-путь. Здесь предполагается, что отказы каналов не зависят друг от друга.
Задача нахождения наиболее надежного (s, t)-пути сводится к задаче о кратчайшем (s, t)-пути с матрицей весов Q = {q рая получается из исходной матрицы весов W = {p
ij
}, кото-
ij
} следующим
образом:
86
<
=
q
ji
ji
pp
jiji
==
njip
,10 если,log
).,...,1,( 0 если,
Действительно, логарифмирование обеих частей вышеуказан­ной формулы надежности (s, t)-пути приводит к соотношению
log Ρ(s, t) =
log p
= – qij,
ij
где суммирование берется по всем дугам, которые образуют (s, t)-путь. Учитывая, что 0 < p
1, имеем q
ij
0 (i, j = 1, …, n).
ij
Исходные данные: граф, заданный матрицей весов (вероятно­стей безотказной работы); s и t – номера вершин графа.
Результаты: наиболее надежный (s, t)-путь.
Рекомендация. Использовать алгоритм Флойда.
Разработанную программу применить для нахождения наиболее надежного (s, t)-пути в графе, изображенном на рис. 6.5 (см. задание 6). Учесть, что
вероятности pij указаны на рис. 6.5 в процентах.
Система двусторонних дорог. Задана система двусторонних
дорог, соединяющих между собой n городов. Всякая дорога, непо­средственно связывающая город i с городом j, характеризуется дли­ной w
. Очевидно, что такой системе дорог соответствует неориенти-
ij
рованный взвешенный граф: вершины – города, ребра – дороги, веса ребер – длины дорог. Если граф связен, то для любой пары городов s и t всегда существует хотя бы один (s, t)-путь, т. е. город t достижим из города s.
Требуется найти:
столицу, т. е
. такой город, для которого сумма расстояний до
остальных городов минимальна (под расстоянием между дву­мя городами понимается длина кратчайшего пути, соединяю­щего эти города);
– кратчайшие пути движения от столицы до всех других горо-
дов;
K-периферию для заданного целого числа K (K-периферией
называется множество городов, расстояния от которых
до
столицы больше K км).
87
Если каждое ребро графа «расщепить» на две дуги противопо­ложной направленности и придать им вес «расщепляемого» ребра, то получим взвешенный орграф. Применив к орграфу алгоритм Дейкстры и построив для каждой вершины дерево кратчайших путей, можно дать ответы на все сформулированные ранее задачи. Однако гораздо проще здесь воспользоваться алгоритмом Флойда.
Исходные
данные: связный граф, заданный матрицей весов дуг
(длин дорог), число Kрасстояние для выделения периферии.
Результаты: номер вершины, которая является столицей; спи­сок дуг, образующих дерево кратчайших путей с корнем в столице; номера вершин, входящих в K-периферию.
Рекомендация. Решить задачу с помощью алгоритма Флойда.
Расчеты выполнить для графа с рис. 6.5 (см. задание 6). Веса ре­бер этого графа – длины дорог.
Плотная система двусторонних дорог. Этой системе дорог со-
ответствует взвешенный мультиграф, который отличается от графа тем, что в нем одна и та же пара различных вершин может быть связа­на более чем одним ребром. Такие ребра называются кратными. Каж­дое из кратных ребер, связывающих вершины i и j, имеет свой собст­венный вес. В
таком мультиграфе: вершины – города, ребра – дороги,
веса ребер – длины дорог.
Требуется для заданной пары городов найти кратчайший путь ме­жду ними (с точностью до дорог, через которые проходит этот путь).
Для решения задачи необходимо вначале мультиграф преобра­зовать в обыкновенный граф, а затем последний – в орграф «расщеп­лением» каждого ребра на две дуги противоположной направленности.
Пусть в мультиграфе G = (V, E), V = {1, .., n}, имеются два кратных ребра е
= {i, j} и e2 = {i, j} с весами w
1
1
и w
ij
2
соответст-
ij
венно. Устранить кратность этих ребер, т. е. научиться их различать, можно путем установки на кратных ребрах двух фиктивных вершин. Например, так, как это указано на рис. 7.16. Фиктивные вершины иг­рают роль промежуточных населенных пунктов, через которые прохо­дят дороги, связывающие одну и ту же пару городов. Очевидно, что
преобразование не влияет на длины кратчайших путей и позво-
такое ляет однозначно идентифицировать кратные ребра. Однако оно увели­чивает число вершин, т. е. размерность задачи.
88
j
j
j
j
j
j
1
i
w
i
2
w
i
j
1
w
i
i
w
/ 2
2
i
1
1
w
/ 2
i
j
2
j
/ 2
i
w
/ 2
1
i
Рис. 7.16
Исходные данные: связный мультиграф, заданный перечнем ребер с указанием веса каждого ребра; s и t – номера вершин мультиграфа.
Результаты: длина кратчайшего (s, t)-пути и сам это путь, включая фиктивные вершины (промежуточные населенные пункты). Именно фиктивные вершины уточняют, по каким дорогам проходит кратчайший путь.
Рекомендация. По перечню ребер необходимо сформировать матрицу весов, вводя фиктивные вершины для кратных ребер. Для поиска кратчайших путей использовать алгоритм Дейкстры.
Разработанную программу применить для графа, изображенного на рис. 7.17.
2
(10) (8)
1
(5)
(7)
(12)
(10)
(9)
(8)
3
(7)
(4)
5
(3)
4
(2)
(4)
6
Рис. 7.17
Две системы двусторонних дорог. Заданы две системы дву-
сторонних дорог (железных и шоссейных) с одним и тем же множест­вом городов V = {1, ..., n}. Система железных дорог описывается не­ориентированным графом G а система шоссейных дорог неориентированным графом G с матрицей весов Q = {q
= (V, E1) с матрицей весов P = {pij},
1
= (V, E2)
2
}. Здесь вершиныгорода, ребрадороги,
ij
веса ребер – длины дорог.
Требуется найти кратчайший путь из города s в город t, кото­рый может проходить как по железным, так и по шоссейным дорогам. Кроме того, необходимо указать города, определяющие места переса­док с одного транспорта на другой вдоль этого пути.
89
Данную задачу можно решать различными способами. Напри­мер, она может быть решена с использованием алгоритмов Дейкстры с матрицей весов W = {w
}, которая определяется по правилу:
ij
= min {pij, qij}, (i, j = 1, ..., n).
w
ij
Примечательно, что для неориентированных графов G
и G2 матри-
1
цы весов симметричны, т. е. в них фактически реализовано «расщеп­ление» каждого ребра на две дуги противоположной направленности.
Для определения мест пересадок требуется формировать вспо­могательную матрицу Z = {z
если p
иначе z
< qij, то z
ij
= 1 (дуга (i, j) соответствует шоссейной дороге).
ij
} следующим образом:
ij
= 0 (дуга (i, j) отвечает железной дороге);
ij
Исходные данные: два связных графа, заданных своими матри­цами весов P и Q; s и t – номера вершин, между которыми следует найти кратчайший путь.
Результаты: длина кратчайшего (s, t)-пути и сам этот путь, включая номера вершин, которые задают места пересадок.
Рекомендация. Использовать алгоритм
Дейкстры.
Разработанную программу применить для систем дорог, изо­браженных в виде одного графа с двумя типами ребер (рис. 7.18). Тем­ные ребра – железные дороги, светлые ребра – шоссейные дороги.
(1)
1
(7)
(1)
(5)
2
(10)
(7)
(4)
(6)
3
(1)
6
(3)
5
(1)
(10)
(5)
4
(3)
(5)
(10)
(3)
7
(2)
(1)
8
(10)
9
Рис. 7.18
Система односторонних дорог. Задана система односторонних
дорог, соединяющих между собой n городов. Всякая дорога, идущая из города i в город j, характеризуется длиной w
. Очевидно, что та-
ij
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]