Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Комбинаторные алгоритмы. Множества, графы, коды. Учебное пособие.pdf
X
- •ПРЕДИСЛОВИЕ
- •1.1. Основные понятия и обозначения
- •1.2. Битовая шкала множества
- •2.3. Бинарные коды Грея
- •2.4. Порядок выполнения задания
- •1.4. Отношения над множествами
- •1.5. Расстояние между множествами
- •1.6. Порядок выполнения задания
- •1.7. Варианты
- •2.1. Формулировка задачи
- •2.2. Счет в двоичной системе счисления
- •2.5. Варианты
- •3.1. Определение комбинаторных объектов
- •3.2. Генерация сочетаний
- •3.3. Генерация перестановок
- •3.4. Порядок выполнения задания
- •3.5. Варианты
- •ГЛАВА 2. АЛГОРИТМЫ НА ГРАФАХ
- •4.1. Основные понятия и обозначения
- •4.2. Отношения и операции
- •4.3. Родственные графам объекты
- •4.4. Способы машинного представления
- •4.5. Порядок выполнения задания
- •4.6. Варианты
- •5.1. Обход вершин графа в глубину или ширину
- •5.2. Базовые задачи на графах
- •5.3. Порядок выполнения задания
- •5.4. Варианты
- •6.1. Формулировка задачи
- •6.2. Алгоритм Краскала
- •6.3. Алгоритм Прима
- •6.4. Некоторые замечания
- •6.5. Порядок выполнения задания
- •6.6. Варианты
- •7.1. Формулировка задачи
- •7.5. Кратчайшие контуры и транзитивное замыкание
- •7.6. Порядок выполнения задания
- •7.7. Варианты
- •ГЛАВА 3. АЛФАВИТНОЕ КОДИРОВАНИЕ
- •8.1. Основные понятия и обозначения
- •8.2. Формулировка задачи
- •8.3. Критерии однозначного декодирования
- •8.4. Порядок выполнения задания
- •8.5. Варианты
- •9.1. Средняя длина элементарного кода
- •9.2. Формулировка задачи
- •9.3. Свойства оптимальных кодов
- •9.4. Алгоритм Хаффмена
- •9.5. Сжатие текстов
- •9.6. Порядок выполнения задания
- •9.7. Варианты
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК
- •АЛФАВИТНЫЙ УКАЗАТЕЛЬ
- •ОГЛАВЛЕНИЕ

Пример 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.1−3.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 числами 1−6 обозначены номера вариантов. В указанных матрицах
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
