- •4.1. Основные понятия и определения теории графов
- •4.2. Типы графов
- •4.3. Матричные представления графов
- •4.5. Операции над графами
- •4.6. Метрические характеристики графа. Расстояние в графах
- •Затем, изымая степень, соответствующую вершине , получим
- •4.8. Достижимость и связность
- •4.8.1. Основные определения
- •4.8.2. Матрицы достижимостей
- •4.8.3. Нахождение сильных компонент
- •Алгоритм нахождения сильных компонент графа можно описать следующей последовательностью шагов
- •Таким образом, сильные компоненты графа можно находить по следующему алгоритму.
- •4.8.4. Базы и антибазы
- •4.9. Независимые и доминирующие множества
- •4.9.1. Нахождение всех максимальных независимых множеств
- •Опишем алгоритм нахождения всех максимальных независимых множеств вершин графа.
- •4.10. Покрытия и раскраски
- •4.11. Деревья, остовы и кодеревья
- •4.11.1. Основные определения
- •4.11.2. Алгоритм построения остова неорграфа
- •4.11.4. Обходы графа по глубине и ширине
- •Доказательство.
- •4.11.5. Упорядоченные и бинарные деревья
- •4.12. Эйлеровы циклы. Гамильтонов контур
- •4.12.1. Метод Флёри построения эйлерова цикла
- •Матрица м данного графа имеет вид
- •4.12.3. Алгебраический метод выделения гамильтоновых путей и контуров
- •4.13. Плоские и планарные графы
- •4.13.1. Формула Эйлера
- •4.13.2. Критерии анализа планарности
- •4.13.3. Алгоритм укладки графа на плоскости
- •Задачи и упражнения
- •5. Разрешимые и неразрешимые проблемы
- •Библиографический список
4.9.1. Нахождение всех максимальных независимых множеств
Задача отыскания экстремальных независимых и покрывающих множеств возникает во многих практических случаях. Например, пусть есть множество процессов, использующих неразделяемые ресурсы. Соединим ребрами вершины, соответствующие процессам, которым требуется один и тот же ресурс. Тогда β0 будет определять количество возможных параллельных процессов.
Примером задачи, в которой требуется отыскать максимальные независимые множества, является известная задача о восьми ферзях: расставить на шахматной доске 8 ферзей так, чтобы они не били друг друга. Для решения достаточно представить доску в виде графа с 64 вершинами (соответствующими клеткам доски), которые смежны, если клетки находятся на одной вертикали, горизонтали или диагонали.
Нахождение всех максимальных независимых множеств можно осуществить последовательным перебором независимых множеств с одновременной проверкой каждого множества на максимальность (путем добавления к исследуемому множеству дополнительной, не принадлежащей ему вершины и выяснением того, сохраняется ли независимость) и запоминанием максимальных множеств. С увеличением числа вершин этот метод поиска становится с вычислительной точки зрения громоздким, поэтому его удобно использовать только для небольших графов, например, с числом вершин, не превосходящих 20. Однако число максимальных независимых множеств увеличивается, но при выполнении процедуры большое число независимых множеств формируется, а затем вычеркивается, так как обнаруживается, что они содержатся в других, ранее полученных множествах, и поэтому не являются максимальными.
Используем систематический метод перебора Брона и Кэрбоша [2], который позволяет обходить указанные трудности. В этом методе не нужно запоминать генерируемые независимые множества для проверки их на максимальность путем сравнения с ранее сформированными множествами.
Введем необходимые обозначения обоснуем алгоритм нахождения всех максимальных независимых множеств.
В процессе поиска на некотором этапе k независимое множество вершин Sk расширяется путем добавления к нему подходящим образом выбранной вершины (чтобы получилось новое независимое множество Sk+1) на этапе k+1, и так поступают до тех пор, пока добавление вершин станет невозможным, а порожденное множество не станет максимально независимым множеством. Пусть Qk будет на этапе k наибольшим множеством вершин, для которого Sk∩Qk=, то есть после добавления любой вершины из 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 осуществляется переход на прямой шаг.