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

2.5. Варианты

Согласно табл. 2.3 вариант задания определяет номер алгорит-
ма, генерирующего все тимизационной задачи, которую требуется решить. Каждая из предла­гаемых оптимизационных задач является NP-трудной и может быть сформулирована как задача целочисленного линейного программиро­вания с двоичными (или булевыми) переменными [10, 20]. Одним из методов, возможно, не самым лучшим, решения NP-трудных задач является метод исчерпывающего поиска полный можных наборов значений двоичных переменных и выбор среди них тех, которые обладают требуемым свойством в наибольшей или наи­меньшей степени. Именно так следует решать задачу, указанную в варианте задания. Для организации исчерпывающего поиска необхо­димо использовать разработанную процедуру генерации двоичных векторов.
Номер варианта Номер алгоритма Название задачи
1 2.1 Задача размещения баз
2 2.2 Задача выбора проектов
3 2.3 Задача о доставке
n-разрядные двоичные вектора, и название оп-
перебор всех воз-
Таблица 2.3
4 2.1 Задача о доставке
5 2.3 Задача выбора проектов
6 2.2 Задача размещения баз
Задача размещения баз. Некоторая территория разделена на
n районов. Предполагается, что военная база, расположенная в каком-
то районе, может контролировать не только этот район, но и соседние, граничащие с ним районы. Каждый район характеризуется определен­ными убытками, связанными с расположением в нем военной базы. Требуется найти такие места размещения военных баз, чтобы суммар­ные убытки были минимальные и вся территория была под контролем.
21
Формализуем постановку задачи. Пусть ci – размер убытков,
связанных с размещением военной базы в районе i, и A = {aij} – мат­рица, отражающая отношение соседства между районами территории:
, районом с граничит район если,1
=
a
ji
=
ji
).,...,1,( случае противном в0
nji
Введем двоичные переменные:
, районе в размещена база военная если,1
=
x
j
=
nj
j
).,...,1( случае противном в0
Требуется найти значения переменных x1, …, xn, при которых
минимизируются суммарные убытки
j
n
=
xc
jj
1
и выполняются условия
n
1
j
jj
n
==
11
j
xaxa
.1...,,1
jjn
Если c1 = c2 = … = cn = l, то рассматриваемая задача сводится
к отысканию наименьшего числа военных баз, способных контролиро­вать всю территорию, и мест размещения этих баз.
Пример 2.4. Пусть некоторая территория разделена на районы,
которым присвоены номера 1, 2, ..., 9 (рис. 2.1). Тогда матрица А, от­ражающая отношение соседства между районами этой территории, имеет вид, указанный на рис. 2.2.
Рис. 2.1
22
000001011
⎛ ⎜
⎜ ⎜ ⎜
=
А
⎜ ⎜ ⎜ ⎜ ⎜
Рис. 2.2
При c1 = c2 = … = c9 = 1 военные базы можно разместить в рай­онах с номерами {1, 6, 7}. Существуют и другие оптимальные решения. Минимальное число баз, контролирующих всю территорию, неизменно равно 3.
Задача выбора проектов. Имеются n проектов S = {s1, ..., sn} и
m ресурсов R = {r
во ресурсов Ri R, необходимых для его реализации. Считается, что всякий проект может быть реализован за один и тот же промежуток времени. Если два различных проекта si, s же ресурс rk Ri R но. Требуется найти в S = {s1, ..., sn} максимальное (по включению) множество независимых проектов, т. е. таких проектов, которые могут выполняться одновременно.
Пусть матрица A = {aij} отражает отношение «проект-ресурс»:
, ..., rm}. Для каждого проекта s
1
S используют один и тот
j
≠ ∅, то они не могут выполняться одновремен-
j
⎞ ⎟
000010111
000100110
001011001
010111010
⎟ ⎟
100110100
011001000
111010000
110100000
S задано множест-
i
, ресурс использует проект если,1
Заметим, что строки этой матрицы являются битовыми шкалами для
R
R (i = l, ..., n), а R играет роль универсального множества.
i
Определим двоичные переменные:
=
a
ji
23
s
i
=
=
x
i
rs
ji
==
, проект выбран если,1
ni
).,...,1;,...,1( случае противном в0
mjni
).,...,1( случае противном в0
Тогда задачу выбора проектов можно выразить так: найти значе-
x
ния переменных
, …, xn, при которых достигается максимум суммы
1
n
x
i
i
=
1
и выполняются условия
R
Rk = ∅,
i
для любых 1
i < k n, при которых x
= xk = 1. Эти условия отража-
i
ют требования независимости выбранных проектов.
Пример 2.5. Пусть S = {s1, s2, s3, s4, s5}, R = {r1, r2, r3, r4}. По­требность проектов в ресурсах описывает матрица рис. 2.3. Здесь максимальные множества независимых проектов: {
s
}, {s2, s3, s5}.
4
1111
⎛ ⎜
=
А
⎜ ⎜
⎜ ⎝
⎞ ⎟
0010
0100
1000
⎟ ⎟
1001
A, приведенная на
s
, s3,
2
Рис. 2.3
Задача о доставке. Заданы
n клиентов и m маршрутов. Фирма
каждый день доставляет клиентам товары на грузовых машинах, кото­рые передвигаются по заданным маршрутам. Любой маршрут требует в течение дня одного транспортного средства и характеризуется опреде­ленными затратами, например, стоимостью расходуемого топлива. Для каждого маршрута известны клиенты, которые могут быть обслужены при движении транспортного средства по этому маршруту.
Цель состоит в том, чтобы найти такое множество маршрутов, которое позволяет об­служить с минимальными затратами всех клиентов, причем каждого клиента только один раз в день, т. е. с помощью одного маршрута.
Введем двоичные переменные:
=
x
j
j
=
,маршрут выбран если,1
mj
).,...,1( случае противном в0
24
Пусть стоимость затрат, связанных с маршрутом
матрица
a
A = {a
ji
} отражает отношение «клиент-маршрут»:
ij
=
⎨ ⎩
j, равна c
, маршрутом тсяобслуживае клиент если,1
ji
==
).,...,1;,...,1( случае противном в0
mjni
, и
j
Необходимо найти значения двоичных переменных
x
, …, xm,
1
при которых достигается минимум суммарных затрат
j
m
=
xc
jj
1
и выполняются условия
m
xaxa
==
11
j
==
.1...,,1
jjn
Если
m
1
j
c
= c2 = ... = cm = l, то задача сводится к поиску наимень-
1
jj
шего числа маршрутов, позволяющих обслуживать каждого клиента один раз в день.
Пример 2.6. Пусть число клиентов равно 5, а число маршрутов
равно 4. Матрица
A, описывающая отношение «клиент-маршрут»,
приведена на рис. 2.4.
0101
⎛ ⎜
=
А
⎜ ⎜
⎜ ⎝
Рис. 2.4 Рис. 2.5
⎞ ⎟
1110
0101
1010
⎟ ⎟
0001
⎛ ⎜
=
А
⎜ ⎜
⎜ ⎝
1111
⎞ ⎟
1100
0011
1100
⎟ ⎟
0011
Если с1 = 15, с2 = 15, с3 = 20, с4 = 10, то множество маршрутов
{1, 4} – оптимальное решение задачи о доставке. Поскольку в
A вто-
рой и четвертый столбцы совпадают, то существует и другое опти­мальное решение {1, 2}. Однако если матрицу указано на рис. 2.5, то задача о доставке не имеет решения.
А изменить так, как
25
ЗАДАНИЕ 3
=⋅−
=
−====
Пересчет и перечисление сочетаний
и перестановок
Цель задания: изучение формул пересчета и алгоритмов пере­числения таких простейших комбинаторных объектов, как сочетания и перестановки. Из большого числа известных алгоритмов взяты для рассмотрения только те, которые генерируют комбинаторные объекты в лексикографическом порядке.

3.1. Определение комбинаторных объектов

Пусть Х = {х1, ..., xn} некоторое конечное множество.
Размещением элементов из Х по k (или из n по k) называется упо-
рядоченное подмножество из
A(n, k) различных размещений из n по k при 1 ≤ kn равно
Число
k элементов, принадлежащих Х (1 k n).
!
n
)1(...)1(),(
knnnknA
=+=
.
)!(
kn
Считают, что
Перестановка из n элементов – частный случай размещения при k = n. Поэтому число P(n) различных перестановок из n элементов равно
Полагают, что
Сочетанием элементов из Х по k (или из n по k) называется не-
упорядоченное подмножество из четание отличается от размещения тем, что в нем не учитывается по­рядок элементов. Поэтому каждому сочетанию соответствует мещений. Отсюда следует формула для числа
n элементов по k (1 ≤ kn):
Из этой формулы вытекает справедливость равенств:
A(0, 0) = А(n, 0) = 1 и A(n, k) = 0, если k > n.
!12...)1()( nnnnP
P(0) = 0! = 1.
k элементов, принадлежащих Х. Со-
C(n, k) сочетаний из
),(
),(
knC
knA
!
k
26
!
n
==
.
)!(!
knk
).,(),(,1),()0,()0,0( knnCknCnnCnCC
k! раз-
C(n, k) = 0 при k > n.
A(n, k), P(n), P(n, k) называются комбинаторными
числами
Считают, что
Величины
. Формулы их вычисления позволяют пересчитать соответст-
вующие комбинаторные объекты.

3.2. Генерация сочетаний

Во многих практических задачах возникает необходимость пе­речислить все различные комбинаторные объекты и выбрать из них те, которые удовлетворяют заданным условиям. Иногда требуется сре­ди всех различных комбинаторных объектов найти такой, который доставляет максимум (минимум) некоторой целевой функции. Реше­ние подобных задач базируется на алгоритмах генерации комбинатор­ных объектов, которых известно достаточно много [5, 12, 17]. Выбран­ные для изучения и анализа алгоритмы конструируют сочетания и пе­рестановки в лексикографическом порядке.
Без ограничения общности можно принять каждому сочетанию из жества
Х, взаимно однозначно соответствует вектор, состоящий из k
n по k, т. е. k-элементному подмножеству мно-
разрядов, упорядоченных в порядке возрастания. Например, подмно­жеству {4, 6, 1} соответствует вектор (1, 4, 6).
Наиболее естественным порядком перечисления таких векторов является лексикографический порядок. Его называют лексикографиче­ским потому, что он лежит в основе упорядочения слов в словаре. На­пример, слово ском алфавите буква словом
лето. Хотя первые две буквы этих слов совпадают, третья бук-
ва слова
лес в словаре стоит перед словом шалаш, так как в рус-
л стоит перед буквой ш. Слово лес стоит перед
лес стоит в алфавите перед третьей буквой слова лето. Точно
так же число 135 предшествует числу 145.
Рассмотрим два вектора с элементами из линейно упорядочен­ного множества
Х = {1, …, n}:
Х = {1, …, n}. Тогда
А = (а
В = (b
Считается, что вектор
A лексикографически предшествует вектору B,
если выполнено одно из условий:
, …, аm),
1
, …, bk).
1
27
a
< b1;
1
a
= b
для всех 1 ≤ i j и а
i
i
a
= bi для всех 1 i m и m < k.
i
j + 1
< b
j + 1
;
Пример 3.1. Для
Х = {1, 2, 3, 4, 5} и k = 3 существует
!5
)3,5( ==C
10
!2!3
сочетаний, которые образуют следующую лексикографическую после­довательность векторов:
(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5),
(1, 4, 5), (2, 3, 4), (2, 3, 5), (2, 4, 5), (3, 4, 5).
Алгоритм генерации всех
k-элементных подмножеств в лекси-
кографическом порядке основан на следующем наблюдении: за векто-
а
ром (
Надо отметить, что векторе ( значение
множества
, …, аk) непосредственно следует вектор
1
(
а
, …, а
1
, ар + 1, ар + 2, …, ар + kp + 1),
p 1
р = max {i | a
< n k + i}.
i
р – номер первого слева изменяемого разряда в
а
, …, аk), а величина (n k + i) – максимально возможное
1
i-го разряда этого вектора (1 ≤ ik, 1 ≤ kn).
В алгоритме 3.1
k-элементные подмножества n-элементного
X = {1, …, n} формируются в одномерном массиве
A = (A[1], …, A[k]). Исходными данными являются величины n и k, где
k n.
1
Начинается генерация с вектора
A = (1, …, k). Каждый следую-
щий вектор получается из предыдущего изменением разрядов в «хво­сте» вектора на идущие подряд целые числа, но так, чтобы последний разряд не превосходил
n, а первый изменяемый разряд был на 1 боль-
ше, чем соответствующий разряд в предыдущем векторе.
Алгоритм 3.1. Генерация k-элементных подмножеств
n-элементного множества
1. В качестве начального взять вектор A = (1, …, k), т. е. для вся­кого i = 1, ..., k выполнить присваивание A[i]:= i.
28
2. Положить p:= k, где pномер первого изменяемого разряда.
3. Вывести текущее значение А.
4. Если A[k] = n, то последний разряд увеличивать нельзя, поэтому следует положить p:= p – 1. В противном случае p:= k.
5. Если p 1, то выполнить изменение разрядов в «хвосте» векто­ра для каждого i = k, k – 1, …, p следующим образом:
A[i]:= A[p] + i – p + 1
и вернуться к пункту 3. В противном случае останов.
Пример 3.2. Последовательность векторов, порожденных алго-
ритмом 3.1 для
n = 7 и k = 5, приведена в табл. 3.1. При записи этих
векторов скобки и разделяющие запятые опущены. Количество векто­ров равно
!7
)5,7( ==C
.21
!5!2
Таблица 3.1
п/п
1
2
3
4
5
6
7
8
9
10
Вектор
12345
12346
12347
12356
12357
12367
12456
12457
12467
12567
A Значение р
5
5
4
5
4
3
5
4
3
29
п/п
11
12
13
14
15
16
17
18
19
20
21
Вектор A Значение р
13456
13457
13467
13567
14567
23456
23457
23467
23567
24567
34567
2
5
4
3
2
1
5
4
3
2
1

3.3. Генерация перестановок

Рассмотрим теперь процесс генерации
новок множества дать в лексикографическом порядке одну за другой с помощью сле­дующего алгоритма.
Алгоритм 3.2. Генерация перестановок
1. Сначала взять перестановку A = (1, …, n).
2. Вывести текущее значение А.
3. Пусть A = (А[1], …, A[n]) – текущая перестановка.
Выполнить просмотр A справа налево в поисках самой правой позиции i, в которой A[i] < A[i + 1]. Если такой позиции i нет, то текущая перестановка А является последней. Процесс генерации завершить. Иначе идти дальше.
4. Выполнить просмотр A = (А[1], …, A[i], …, A[n]) слева направо от A[i] в поисках наименьшего из таких элементов A[j], что i < j и A[i] < A[j]. Переставить местами элементы A[i] и A[j], т. е. выполнить сле­дующие присваивания:
5. Пусть A = (А[1], …, A[i], …, A[n]) – перестановка, полученная на предыдущем шаге. Реверсировать (или изменить на обрат­ный) порядок перечисления элементов A[i + 1], …, A[n] «хво­ста» перестановки А. Заметим, что элементы обращаемого «хвоста» всегда расположены в порядке убывания. Перейти к пункту 2.
Пример 3.3. Рассмотрим для
Х = {1, …, n}. Все эти перестановки можно порож-
C:= A[i], A[i]:= A[j], A[j]:= C.
n = 8 текущую перестановку
n! различных переста-
А = (2, 6, 5, 8, 7, 4, 3, 1).
Для нее имеем дает перестановку (2, 6, 7, 8, 5, 4, 3, 1). После реверсии отрезка этой перестановки, начиная с четвертого по восьмой элемент, получаем результирующую перестановку (2, 6, 7, 1, 3, 4, 5, 8), которая следует за текущей перестановкой в лексикографическом порядке.
i = 3, j = 5. Транспозиция элементов A[3] = 5, A[5] = 7
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]