Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комбинаторные алгоритмы. Множества, графы, коды. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
1 Мб
Скачать
задач класса через
NP. Заметим, что класс NP-полных задач обычно обозначают
NPC (NP-Complete).
Приведем примеры некоторых задач из теории графов, для ко­торых установлена принадлежность к классам
P или NPC.
Пример П.6. Рассмотрим распознавательный вариант оптими-
зационной задачи о кратчайшем пути в графе.
КРАТЧАЙШИЙ ПУТЬ
Условие. Заданы граф G = (V, E) с двумя выделенными верши-
s, t V, длины всех ребер w(e) ∈ Z
нами
лое число
L.
и положительное це-
+
Вопрос. Существует ли в G путь от s до t, длина которого не
превосходит
L.
Для решения данной задачи существует много полиномиальных алгоритмов. Наиболее известные из них алгоритм Дейкстры и алго­ритм Флойда рассмотрены в задании 7 настоящего пособия. Таким образом, задача КРАТЧАЙШИЙ ПУТЬ принадлежит классу тем эта задача
частный случай следующей NP-полной задачи [10].
P. Между
K КРАТЧАЙШИХ ПУТЕЙ
Условие. Заданы граф G = (V, E) с двумя выделенными верши-
s, t V, длины всех ребер w(e) ∈ Z
нами
целые числа
L и K.
и положительные
+
Вопрос. Существует ли в G не менее K различных путей от s
до
t, общая длина которых не превосходит L.
Пример П.7. Полиномиально разрешима следующая задача.
МИНИМАЛЬНЫЙ ОСТОВ
Условие. Заданы граф G = (V, E), веса всех ребер w(e) Z
положительное целое число
L.
и
+
Вопрос. Существует ли в G остовное дерево, вес которого не
превосходит
L.
Наиболее популярные полиномиальные алгоритмы решения этой задачи: алгоритм Прима и алгоритм Краскала (см. задание 6 в главе 2). Задача МИНИМАЛЬНЫЙ ОСТОВ дующей задачи из класса
NPC [10].
частный случай сле-
141
K НАИЛУЧШИХ ОСТОВА
Условие. Заданы граф G = (V, E), веса всех ребер w(e) Z
положительные целые числа
L и K.
Вопрос. Существует ли в G ровно K остовных дерева, общий
вес которых не превосходит
L.
Другая задача, родственная с задачей МИНИМАЛЬНЫЙ ОСТОВ и принадлежащая NPC, формулируется так.
ОСТОВ ОГРАНИЧЕННОЙ СТЕПЕНИ
Условие. Заданы граф G = (V, E) и положительное целое число L.
Вопрос. Существует ли в G остовное дерево, у которого степе-
ни всех вершин не превосходят
L.
+
и
Трудноразрешимые задачи не ограничиваются классом
NPC.
Определены и другие классы трудноразрешимых задач. Например, класс
PSPACE. В него входят задачи, которые могут быть решены с
помощью алгоритма, использующего полиномиальный относительно длины входа объем памяти (время может быть неполиномиальным). Несмотря на то, что не установлено, равны ли эти классы. Класс
PSPACE очевидным образом включает NP, пока
PSPACE, а также другие
классы сложности трудноразрешимых задач описаны в [10].
Существует много трудноразрешимых задач, имеющих огром­ную практическую значимость. Поэтому специалисты в области ма­тематики и компьютерных наук в течение нескольких десятилетий пытаются продвинуться в их решении. На сегодняшний день здесь применяются следующие основные подходы [20]:
– выделение полиномиально разрешимых подклассов экземпля-
ров
задач в их общей формулировке;
улучшение переборных алгоритмов за счет «разумной» орга-
низации стратегии перебора; – параметризированный подход; – нахождение приближенных решений.
Первый подход основан на очевидном утверждении:
общей является задача, тем труднее ее решить
. Он предполагает
чем более
сужение NP-полной задачи с целью выделения легких частных случа­ев. Математически это выражается в нахождении достаточных усло­вий существования решения задачи и полиномиальной сложности их
142
проверки. Продуктивность этого подхода сильно зависит от решаемой задачи. Многочисленные примеры показывают, что сужение задачи не всегда позволяет избавиться от NP-полноты.
Сокращение перебора – наиболее широко применяемый подход
решения трудноразрешимых задач. Реализуется он в основном с по­мощью методов декомпозиции. Например, таким методом является метод ветвей и границ, суть которого состоит ных решений, представленных деревом решений, и применении оце­нок, позволяющих опознать бесперспективные частичные решения [20]. Для ряда задач весьма результативно комплексное применение метода ветвей и границ и других декомпозиционных инструментов, таких как метод динамического программирования.
Параметризированный подход направлен на получение точных
решений трудноразрешимых задач. Основная идея параметризирован­ного
подхода состоит в том, чтобы с помощью некоторого числового параметра структурировать и измерить конечное пространство поиска. Роль параметра – выделить основной источник неполиномиальной сложности задачи и показать, «комбинаторный взрыв» какой величи­ны можно ожидать при ее решении на тех или иных исходных данных [7]. Параметризированный подход позволяет решить трудноразреши­мую задачу за ях параметра.
Приближенные алгоритмы применяются при решении трудно-
разрешимых задач оптимизации. Они нацелены на поиск
ального точностью
заведомо не более чем на заданную величину. Для построения при­ближенных решений (с гарантированной точностью или без нее) ши­роко используются жадная стратегия, метод ветвей и границ, метод динамического программирования, различные вероятностные и эври­стические приемы, методы искусственного интеллекта [13, 15, 20].
приемлемое время при малых фиксированных значени-
(по времени нахождения) приближения с гарантированной
решения, отличающегося от действительного оптимума
в построении частич-
полиноми-
143
Приложение 2
ВЫБОР ПРЕДСТАВЛЕНИЯ ДАННЫХ
И ТЕСТОВ
Данные, обрабатываемые программой, делятся на исходные, промежуточные и результирующие. Специфика исходных и результи­рующих данных заключается в том, что с ними имеет дело не только программа, но и пользователь программы. Поэтому различают два представления данных внешнее и внутреннее (или машинное).
Основное требование к внешнему представлению состоит в его максимальном удобстве, понятности и естественности для пользовате­ля, чтобы он мог достаточно легко подготовить данные для ввода и оценить результат работы программы по выходным данным.
Если выбор внешнего представления данных определяется есте­ственностью для человека и обычно никак не зависит от выбора алго­ритма решения задачи, то совершенно иначе дело обстоит с выбором внутреннего представления. Здесь рекомендуется исходить из правила:
алгоритм и используемые в нем структуры данных должны разраба­тываться одновременно. Неудачный выбор внутреннего представле-
ния данных может оказать значительное влияние на объем используе­мой памяти и на время работы программы.
Очень часто внешнее и внутреннее представления исходных данных не совпадают. Тогда перевод из внешнего представления во внутреннее является частью процесса разработки программы. Напри­мер, один из способов внешнего представления графа это задание графа множеством вершин и перечнем ребер. Однако для алгоритма обхода графа в глубину такой способ неудобен. В данном случае тре­буется перевод исходных данных во внутреннее представление – пред­ставление графа списками смежности.
Умение выбрать подходящие для алгоритма представления данных является искусством программирования. Программист должен знать мно­го разных способов представления одного и того же объекта и умело вы­бирать в каждой конкретной ситуации наиболее подходящий.
144
С разработкой алгоритма и программы тесно связано также по­строение набора тестов, на которых проверяется правильность работы программы во время ее отладки.
Тест – некоторая совокупность исходных данных и точное описание результатов, которые должна выдать программа на этих исходных данных.
Одно из основных требований, предъявляемых к набору тестов, – это его полнота: каждая ветвь, каждый оператор программы должны обязательно выполняться на одном из тестов набора. Обычно уже из формулировки задачи вытекает необходимость проверки работы про­граммы хотя бы на двух тестах: один – когда решение задачи сущест­вует; другой – когда не существует.
Другое важное требование к набору тестов – это учет количест- венных ограничений на размеры исходных данных программы и их значения. В программе должна быть предусмотрена проверка количе­ственных ограничений, а в наборе тестов должны быть тесты, на кото­рых данные ограничения нарушаются и в которых ожидаемый ответ содержит диагностическое сообщение об этом факте.
145

АЛФАВИТНЫЙ УКАЗАТЕЛЬ

А
Алгоритм генерации перестановок 30 – – сочетаний 28 – Дейкстры 70 – декодирования префиксного кода 98 – Краскала 60 – неполиномиальный 137 – поиска в глубину или ширину 48 – полиномиальный 136 – порождения двоичных векторов 16 – построения кода Грея 18 – распознавания однозначности кода 101 – Прима 62 – Флойда 77 – Хаффмена 112
экспоненциальный 137 Алфавит 92
исходный 93 – кодирующий 93
Б
Блок графа 54 Буква 92
В
Вектор степеней 38 – характеристический 8 Вершина графа 37 – висячая 38 достижимая 56 – изолированная 38 Вложенность графов 40
Г
Граф 37 – ациклический 38 – безреберный 39 – взвешенный 39 – двудольный 39 – неориентированный 37 – несвязный 38 – ориентированный 41 – полный 39
помеченный 39 связный 38 Графы равные 39
Д
Декодирование 93 Длина слова 92 – средняя элементарного
кода 106 Дерево остовное 52 Дополнение графа 40
146
К
З
Задача выбора проектов 23 – выделения компонент графа 51 – вычисления транзитивного замыкания 82 – квадратичная о назначениях 32 – нахождения всех источников орграфа 57 – определения дерева взаимопонимания 67 – – кратчайших контуров 81
оптимального кодирования 110 – отыскания дерева кратчайших путей 75 – – – остовного 52 – – леса остовного 53 – о двух системах дорог 89 – – достижимости 56 – – доставке 24 – – кратчайшем пути 68 – – мелиорации рисовых полей 65 – – надежной сети 66, 86 – – плотной системе дорог 88 – – поиске «узких» мест графа 53 – – сетевом планировании работ 84
размещения баз 21 распознавания однозначного
вычислительной
декодирования 94
И
Инцидентность ребра и вершины 38
Код алфавитный 93
Грея бинарный 18 неравномерный 94 – оптимальный 110 – префиксный 96 – равномерный 94 Хаффмена 116 Кодирование 93 – алфавитное 93 – побуквенное 93
Компонента связности графа 38 Коэффициент сжатия 117
Л
Лемма о рукопожатиях 49 Лес 38
остовной 53 – – минимальный 62
М
Маршрут 38 – замкнутый 38 – циклический 38 Матрица весов 44 – достижимости 83
инцидентности графа 42 – – орграфа 42 – смежности графа 43 – – орграфа 43 Множество 6 – бесконечное 6 – конечное 6 – пустое 7 – универсальное 7
элементарных кодов 93 Мощность множества 11
147
Н
Неравенство Макмиллана 99
О
Объединение графов 40 – – дизъюнктное 40 – множеств 9
Окрестность вершины 38 Окончание слова 96 Орграф 41 Остов минимальный 59 Отождествление вершин 40
П
Пересечение множеств 9 Перестановка 26 Подграф остовной 40 Поиск в глубину 48 – – ширину 48 Порядок графа 37 – лексикографический 27 Последовательность степенная 38 Постфикс слова 96 – – собственный 96 Префикс слова 96 – – собственный 96 Путь 41 – кратчайший 68
Р
Равенство графов 39 – множеств 11
Равномощность множеств 11 Размещение 26 Разность множеств 9 – – симметрическая 10 Разрядность кода 94 Расстояние Хемминга 12
С
Свойство префикса 96 Сжатие текстов 117 Слияние вершин 40 Слово 92 Сложность алгоритма 126
задачи 139 Смежность вершин графа 37 – ребер графа 37 Сообщение 93 Сочетание 26 Степень вершины графа 38 Схема кодирования 93
У
Удаление вершины графа 40 – ребра графа 40
Ц
Цепь графа 38 – – простая 38 Цикл графа 38 – – простой 38
Ч
Число графа компонент связности 38
– – цикломатическое 52 – перестановок 26 размещений 26 – сочетаний 26
Ш
Шкала множества битовая 8
148

ОГЛАВЛЕНИЕ

ПРЕДИСЛОВИЕ…………………………………………….……………..
ГЛАВА 1. ПЕРЕЧИСЛЕНИЕ ПРОСТЕЙШИХ КОМБИНАТОРНЫХ ОБЪЕКТОВ
Задание 1. Множества: представления и опера-
………………..……………….…………….……………...
ции
1.1. Основные понятия и обозначения…………........……………….
1.2. Битовая шкала множества…..……………….........………….…..
1.3. Теоретико-множественные операции и их реализация
битовыми шкалами …………………………….....…............………..
1.4. Отношения над множествами….………………………………...
1.5. Расстояние между множествами.……………………………......
1.6. Порядок выполнения задания…………………………………....
1.7. Варианты.………………………………………………………….
Задание 2. Генерация всех подмножеств конечного
множества.….......................................................................................
2.1. Формулировка задачи.........………………………..…………......
2.2. Счет в двоичной системе счисления...…………..……………....
2.3. Бинарные коды Грея.......................................................................
2.4. Порядок выполнения задания..…………………………………..
2.5. Варианты..…………………………………………………………
Задание 3. Пересчет и перечисление сочетаний и перестановок
3.1. Определение комбинаторных объектов.......................……….…
3.2. Генерация сочетаний.........................................…………...……..
3.3. Генерация перестановок...................……………………....…….
3.4. Порядок выполнения задания……………………………………
3.5. Варианты…………………………………………………………..
.........................................................................................
ГЛАВА 2. АЛГОРИТМЫ НА ГРАФАХ…………...............…..……..
Задание 4. Графы: представления и операции....................
4.1. Основные понятия и обозначения.................................................
4.2. Отношения и операции...……..…………………………....……..
4.3. Родственные графам объекты..................………………………..
4.4. Способы машинного представления ............................................
4.5. Порядок выполнения задания...……………………………….....
4.6. Варианты………………………………………………………......
……...…………………………….
3
6
6 6 7
9 11 12 13 14
16 16 16 17 20 21
26 26
27 30 31 32
37 37 37 39 41 41 47 47
149
464
4
4
4
4
Задание 5. Базовые задачи и алгоритмы на графах........
5.1. Обход вершин графа в глубину или ширину..………………..
5.2. Базовые задачи на графах …………………....………………
5.3. Порядок выполнения задания………………………………….
5.4. Варианты………………………………………………………
Задание 6. Построение минимального остова...................
6.1. Формулировка задачи…..................……………………………
6.2. Алгоритм Краскала..………………………………....................
6.3. Алгоритм Прима…...................……………………..…………..
6.4. Некоторые замечания..……………………..…………………..
6.5. Порядок выполнения задания………………………………….
6.6. Варианты ......................................................................................
Задание 7. Построение кратчайших путей.........................
7.1. Формулировка задачи…..................……………………………
7.2. Случай неотрицательных весов. Алгоритм Дейкстры.............
7.3. Дерево кратчайших путей........……………………..………….
7.4. Случай произвольной матрицы весов. Алгоритм Флойда…...
7.5. Кратчайшие контуры и транзитивное замыкание.....................
7.6. Порядок выполнения задания………………………………….
7.7. Варианты ......................................................................................
ГЛАВА 3. АЛФАВИТНОЕ КОДИРОВАНИЕ……………..……...
Задание 8. Однозначность декодирования………..............
8.1. Основные понятия и обозначения ….………………………....
8.2. Формулировка задачи….....…………………………………….
8.3. Критерии однозначного декодирования….…………………
8.4. Порядок выполнения задания…....…………………………….
8.5. Варианты………………………………………………………
Задание 9. Оптимальное кодирование и сжатие текстов
9.1. Средняя длина элементарного кода ………………………......
9.2. Формулировка задачи…..…………………………....................
9.3. Свойства оптимальных кодов……………………..…………..
9.4. Алгоритм Хаффмена………………………..…………………..
9.5. Сжатие текстов………………………..………………………...
9.6. Порядок выполнения задания………………………………….
9.7. Варианты………………………………………………………
Библиографический список............................................................
Приложение 1. Алгоритмы и сложность......................................
Приложение 2. Выбор представления данных и тестов..............
Алфавитный указатель
………………………….………...............
48
48 51 57 58 59
59 59 62 62 6
68 68
69 75 76 81 83 8
92 92 92 9
96 103 10 106 106 110 111 112 117 118 119
120 122 14
146
150
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]