Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по МОТС / ДИСКРЕТНАЯ МАТЕМАТИКА Графы.doc
Скачиваний:
377
Добавлен:
15.02.2014
Размер:
3.38 Mб
Скачать

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 является наи большим независимым множеством вершин.