- •Иркутский государственный технический университет
- •1. Определения графов
- •7.4.5. Массив дуг
- •8.4.2. Трансверсаль
- •8.5.4. Алгоритм нахождения максимального потока
- •8.6.3. Выделение компонент сильной связности
- •8.7.1. Длина дуг
- •8.7.2. Алгоритм Флойда
- •8.7.3. Алгоритм Дейкстры
- •Глава 9 Деревья
- •9.1. Свободные деревья
- •9.1.1. Определения
- •9.1 .2. Основные свойства деревьев
- •9.2. Ориентированные, упорядоченные и бинарные деревья
- •9.2.1. Ориентированные деревья
- •9.2.2. Эквивалентное определение ордерева
- •9.2.3. Упорядоченные деревья
- •9.2.4. Бинарные деревья
- •9.3. Представление деревьев в эвм
- •9.3.1. Представление свободных, ориентированных и упорядоченных деревьев
- •9.3.2. Представление бинарных деревьев
- •9.3.3. Обходы бинарных деревьев
- •9.3.4. Алгоритм симметричного обхода бинарного дерева
- •9.4. Деревья сортировки
- •9.4.1. Ассоциативная память
- •9.4.2. Способы реализации ассоциативной памяти
- •9.4.3. Алгоритм бинарного (двоичного) поиска
- •9.4.4. Алгоритм поиска в дереве сортировки
- •9.4.5. Алгоритм вставки в дерево сортировки
- •9.4.6. Алгоритм удаления из дерева сортировки
- •9.4.7. Вспомогательные алгоритмы для дерева сортировки
- •9.4.8. Сравнение представлений ассоциативной памяти
- •9.4.9. Выровненные деревья
- •9.4.10. Сбалансированные деревья
- •9.5. Кратчайший остов
- •9.5.1. Определения
- •9.5.2. Схема алгоритма построения кратчайшего остова
- •9.5.3. Алгоритм Краскала
- •Глава 10 Циклы
- •10.1. Фундаментальные циклы и разрезы
- •10.1.1. Циклы и коциклы
- •10.1.2. Независимые множества циклов и коциклов
- •10.1.3. Циклический и коциклический ранг
- •10.2. Эйлеровы циклы
- •10.2.1. Эйлеровы графы
- •10.2.2. Алгоритм построения эйлерова цикла в эйлеровом графе
- •10.2.3. Оценка числа эйлеровых графов
- •10.3. Гамильтоновы циклы
- •10.3.1. Гамильтоновы графы
- •10.3.2. Задача коммивояжера
- •Глава 11 Независимость и покрытия
- •11.1. Независимые и покрывающие множества
- •11.1.1. Покрывающие множества вершин и ребер
- •11.1.2. Независимые множества вершин и ребер
- •11.1.3. Связь чисел независимости и покрытий
- •11.2. Построение независимых множеств вершин
- •11.2.1. Постановка задачи отыскания наибольшего независимого множества вершин
- •11.2.2. Поиск с возвратами
- •11.2.3. Улучшенный перебор
- •11.2.4. Алгоритм построения максимальных независимых множеств вершин
- •11.3. Доминирующие множества
- •11.3.1. Определения
- •11.3.2. Доминирование и независимость
- •11.3.3. Задача о наименьшем покрытии
- •11.3.4. Эквивалентные формулировки знп
- •11.3.5. Связь знп с другими задачами
- •Глава 12 Раскраска графов
- •12.1. Хроматическое число
- •Ух, . . . ,Vn одноцветные классы,доказательство
- •12.2. Планарность
- •12.2.2. Эйлерова характеристика
- •12.2.3. Теорема о пяти красках
- •12.3. Алгоритмы раскрашивания
- •12.3.1. Точный алгоритм раскрашивания
- •12.3.2. Приближенный алгоритм последовательного раскрашивания
- •12.3.3. Улучшенный алгоритм последовательного раскрашивания
11.2. Построение независимых множеств вершин
Данный раздел фактически является вводным обзором методов решения переборных задач. Методы рассматриваются на примере задачи отыскания максимального независимого множества вершин графа. Данный обзор не претендует на полноту, но описание основополагающих идей и терминов в нем присутствует.
11.2.1. Постановка задачи отыскания наибольшего независимого множества вершин
Задача отыскания наибольшего независимого множества вершин (и, тем самым, определения вершинного числа независимости /Зо) принадлежит к числу трудоемких.
Эту задачу можно поставить следующим образом. Пусть задан граф G(V, E). Найти такое множество вершин X, X С V, что
w(X) = тахш(У),
где w(X): = \Х\, а £ : = {У с V \ Vu, v € Y (и, v) <£ Е} (см. раздел 2.7.5).
Если бы семейство £ независимых множеств оказалось матроидом, то поставленную задачу можно было бы решить жадным алгоритмом (алгоритм 2.2). Однако семейство £ матроидом не является. Действительно, хотя аксиомы mi и Mi (см. подраздел 2.7.1) выполнены, так как пустое множество вершин независимо и всякое подмножество независимого множества независимо, но аксиома Мз не выполнена, как видно из следующего примера.
Пример
Рассмотрим полный двудольный граф Кп<п+1. Доли этого графа образуют (максимальные) независимые множества, и их мощности различаются на 1. Однако никакая вершина из большей доли не может быть добавлена к вершинам меньшей доли с сохранением независимости.
11.2.2. Поиск с возвратами
Даже если для решения задач, подобных поставленной в предыдущем разделе, не удается найти эффективного алгоритма, всегда остается возможность найти решение «полным перебором» всех возможных вариантов, просто в силу конечности числа возможностей. Например, наибольшее независимое множество можно найти по следующей схеме.
Вход: граф G(V, E).
Выход: наибольшее независимое множество X. т : = 0 { наилучшее известное значение Д> } for Y е 2V do if Г е£&|У| >mthen
m := |У|; X: = Y { наилучшее известное значение X } end if end for
ЗАМЕЧАНИЕ
Для выполнения этого алгоритма потребуется <9(2Р) шагов.
ОТСТУПЛЕНИЕ
Алгоритм, трудоемкость которого (число шагов) ограничена полиномом от характерного размера задачи, принято называть эффективным, в противоположность неэффективным алгоритмам, трудоемкость которых ограничена более быстро растущей функцией, например экспонентой. Таким образом, жадный алгоритм эффективен, а полный перебор — нет.
При решении переборных задач большое значение имеет способ организации перебора (в нашем случае — способ построения и последовательность перечисления множеств У). Наиболее популярным является следующий способ организации перебора, основанный на идее поиска в глубину и называемый поиском с возвратами.
ЗАМЕЧАНИЕ —
Иногда употребляется термин бэктрекинг (от английского названия этого метода -backtracking).
Идея поиска с возвратами состоит в следующем. Находясь в некоторой ситуации, пробуем изменить ее в надежде найти решение. Если изменение не привело к успеху, то возвращаемся в исходную ситуацию (отсюда название «поиск с возвратами») и пробуем изменить ее другим образом, и так до тех пор, пока не будут исчерпаны все возможности.
Для рассматриваемой задачи метод поиска с возвратами может быть реализован с помощью следующего рекурсивного алгоритма.
Алгоритм 11.1. Поиск с возвратами
Вход: граф G(V, E).
Выход: наибольшее независимое множество X.
т: = О { наилучшее известное значение /Зо }
ВТ(0, V) { вызов рекурсивной процедуры ВТ }
Основная работа выполняется рекурсивной процедурой ВТ.
Вход: S — текущее независимое множество вершин, Т — оставшиеся вершины графа. Выход: изменение глобальной переменной X, если текущее множество не может быть расширено (является максимальным). е: = false { признак расширяемости множества } for v 6 V do if S U {v} € £ then
e : = true { множество можно расширить } BT(S U {г;}, Т \ Г*(г>)) { пробуем добавить v } end if end for if e then
if \S\ > т then
X := S;m := \S\ { наибольшее независимое множество } end if end if
обоснование
По построению вершина v добавляется в множество 5 только при сохранении независимости расширенного множества. В алгоритме это обстоятельство указано в форме условия 5 U {v} e £. Проверить сохранение условия независимости нетрудно, например, с помощью следующего цикла.
/: = true { множество 5 независимое } for и £ S do
if (и, v) e E then /: = false; exit for { множество 5 U {v} зависимое }
end if end for
Этот цикл не включен в явном виде в рекурсивную процедуру ВТ, чтобы не загромождать основной текст и не затуманивать основную идею поиска с воз вратами. Таким образом, множество S, а следовательно, и множество X -зависимые. В тот момент, когда множество S нельзя расширить (e = false), оно максимально по определению. Переменная т глобальна, поэтому среди всех максимальных независимых множеств в конце работы алгоритма X является наи большим независимым множеством вершин.