Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по дискретной математике (часть 2).doc
Скачиваний:
82
Добавлен:
29.10.2018
Размер:
2.38 Mб
Скачать

4.9.1. Нахождение всех максимальных независимых множеств

Задача отыскания экстремальных независимых и покрывающих множеств возникает во многих практических случаях. Например, пусть есть множество процессов, использующих неразделяемые ресурсы. Соединим ребрами вершины, соответствующие процессам, которым требуется один и тот же ресурс. Тогда β0 будет определять количество возможных параллельных процессов.

Примером задачи, в которой требуется отыскать максимальные независимые множества, является известная задача о восьми ферзях: расставить на шахматной доске 8 ферзей так, чтобы они не били друг друга. Для решения достаточно представить доску в виде графа с 64 вершинами (соответствующими клеткам доски), которые смежны, если клетки находятся на одной вертикали, горизонтали или диагонали.

Нахождение всех максимальных независимых множеств можно осуществить последовательным перебором независимых множеств с одновременной проверкой каждого множества на максимальность (путем добавления к исследуемому множеству дополнительной, не принадлежащей ему вершины и выяснением того, сохраняется ли независимость) и запоминанием максимальных множеств. С увеличением числа вершин этот метод поиска становится с вычислительной точки зрения громоздким, поэтому его удобно использовать только для небольших графов, например, с числом вершин, не превосходящих 20. Однако число максимальных независимых множеств увеличивается, но при выполнении процедуры большое число независимых множеств формируется, а затем вычеркивается, так как обнаруживается, что они содержатся в других, ранее полученных множествах, и поэтому не являются максимальными.

Используем систематический метод перебора Брона и Кэрбоша [2], который позволяет обходить указанные трудности. В этом методе не нужно запоминать генерируемые независимые множества для проверки их на максимальность путем сравнения с ранее сформированными множествами.

Введем необходимые обозначения обоснуем алгоритм нахождения всех максимальных независимых множеств.

В процессе поиска  на некотором этапе k  независимое множество вершин Sk расширяется путем добавления к нему подходящим образом выбранной вершины (чтобы получилось новое независимое множество Sk+1) на этапе k+1, и так поступают до тех пор, пока добавление вершин станет невозможным, а порожденное множество не станет максимально независимым множеством. Пусть Qk будет на этапе k наибольшим множеством вершин, для которого SkQk=, то есть после добавления любой вершины из Qk в Sk получится независимое множество Sk+1. В некоторый произвольный момент работы алгоритма множество Qk состоит из вершин двух типов: подмножества Qk- тех вершин, которые уже использовались в процессе поиска для расширения множества Sk, и подмножества Qk+ таких вершин, которые еще не использовались. Тогда дальнейшее ветвление в дереве поиска включает процедуру выбора вершины xikQk+, добавления ее к Sk

Sk+1 = Sk{xik}

и порождения новых множеств:

Qk-+1 = Qk- \ Г(xik);

Qk++1 = Qk+ \ (Г(xik)  {xik}).

Шаг возвращения алгоритма состоит в удалении вершины xik из Sk+1, чтобы вернуться к Sk, изъятии xik из старого множества Qk+ и добавлении xik к старому множеству Qk- для формирования новых множеств Qk- и Qk+.

Множество Sk является максимально независимым множеством только тогда, когда невозможно его дальнейшее расширение, то есть когда Qk+=. Если Qk-, то текущее множество Sk было расширено на некотором предшествующем этапе работы алгоритма путем добавления вершины из Qk-, и поэтому не является максимально независимым множеством. Таким образом, необходимым и достаточным условием того, что Sk  максимально независимое множество, является выполнение равенств:

Qk+ = Qk- = .

Если очередной этап работы алгоритма наступает тогда, когда существует некоторая вершина xQk-, для которой Г(x)Qk+=, то безразлично, какая из вершин, принадлежащих Qk+, использовалась для расширения Sk, и это справедливо при любом числе дальнейших ветвлений. Вершина x не может быть удалена из Qp- на любом следующем шаге p > k. Таким образом, существование x, такого что

хQk-  и  Г(x)Qk+ =  (4.5)

является достаточным для осуществления шага возвращения, потому что из Sk при всяком дальнейшем ветвлении уже не получится максимально независимое множество.

Если k=0, то возвращение выполнить невозможно, поэтому при k=0 осуществляется переход на прямой шаг.