Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Комбинаторные алгоритмы: множества, графы, коды

Покупка
Основная коллекция
Артикул: 632855.01.99
Быкова, В. В. Комбинаторные алгоритмы: множества, графы, коды/БыковаВ.В. - Краснояр.: СФУ, 2015. - 152 с.: ISBN 978-5-7638-3155-9. - Текст : электронный. - URL: https://znanium.com/catalog/product/550333 (дата обращения: 28.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов

                                    
 

 
 
 
 
 
 
 
 
 
 
 
 
. .  
 
,  ,   
 
, 
02.03.01 «» (. 088-4 / 121-14, 23 2014 .) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


2015 

519.1(07) 
22.174.173 
953 
 
 


. . , , ,  
 
 
 
 
 
 
 
 
 
, . . 

953 
 
: , , : . / . . . – : . . -, 2015. – 152 . 
ISBN 978-5-7638-3155-9 
 
, , , 
, . .  
, 02.03.01 
«». 
 

.: 
519.1(07) 

http://catalog.sfu-kras.ru 
22.174.173 
 
 
 
 
 
 
 
 
 
 
 
ISBN 978-5-7638-3155-9 
© , 2015 

ПРЕДИСЛОВИЕ 
 
 
 
 
 
Комбинаторный анализ – раздел дискретной математики, рассматривающий решение задач выбора и расположения элементов некоторого конечного множества в соответствии с заданными правилами. Всякое правило выбора задает способ построения некоторой конечной конструкции из элементов исходного множества, называемой 
комбинаторным объектом (или комбинаторной конфигурацией). Простейшими комбинаторными объектами являются сочетания, размещения, перестановки, а более сложными – графы, алфавитные коды, латинские квадраты, блок-схемы.  
В рамках комбинаторного анализа комбинаторные объекты изучаются преимущественно в аспекте двух вопросов: существует ли 
комбинаторный объект, удовлетворяющий заданному правилу выбора, 
и если да, сколько таких объектов можно построить. Значительную 
часть комбинаторного анализа составляют методы и алгоритмы решения следующих типов задач: 

– задачи на построение. Это конструирование одних объектов 
на основе других с помощью некоторых операций, а также 
перечисление (генерация) всех комбинаторных объектов заданного типа; 
– задачи распознавания. Это проверка условия, которому должен удовлетворять построенный комбинаторный объект; 
– оптимизационные задачи (задачи комбинаторной оптимизации). Это нахождение в конечной совокупности комбинаторных объектов, таких, которые обладают избранным свойством 
в наибольшей или наименьшей степени.    
Алгоритмы решения таких типов задач принято называть комбинаторными алгоритмами. Эти алгоритмы часто называют также алгоритмами дискретной математики, поскольку они оперируют комбинаторными объектами как дискретными математическими структурами.  

Класс комбинаторных алгоритмов очень обширный. Он охватывает алгоритмы генерации комбинаторных объектов (подмножеств, 
перестановок, сочетаний, разбиений и т. п.), алгоритмы сортировки, 
базовые алгоритмы на графах (обходы в глубину и ширину, специальные обходы, поиск с возвратом и т. п.), алгоритмы решения задач комбинаторной оптимизации, потоковые алгоритмы, алгоритмы целочисленной оптимизации и многие другие. Поскольку число комбинаторных объектов, удовлетворяющих заданному правилу выбора, может 
быть огромным, то одним из основных критериев качества комбинаторных алгоритмов является вычислительная (или ресурсная) сложность, т. е. время и память, необходимые для их выполнения.  
Комбинаторные алгоритмы востребованы многими современными приложениями, базирующимися на информационных компьютерных технологиях. Вследствие этого в учебных планах математических и программистских специальностей университетов предусмотрены дисциплины, целью которых является изучение, программирование 
и анализ вычислительной сложности комбинаторных алгоритмов.  
Имеется немало литературы по дискретной математике, в которой содержатся традиционные для этой дисциплины разделы, включая 
описания важнейших комбинаторных алгоритмов [2–8, 15, 16, 19, 25]. 
Но остается потребность в сборниках задач и упражнений прикладной 
направленности. Данное учебное пособие в определенной мере удовлетворяет эту потребность. 
Учебное пособие предназначено для практических занятий по 
дисциплине «Комбинаторные алгоритмы». Здесь приводится теоретический материал и описание заданий. Излагаемые в учебном пособии алгоритмы заимствованы из [1−25], но с авторскими трактовками, иллюстрациями, примерами и некоторыми оригинальными приемами анализа 
алгоритмов. Объем учебного пособия рассчитан на один семестр. 
Учебное пособие содержит три главы и два приложения. Каждая глава освещает отдельную тему и включает несколько заданий.  
В спектр рассматриваемых тем входят: перечисление простейших 
комбинаторных объектов, алгоритмы на графах, алфавитное кодирование. Для понимания представленных тем вполне достаточно знакомства 
со школьным курсом алгебры. Всего в учебное пособие включено девять заданий, каждое из которых – это отдельная комбинаторная проблема с краткой и четкой формулировкой, примерами, алгоритмами 

и прикладными задачами. Задания содержат шесть равноценных по 
трудности вариантов. При их выполнении допускается применение любого языка программирования. Краткая теоретическая справка, предваряющая каждое задание, позволяет студентам самостоятельно изучить 
рассматриваемую тему и решить на компьютере предлагаемые прикладные задачи.  
В приложениях представлена дополнительная информация, необходимая студентам для разработки и анализа алгоритмов и программ. В прил. 1 рассмотрены элементы теории сложности вычислений, приведены асимптотические формализмы. В прил. 2 даны рекомендации по выбору машинного представления данных и тестов. 
Учебное пособие включает более 50 рисунков, алгоритмы описаны на естественном языке, теоретический материал изложен с использованием традиционных математических обозначений. Основные 
термины и понятия выделены курсивом и вынесены в алфавитный указатель. 
Учебное пособие предназначено для студентов младших курсов 
университетов, обучающихся по направлению 02.03.01 «Математика и 
компьютерные науки», а также может быть полезно преподавателям и 
практикующим программистам. 
 
 
 
 
 
 
 

ГЛАВА 1 

ПЕРЕЧИСЛЕНИЕ ПРОСТЕЙШИХ 
КОМБИНАТОРНЫХ ОБЪЕКТОВ 

ЗАДАНИЕ 1 

Множества: представления и операции 

Рассматривается машинное представление конечных множеств 

в виде битовых шкал. Цель задания: практика программирования теоретико-множественных операций и отношений между множествами, 
заданными битовыми шкалами.  

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

 
В окружающей действительности существуют как отдельные 

объекты, так и их совокупности, или множества. Например, имеется 
отдельная почтовая марка и коллекция марок, произведение А. С. Пушкина «Евгений Онегин» и полное собрание сочинений этого писателя, 
число 5 и совокупность всех натуральных чисел.  

Под множеством X обычно понимается любая совокупность 

определенных и различимых между собой объектов, мыслимая как 
единое целое. Эти объекты называются элементами множества X.  

Символом ∈ обозначается отношение принадлежности. Запись 

x ∈ X означает, что элемент x принадлежит множеству X. Если элемент 
x не принадлежит множеству X, то пишут x ∉ X. 
Если множество состоит из конечного числа элементов, то оно 
называется конечным множеством, а в противном случае − бесконечным. Конечные множества можно описывать, перечисляя их элементы. 
Элементы, принадлежащие конечному множеству, записывают между 
двумя фигурными скобками через запятую. Гораздо чаще множества 
задаются посредством указания характеристического свойства – признака, которому удовлетворяют элементы этого множества, и только 

они. Для такого задания обычно используются фигурные скобки, 
внутри которых приводится характеристическое свойство. Так, множество {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]. Определение машинного представления множества предполагает указание структуры данных, подходящей для хранения информации о принадлежности элементов множеству. Наиболее распространенный способ машинного представления конечных множеств − битовые шкалы.  

Пусть Х = {х1, ..., xn} – универсальное непустое конечное мно
жество. В дальнейшем рассматриваются только подмножества этого 
множества.  

Всякому множеству A ⊆ X можно однозначно сопоставить би
товую шкалу – n-разрядный двоичный вектор (a1, ..., an), каждый i-й 
разряд (i = l, ..., n) которого определяется так: 

⎩
⎨
⎧
∉

∈
=
.
 
если
,0

,
 
если
,1

A
x

A
x
a

i

i
i
 

Битовая шкала характеризует принадлежность элемента из X 
множеству А, поэтому ее также называют характеристическим вектором множества А ⊆ Х (А в Х). 
Известно, что существует 2n различных 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 

 
Битовые шкалы очень удобны для выполнения основных операций над конечными множествами, а также проверки отношений между 
ними.  

1.3. Теоретико-множественные операции  
и их реализация битовыми шкалами 
 

Приведем правила образования битовых шкал дополнения, объ
единения, пересечения, разности и симметрической разности множеств. Каждое из этих правил основано на определении соответствующей теоретико-множественной операции. 
Дополнение. Пусть множество A ⊆ X имеет битовую шкалу 
(a1, ..., an). Тогда битовая шкала (b1, ..., bn) множества 

{
},
и
|
A
x
X
x
x
A
∉
∈
=
 

являющегося дополнением для A, определяется путем инвертирования 
всех разрядов шкалы (a1, ..., an):  

bi = 1 – ai,  i = l, ..., n. 

Объединением множеств A, B ⊆ X называется множество  

C = A ∪ B = {x | x ∈ A или x ∈ B}, 

состоящее из всех тех элементов, которые принадлежат хотя бы одному из множеств A или B. Пусть множества А и В описываются шкалами (a1, ..., an) и (b1, ..., bn) соответственно. Тогда битовая шкала 
(c1, …, cn) множества C вычисляется по правилу 

ci = mах {ai, bi},  i = l, ..., n. 

Пересечение множеств A, B ⊆ X есть множество 

C = A ∩ B = {x | x ∈ A и x ∈ B}, 

содержащее все элементы, которые принадлежат A и B одновременно. 
Пусть множествам А и В соответствуют битовые шкалы (a1, ..., an) и 
(b1, ..., bn). Тогда битовая шкала (c1, …, cn) множества C определяется 
следующим образом: 
ci = min {ai, bi},  i = l, ..., n. 

Разность. Если множества A, B ⊆ X представляются битовыми 
шкалами (a1, ..., an), (b1, ..., bn), то битовая шкала (c1, …, cn)  множества 

{
}
,
и
|
\
B
A
B
x
A
x
x
B
A
C
∩
=
∉
∈
=
=