Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3533 / 125 | Оценка: 4.44 / 4.11 | Длительность: 13:45:00
Специальности: Программист, Математик

Лекция 9: Независимые множества, клики, вершинные покрытия.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

Стратегия перебора для задачи о независимом множестве

Пусть G - граф, в котором требуется найти наибольшее независимое множество. Выберем в нем произвольную вершину a. Обозначим через G_{1} подграф, получающийся удалением из графа G вершины a, т.е. G_{1} =G-a, а через G_{2} - подграф, получающийся удалением из G всех вершин, смежных с a. На рисунке 9.2 показаны графы G_{1} и G_{2}, получающиеся из графа G, изображенного на рис. 9.1, при a=1.


Рис. 9.2.

Пусть X - какое-нибудь независимое множество графа G. Если оно не содержит вершины a, то оно является независимым множеством графа G_{1}. Если же a\in X, то никакая вершина, смежная с a, не принадлежит X. В этом случае множество X является независимым множеством графа G_{2}. Заметим, что в графе G_{1} на одну вершину меньше, чем в исходном графе G. Если вершина a не является изолированной, то и в графе G_{2} вершин меньше, чем в графе G. Таким образом, задача о независимом множестве для графа G свелась к решению той же задачи для двух графов меньшего размера. Это приводит к рекуррентному соотношению для числа независимости:

\alpha (G)=\max \{ \alpha (G_{1} ),\alpha (G_{2} )\}

и к рекурсивному алгоритму для нахождения наибольшего независимого множества графа G: найдем наибольшее независимое множество X_{1} графа G_{1}, затем наибольшее независимое множество X_{2} графа G_{2} и выберем большее из этих двух множеств. В целом процесс решения задачи при этом можно рассматривать как исчерпывающий поиск в возникающем дереве подзадач. Чтобы не путать вершины дерева и вершины графа, вершины дерева будем называть узлами. Узел, не являющийся листом, называется внутренним узлом. Каждому внутреннему узлу дерева соответствует некоторый граф H и некоторая вершина этого графа x. Вершину x можно выбирать произвольно, но она не должна быть изолированной вершиной графа H. Внутренний узел имеет двух сыновей - левого и правого. Левому сыну соответствует подграф графа H, получаемый удалением вершины x, а правому - подграф, получаемый удалением всех вершин, смежных с x. Корню дерева соответствует исходный граф. Листьям соответствуют подграфы, не имеющие ребер, то есть подграфы, у которых все вершины изолированные. Множества вершин этих подграфов - это независимые множества исходного графа.

Для нахождения наибольшего независимого множества не обязательно строить все дерево полностью, а достаточно обойти его в том или ином порядке, запоминая на каждом шаге только небольшую часть информации об устройстве этого дерева. Можно, например, применить поиск в глубину для обхода дерева: сначала пройти от корня до некоторого листа, затем вернуться к предку этого листа и искать следующий лист, и т.д.

Для одного и того же графа могут получиться разные деревья в зависимости от того, как выбирается активная вершина x в каждом узле дерева. Может быть различным и число листьев в этих деревьях, а значит, и трудоемкость алгоритма, основанного на обходе дерева. Однако в любом случае листьев в дереве будет не меньше, чем максимальных независимых множеств у графа, так как каждое из этих множеств будет соответствовать некоторому листу. Так, для графа pK_{2}, т.е. графа, состоящего из p компонент связности, каждая из которых изоморфна графу K_{2}, в дереве подзадач будет 2^{p} листьев.

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Петр Петров
Петр Петров

произведение графов К(2)*О(4) фактически 4 отдельных графа К(2)?

Александр Лаврентьев
Александр Лаврентьев

много инструкций вида if - then - else

Например Procedure DFS(a) опишите каким образом следует понимать вложенность инструкций. Как в языке С ? 

т.е. следующее 

if (...) then (...)

if (...) then (...)

else(...)

 

раскрывается как 

if (...) then (...)

if (...) then (...)

         else(...)

или так :

if (...) then

 {  (...)

     if (...) then (...)

              else(...)

}

обьясните пожалуйста.

 

 

Дмитрий Крюков
Дмитрий Крюков
Россия, Москва
Андрей Посохов
Андрей Посохов
Россия, Санкт-Петербург