Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комбинаторные алгоритмы. Множества, графы, коды. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
Пример 3.4. При
n = 4 результаты работы алгоритма 3.2 при-
ведены в табл. 3.2.
Таблица 3.2
п/п
1
2
3
4
5
6
7
8
9
10
11
12
Перестановка i j
п/п
1234
1243
1324
1342
1423
1432
2134
2143
2314
2341
2413
2431
3
4
2
4
3
4
2
3
3
4
1
4
3
4
2
4
3
4
2
3
3
4
1
3
Перестановка i j
13
14
15
16
17
18
19
20
21
22
23
24
3124
3142
3214
3241
3412
3421
4123
4132
4213
4231
4312
4321
3
4
2
4
3
4
2
3
3
4
1
2
3
4
2
4
3
4
2
3
3
4
Замечание. Перечисление размещений из
n элементов по k все-
гда можно выполнить, комбинируя алгоритмы 3.1 и 3.2: вначале полу­чить текущее сочетание из продуцировать из него
n по k с помощью алгоритма 3.1, а затем
k! различных перестановок по алгоритму 3.2 и
далее снова к следующему сочетанию. Конечно, такая процедура не гарантирует лексикографического порядка перечисления размещений.

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

3.4.1. Изучить алгоритмы 3.13.3 и оценить их вычислительную
сложность.
3.4.2. Реализовать алгоритмы 3.1, 3.2 в виде процедур. Каждую из
процедур оформить так, чтобы, с одной стороны, ее можно было авто­номно тестировать, а с другой – применять в других процедурах и про­граммах. Для тестирования процедур использовать примеры 3.1–3.4.
31
3.4.3. Разработать и отладить программу решения комбинатор-
ной задачи аналитической геометрии из табл. 3.3 согласно номеру ва­рианта задания. Для этого предварительно требуется:
– формализовать постановку задачи, используя формулы опре-
деления основных объектов аналитической геометрии;
– найти и учесть условия, при которых задача не имеет реше-
ния;
– разработать алгоритм решения задачи, используя
алгоритм 3.1 генерации сочетаний. Оценить теоретическую сложность ал­горитма по времени и памяти;
– определить форму представления в программе исходных дан-
ных задачи (см. рекомендации в прил. 2);
– разработать контрольные примеры для проверки правильности
работы программы (см. рекомендации в прил. 2).
3.4.4. Разработать и отладить программу решения квадратичной
задачи о назначениях. При разработке программы
использовать алго­ритм 3.2 генерации перестановок. Программа должна осуществлять поиск точного решения задачи путем перечисления и анализа всех раз­личных перестановок. Ограничение на множество допустимых реше­ний определяется номером варианта задания (табл. 3.4). Контрольные примеры для проверки правильности работы программы выбрать са­мостоятельно, используя пример 3.5.

3.5. Варианты

Квадратичная задача о назначениях [10, 20]. Пусть имеется множество городов которые можно построить в этих городах, по одному заводу в каждом городе. Мощности обоих множеств равны
Известна ( перевозки одной тонны груза из любого города в любой другой. При
с
этом
= 0 и сij > 0 для всех j i (i, j = 1, …, n).
ii
Задана также ( мые объемы перевозок между различными двумя заводами. Здесь и
vij > 0 для всех j i (i, j = 1, …, n).
М = {1, …, n} и множество заводов P = {1, …, n},
n = | М
| = |
|.
Р
n × n)-матрица C = {с
n × n)-матрица V = {v
}, определяющая стоимость
ij
}, отражающая необходи-
ij
v
ii
= 0
32
Таблица 3.3
Номер
Комбинаторная задача аналитической геометрии
варианта
1 Множество точек на плоскости называется регулярным,
если вместе с каждой парой различных точек оно содер­жит также еще одну – третью вершину правильного тре­угольника с вершинами в этих точках. Определить, ре­гулярно ли заданное множество точек
2 Задано множество точек на плоскости. Выбрать из него
такие три точки, которые не лежат на одной прямой и составляют треугольник наименьшей площади
3
На плоскости заданы множество точек Найти все различные тройки точек четырехугольник
с вершинами из {a, b, c, d} образует
a, b, c из Х такие, что
Х и точка d
X.
параллелограмм
4 Задано множество точек на плоскости. Выбрать из них
четыре разные точки, которые являются вершинами квадрата наибольшего периметра
5 Даны два множества точек на плоскости. Выбрать такие
три различные точки первого множества, чтобы они не лежали на одной прямой, а треугольник с вершинами в этих точках накрывал (содержал строго внутри себя) все точки второго множества
6 Задано множество точек на плоскости. Выбрать из них
четыре разные точки, не лежащие на одной прямой и образующие ромб наибольшей площади
Требуется определить, как выгоднее всего разместить заводы для минимизации затрат на перевозки. Другими словами, при задан­ных матрицах жение
f: М P, для которого достигается минимум суммы
C и V необходимо найти взаимно однозначное отобра-
n
n
∑∑
1
==
i
j
=
vcS
ij
1
.
)()(
jfif
33
При такой формулировке допустимым решением задачи являет­ся любая подстановка (рис. 3.1).
1 2 …
i n
f(1) f(2) … f(i) … f(n)
Последовательность городов из
М
Последовательность заводов из
P
Рис. 3.1
Между тем возможны ограничения на строительство некоторых заводов в тех или иных городах. Такие ограничения удобно задавать матрицей запрещенных назначений
=
a
ji
Матрица
A ограничивает множество допустимых решений, среди ко-
A = {a
}, где
ij
=
, городе в строить нельзя завод если,1
ji
).,...,1,( случае противном в0
nji
торых необходимо найти оптимальное решение задачи.
Несмотря на простую формулировку, найти точное решение квадратичной задачи о назначениях не удается уже при
n = 15, по-
скольку его поиск сводится к полному перебору всех допустимых ре­шений [10, 20] и требует очень много времени. Эта задача интересна возможностью применения при ее решении алгоритма генерации пере­становок.
Пример 3.5. Пусть n = 3 и матрицы C, V имеют вид, указанный на рис. 3.2, 3.3. Здесь матрицы
C и V симметричные, хотя в общем слу-
чае это необязательно. Существуют ограничения на размещение заво­дов по городам в виде матрицы
A (рис. 3.4).
210
⎛ ⎜
=
C
⎜ ⎜
⎞ ⎟
301
⎟ ⎟
032
⎛ ⎜
=
V
⎜ ⎜
650
⎞ ⎟
305
⎟ ⎟
036
⎛ ⎜
=
A
⎜ ⎜
001
⎞ ⎟
010
⎟ ⎟
100
Рис. 3.2 Рис. 3.3 Рис. 3.4
34
Согласно матрице
А из 3! = 6 всех возможных подстановок
1
⎛ ⎜
=P
1
⎜ ⎝
1
⎛ ⎜
=P
4
2
⎞ ⎟
,
33221
2
⎞ ⎟
,
133
⎛ ⎜
=P
2
⎜ ⎝
=P
5
33211
⎞ ⎟
,
2
312
1
⎛ ⎜
3
⎞ ⎟
,
2
1
⎛ ⎜
=P
3
⎜ ⎝
P
=
6
312
⎞ ⎟
,
3
2
1
⎛ ⎜
⎜ ⎝
⎞ ⎟
13223
допустимыми решениями задачи являются лишь подстановки Они соответствуют полным беспорядкам, т. е. для них при всех 3 верно:
Таким образом, подстановка
f(i) i.
Вычислим для
S(Р
) = (с
4
11
с
· v
31
) = (c
5
c
31
· v
12
+ с
11
23
+ (
S(Р
+ (
· v
· v
+ c
32
22
33
32
· v
+ с
+ c
· v
P
и Р
суммы затрат на перевозки:
5
+ с
· v21) + (с
23
13
· v11) = (3 + 10) + (3 + 18) + (10 + 18) = 62;
33
+ c
· v32) + (c
31
13
· v22) = (6 + 6) + (6 + 15) + (6 + 15) = 54.
33
Р
дает наиболее выгодный вариант раз-
5
21
21
· v
· v
32
13
+ с
+ c
22
22
· v
· v
13
12
+ с
12
21
4
· v
· v
+ c
33
11
+ с
+ c
· v31) +
23
· v12) +
23
мещения заводов.
Таблица 3.4
Матрица
A Матрица A
P
и Р5.
4
i = 1, 2,
12 n...
1
1
1
2
...
n
12 n...
1
1
1
1
1
0
0
1
1
1
1
1
4
2
...
n
0
1
1
1
1
1
1
1
1
1
1
0
35
Матрица
A Матрица A
12 n...
1
1
2
2
...
1
n
12 n...
1
1
3
1
2
...
1
n
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
0
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
5
6
1
2
...
n
1
2
...
n
12 n...
0
1
1
1
1
1
1
1
1
1
1
12 n...
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
0
Замечание. В табл. 3.4 числами 16 обозначены номера вариан­тов. В указанных матрицах
A запрещенные позиции выделены едини-
цами. Нулевые позиции считаются разрешенными.
1
1
1
1
1
36
ГЛАВА 2

АЛГОРИТМЫ НА ГРАФАХ

ЗАДАНИЕ 4
Графы: представления и операции
Теория графов, обладая стройной системой понятий и обозначе­ний, является продуктивным средством моделирования систем и про­цессов информационного характера. Из всех разделов дискретной ма­тематики именно графы и особенно алгоритмы на графах широко при­меняются в программировании. В задании вводится язык теории графов [16], излагаются способы машинного представления графов. Цель задания: преобразования одного способа представления графа в другой.

4.1. Основные понятия и обозначения

Пусть V – непустое конечное множество, V его двухэлементных подмножеств. Пара G = (V, E), где E – произволь­ное подмножество множества V
тированным графом). Граф G = (V, E) конструируется из элементов
конечного множества V, поэтому он является комбинаторным объек­том.
Элементы множества V принято называть вершинами, а элемен­ты множества Eребрами графа G = (V, E). В свою очередь, вершины и ребра – элементы этого графа. Число | его порядком. Если |
(n, m)-графом.
Две вершины графа
смежны
u и v называются его концами. Два ребра смежны, если они
ны имеют общий конец.
практика программирования операций над графами и
(2)
множество всех
(2)
, называется графом (или неориен-
| вершин графа называется
V
| = n и |
V
в противном случае. Если е = {u, v} – ребро графа, то верши-
|= m, то граф G = (V, E) называется
E
u и v смежны, когда е = {u, v} Е, и не
37
Вершину концом ребра
v и ребро е называют инцидентными, если v является
е, и неинцидентными в противном случае. Таким обра-
зом, смежность есть отношение между однородными элементами гра­фа, тогда как инцидентность является отношением между разнород­ными элементами.
Множество всех вершин графа, смежных с некоторой вершиной
v, называется окрестностью вершины v и обозначается N(v). Степе­нью вершины
v графа называется число инцидентных ей ребер, т е. число вершин, образующих ее окрестность. Степень вершины обозна­чается считается Список степеней вершин графа называется его
тельностью
d(v) (или deg v). Тем самым d(v) = | N(v) |. Вершина степени 0
изолированной, степени 1 – висячей.
степенной последова-
. Пусть d1, …, dn – степени вершины графа порядка n, вы-
писанные в порядке неубывания:
d
d2 ≤ dn.
1
d
Упорядоченный набор (
графа G и обозначается d(G).
ней
Маршрутом (или (v
, …, dn) называется вектором степе-
1
, v
)-маршрутом) в графе называется че-
1
k + 1
редующаяся последовательность вершин и ребер
v
, e1, v2, e2, v3, …, ek, v
1
в которой любые два соседних элемента инцидентны. Если то маршрут маршрут называется личны, то маршрут называется вается циклов
замкнут (или цикличен). Если все ребра различны, то
цепью. Если все вершины (а значит, и ребра) раз-
простой цепью. Замкнутая цепь назы-
циклом, замкнутая простая цепь – простым циклом. Граф без
является ациклическим (или лесом). Длина маршрута (цикла)
k + 1
,
v
= v
1
k + 1
определяется числом составляющих его ребер.
Две вершины в графе считаются
связными, если существует со-
единяющая их простая цепь. Граф, в котором любые две вершины связные, называется
G' = (V', E') называется подграфом графа G = (V, E), если
Граф
связным.
V' V и E' E. Всякий максимальный (по числу вершин и ребер)
связный подграф графа
G называется его компонентой связности.
Число компонент связности графа G обозначается через k(G). Если
k(G) = 1, то Gсвязный граф. Если k(G) > 1, то Gнесвязный граф.
,
38
Графы принято изображать в виде рисунков, состоящих из то­чек и линий. При этом точки соответствуют вершинам графа, а соеди­няющие пары точек линии – ребрам.
Граф, состоящий из одной вершины, называется Граф является берный граф порядка
безреберным, если в нем нет ребер, т. е. Е = . Безре-
n обозначается O
n
если любые две его вершины смежны, т. е.
n обозначается K
рядка
. Граф называется двудольным, если существу-
n
. Граф называется полным,
Е = V
тривиальным.
(2)
. Полный граф по-
ет такое разбиение множества его вершин на две части (доли), что концы каждого ребра принадлежат разным долям.
Граф считается приписано вещественное число
Граф порядка своены некоторые метки, например, номера от 1 до
взвешенным, если каждому его ребру е Е
w(е) – вес ребра.
n является помеченным, если его вершинам при-
n. Подобным обра-
зом можно пометить ребра графа.
Пример 4.1. Граф
G, изображенный на рис. 4.1, является связ-
ным двудольным графом, поскольку он состоит из одной компоненты связности и множество его вершин доли
V
= {1, 3}, V2 = {2, 4} так, что V1 V2 = V, V1 V2 = и концы
1
V = {1, 2, 3, 4} разбивается на две
каждого ребра принадлежат разным долям. Кроме того, для вершин данного графа имеем:
d(1) = 2, d(2) = 2, d(3) = 1, d(4) = 1.
Исходя из этого графу
G соответствует вектор степеней
d(G) = (1, 1, 2, 2).
В графе стой цепью: 3,
G нет циклов, а вершины с номерами 3 и 4 соединены про-
е
, 2, е2, 1, е3, 4.
1

4.2. Отношения и операции

Над помеченными графами определены отношения равенства, включения и некоторые операции, такие как дополнение, объединение графов, удаление элементов графа.
G
Два графа (обозначается G1 = G2), если V1 = V2 и E1 = E2.
= (V1, E1) и G2 = (V2, E2) называются равными
1
39
G
Граф
G
G2), если G1 – подграф графа G2, т. е. V1 V2 и E1 E2. При
1
V
= V2 и E1 E2 граф G1 называется остовным подграфом графа G2.
1
Дополнением графа G = (V, E) называется граф G = (V, V
Другими словами, граф
= (V1, E1) вложен в граф G2 = (V2, E2) (обозначается
1
(2)
\ E).
G
имеет то же множество вершин, что и граф
G, и любые две несовпадающие вершины смежны в G тогда и только
тогда, когда они не смежны в
Объединением графов G
граф
G
G2 = G(V, E), для которого V = V1 V2, E = E
1
динение
G
G2 называется дизъюнктным, если V1 V2 = .
1
Ясно, что при
G = G
G.
= (V1, E1) и G2 = (V2, E2) называется
1
E
1
G
всегда G1 G и G2 G.
1
2
. Объе-
2
Пример 4.2.
Очевидно, что
2
На рис. 4.1 показан граф G и его дополнение
G
G
= K4.
e1
3
2
G
3
e
2
1 4
e3 G
Рис. 4.1
1 4
G
.
Удаление вершины v
V из графа G = (V, E) приводит к графу
G – v, содержащему все вершины графа G, за исключением v, и все
ребра графа максимальным подграфом графа
G, не инцидентные v. Таким образом, граф G – v является
G, который не включает вершину v.
Удаление ребра e E из графа G = (V, E) приводит к остов-
ному подграфу
e.
ем
Пусть К графу
Н добавим новую вершину v*, соединив ее ребром с каждой
вершиной из ется из
G отождествлением (или слиянием) вершин u и v.
G – e, содержащему все ребра графа G, за исключени-
u и v – две вершины графа G. Пусть также H = G – u – v.
N(u) N(v). Таким образом, построенный граф получа-
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]