Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комбинаторные алгоритмы. Множества, графы, коды. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
     
  
. . 
 
, , 


2015
 519.1(07)  22.174.173
953

. . ,         ,  ­ , 
, . .
953  : , , : . -
 / . . . –  : . . -, 2015. – 152 .
ISBN 978-5-7638-3155-9
    , , ,  ,   .     .
  ,    02.03.01 «   ».
 ! !"#!$ %&.: ' 519.1(07)
http://catalog.sfu-kras.ru  22.174.1$73
ISBN 978-5-7638-3155-9 ©  
, 2015

ПРЕДИСЛОВИЕ

Комбинаторный анализ – раздел дискретной математики, рас-
сматривающий решение задач выбора и расположения элементов не­которого конечного множества в соответствии с заданными правила­ми. Всякое правило выбора задает способ построения некоторой ко­нечной конструкции из элементов исходного множества, называемой комбинаторным объектом (или комбинаторной конфигурацией). Про­стейшими комбинаторными объектами являются сочетания, размеще-
, перестановки, а более сложными – графы, алфавитные коды, ла-
ния тинские квадраты, блок-схемы.
В рамках комбинаторного анализа комбинаторные объекты изу-
чаются преимущественно в аспекте двух вопросов: существует ли комбинаторный объект, удовлетворяющий заданному правилу выбора, и если да, сколько таких объектов можно построить. Значительную часть комбинаторного анализа составляют методы и алгоритмы реше­ния следующих типов задач:
задачи на построение. Это конструирование одних объектов
на основе других с помощью некоторых операций, а также перечисление (генерация) всех комбинаторных объектов за­данного типа;
задачи распознавания. Это проверка условия, которому дол-
жен удовлетворять построенный комбинаторный объект;
оптимизационные задачи (задачи комбинаторной оптимиза-
ции). Это нахождение ных объектов, таких, которые обладают избранным свойством в наибольшей или наименьшей степени.
Алгоритмы решения таких типов задач принято называть комби-
наторными алгоритмами. Эти алгоритмы часто называют также алго­ритмами дискретной математики, поскольку они оперируют комбина­торными объектами как дискретными математическими структурами.
в конечной совокупности комбинатор-
3
Класс комбинаторных алгоритмов очень обширный. Он охваты-
вает алгоритмы генерации комбинаторных объектов (подмножеств, перестановок, сочетаний, разбиений и т. п.), алгоритмы сортировки, базовые алгоритмы на графах (обходы в глубину и ширину, специаль­ные обходы, поиск с возвратом и т. п.), алгоритмы решения задач ком­бинаторной оптимизации, потоковые алгоритмы, алгоритмы целочис­ленной
оптимизации и многие другие. Поскольку число комбинатор­ных объектов, удовлетворяющих заданному правилу выбора, может быть огромным, то одним из основных критериев качества комбина­торных алгоритмов является вычислительная (или ресурсная) слож­ность, т. е. время и память, необходимые для их выполнения.
Комбинаторные алгоритмы востребованы многими современ­ными приложениями, базирующимися на информационных компью терных технологиях. Вследствие этого в учебных планах математиче­ских и программистских специальностей университетов предусмотре­ны дисциплины, целью которых является изучение, программирование и анализ вычислительной сложности комбинаторных алгоритмов.
Имеется немало литературы по дискретной математике, в кото­рой содержатся традиционные для этой дисциплины разделы, включая описания важнейших комбинаторных алгоритмов [2–8, 15, 16, 19, 25]. Но остается потребность
в сборниках задач и упражнений прикладной направленности. Данное учебное пособие в определенной мере удов­летворяет эту потребность.
Учебное пособие предназначено для практических занятий по дисциплине «Комбинаторные алгоритмы». Здесь приводится теоретиче­ский материал и описание заданий. Излагаемые в учебном пособии ал­горитмы заимствованы из [1−25], но с авторскими трактовками, иллю­страциями, примерами
и некоторыми оригинальными приемами анализа
алгоритмов. Объем учебного пособия рассчитан на один семестр.
Учебное пособие содержит три главы и два приложения. Каж­дая глава освещает отдельную тему и включает несколько заданий.
В спектр рассматриваемых тем входят: перечисление простейших комбинаторных объектов, алгоритмы на графах, алфавитное кодирова­ние. Для понимания представленных тем
вполне достаточно знакомства со школьным курсом алгебры. Всего в учебное пособие включено де­вять заданий, каждое из которых – это отдельная комбинаторная про­блема с краткой и четкой формулировкой, примерами, алгоритмами
-
4
и прикладными задачами. Задания содержат шесть равноценных по трудности вариантов. При их выполнении допускается применение лю­бого языка программирования. Краткая теоретическая справка, предва­ряющая каждое задание, позволяет студентам самостоятельно изучить рассматриваемую тему и решить на компьютере предлагаемые приклад­ные задачи.
В приложениях представлена дополнительная информация, не-
обходимая студентам для разработки
и анализа алгоритмов и про­грамм. В прил. 1 рассмотрены элементы теории сложности вычисле­ний, приведены асимптотические формализмы. В прил. 2 даны реко­мендации по выбору машинного представления данных и тестов.
Учебное пособие включает более 50 рисунков, алгоритмы опи­саны на естественном языке, теоретический материал изложен с ис­пользованием традиционных математических обозначений. Основные термины
и понятия выделены курсивом и вынесены в алфавитный ука-
затель.
Учебное пособие предназначено для студентов младших курсов университетов, обучающихся по направлению 02.03.01 «Математика и компьютерные науки», а также может быть полезно преподавателям и практикующим программистам.
5
ГЛАВА 1
ПЕРЕЧИСЛЕНИЕ ПРОСТЕЙШИХ
КОМБИНАТОРНЫХ ОБЪЕКТОВ
ЗАДАНИЕ 1
Множества: представления и операции
Рассматривается машинное представление конечных множеств в виде битовых шкал. Цель задания: практика программирования тео­ретико-множественных операций и отношений между множествами, заданными битовыми шкалами.

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

В окружающей действительности существуют как отдельные объекты, так и их совокупности, или множества. Например, имеется отдельная почтовая марка и коллекция марок, произведение А. С. Пуш­кина «Евгений Онегин» и полное собрание сочинений этого писателя, число 5 и совокупность всех натуральных чисел.
Под множеством X обычно понимается любая совокупность определенных и различимых между собой объектов, мыслимая как единое целое. Эти объекты называются элементами множества X.
Символом обозначается отношение принадлежности. Запись
x X означает, что элемент x принадлежит множеству X. Если элемент x не принадлежит множеству X, то пишут x X.
Если множество состоит из конечного числа элементов, то оно называется конечным множеством, а в противном случае бесконеч­ным. Конечные множества можно описывать, перечисляя их элементы. Элементы, принадлежащие конечному множеству, записывают между двумя фигурными скобками через запятую. Гораздо чаще множества задаются знака, которому удовлетворяют элементы этого множества, и только
посредством указания характеристического свойства – при-
6
они. Для такого задания обычно используются фигурные скобки, внутри которых приводится характеристическое свойство. Так, множе­ство {1, 2, 3, 4, 5} можно определить следующим образом: {x | x Z и 1 ≤ x ≤ 5}, где Z
множество целых неотрицательных чисел.
+
Отношение включения между множествами A и B обозначается через A B. Оно означает, что каждый элемент множества A есть эле­мент множества B. В данном случае говорят, что A – это подмножест­во множества B. Если в A существует элемент, не принадлежащий B, то A не является подмножеством множества B (A B).
Пусть A и B некоторые множества. Множества A и B равны
(A = B), если для любого x имеем: x A тогда и только тогда, когда x B. Другими словами, A = B тогда и только тогда, когда A B
и B A. Если A B и A B, то записывают A B и отмечают, что множество A есть собственное подмножество множества B.
Поскольку множество однозначно задается своими элементами, то порядок их перечисления не играет роли. Кроме того, любой эле­мент может входить во множество не более одного раза.
Множество, не содержащее элементов, называется пустым и обо­значается . Пустое множество подмножество любого множества.
Обычно уже в самом определении конкретного множества явно или неявно ограничивается совокупность допустимых объектов. На­пример, если речь идет о множестве чисел, делящихся на 3, то ясно, что оно является подмножеством множества целых чисел. Целесооб­разно совокупность допустимых объектов зафиксировать явным обра­зом и считать, что все рассматриваемые множества являются подмно­жествами этой совокупности – универсального множества.

1.2. Битовая шкала множества

Множество как математический объект часто используется в программах, и для его машинного представления имеется ряд способов [5, 17, 19]. Определение машинного представления множества предпо­лагает указание структуры данных, подходящей для хранения инфор­мации о принадлежности элементов множеству. Наиболее распростра­ненный способ машинного представления конечных множеств бито­вые шкалы.
+
7
Пусть Х = {х1, ..., xn} – универсальное непустое конечное мно­жество. В дальнейшем рассматриваются только подмножества этого множества.
Всякому множеству A X можно однозначно сопоставить би- товую шкалуn-разрядный двоичный вектор (a1, ..., an), каждый i-й разряд (i = l, ..., n) которого определяется так:
, если,1
=
a
i
Ax
i
. если,0
Ax
i
Битовая шкала характеризует принадлежность элемента из X множеству А, поэтому ее также называют характеристическим векто-
ром множества А Х (А в Х).
n
Известно, что существует 2
различных n-разрядных двоичных
векторов, что полностью совпадает с числом всех различных подмно­жеств n-элементного множества X.
Следует заметить, что использование битовых шкал предпола­гает неизменный (выбранный наперед) порядок перечисления элемен­тов универсального множества X. При этом число элементов в X может быть сколь угодно большим, но обязательно конечным.
Пример 1.1. Пусть заданы множества
X = {х1, х2, x3, x4, х5},
А = {х2, х3}, B = ∅, C = {х1, х2, x3, x4, х5}.
Тогда битовые шкалы этих множеств имеют вид, указанный в табл. 1.1.
Таблица 1.1
Множество Битовая шкала
A 0 1 1 0 0
B 0 0 0 0 0
C 1 1 1 1 1
Битовые шкалы очень удобны для выполнения основных опера­ций над конечными множествами, а также проверки отношений между ними.
8
1.3. Теоретико-множественные операции
{
{
и их реализация битовыми шкалами
Приведем правила образования битовых шкал дополнения, объ­единения, пересечения, разности и симметрической разности мно­жеств. Каждое из этих правил основано на определении соответст­вующей теоретико-множественной операции.
Дополнение. Пусть множество A X имеет битовую шкалу
, ..., an). Тогда битовая шкала (b1, ..., bn) множества
(a
1
}
,и| AxXxxA =
являющегося дополнением для A, определяется путем инвертирования всех разрядов шкалы (a
Объединением множеств A, B X называется множество
состоящее из всех тех элементов, которые принадлежат хотя бы одно­му из множеств A или B. Пусть множества А и В описываются шкала­ми (a
(c
, ..., an) и (b1, ..., bn) соответственно. Тогда битовая шкала
1
, …, cn) множества C вычисляется по правилу
1
, ..., an):
1
= 1 – ai, i = l, ..., n.
b
i
C = A B = {x | x A или x B},
= mах {ai, bi}, i = l, ..., n.
c
i
Пересечение множеств A, B X есть множество
C = A B = {x | x A и x B},
содержащее все элементы, которые принадлежат A и B одновременно. Пусть множествам А и В соответствуют битовые шкалы (a
, ..., bn). Тогда битовая шкала (c1, …, cn) множества C определяется
(b
1
, ..., an) и
1
следующим образом:
= min {ai, bi}, i = l, ..., n.
c
i
Разность. Если множества A, B X представляются битовыми шкалами (a
, ..., an), (b1, ..., bn), то битовая шкала (c1, …, cn) множества
1
}
,и|\ BABxAxxBAC ===
9
являющегося разностью множеств A и B, определяется правилом
А
= min {ai, 1 bi}, i = l, ..., n.
c
i
Симметрической разностью множеств A, B X называется множество
C = A B = (A \ B) ∪ (B \ A),
которое содержит все элементы из A, не принадлежащие множеству B, а также все элементы из B, не принадлежащие A. Пусть множествам А и В соответствуют шкалы (a
, …, cn) множества C вычисляется так:
(c
1
= max {min (ai, 1 – bi), min (bi, 1 – ai)}, i = l, ..., n.
c
i
, ..., an) и (b1, ..., bn). Тогда битовая шкала
1
Пример 1.2. Рассмотрим два множества
A = {1, 2, 3, 4, 5}, B = {4, 5, 6, 10}.
Они являются подмножествами конечного универсального множества
X = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}. Битовые шкалы исходных множеств A, B и множеств, которые получаются в результате применения к ним
теоретико-множественных операций, приведены в табл. 1.2.
Таблица 1.2
Множество Битовая шкала
A 1 1 1 1 1 0 0 0 0 0
B 0 0 0 1 1 1 0 0 0 1
B
A B A В
0 0 0 0 0 1 1 1 1 1
1 1 1 0 0 0 1 1 1 0
1 1 1 1 1 1 0 0 0 1
0 0 0 1 1 0 0 0 0 0
A \ B 1 1 1 0 0 0 0 0 0 0
B \ A 0 0 0 0 0 1 0 0 0 1
A B
1 1 1 0 0 1 0 0 0 1
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]