Вы находитесь на странице: 1из 11

Раздел 2.

Независимые множества вершин и


родственные задачи
1.1. Независимые множества
Во многих прикладных задачах требуется найти в
конечном множестве объектов максимальную систему
объектов, попарно не связанных друг с другом, или же
выбрать минимальную систему объектов, связанных со
всеми другими. Формулировки подобных задач на языке
теории графов приводят к понятиям независимости и
покрытия.
Множество вершин U графа G = (V,X) называется
независимым (внутренне устойчивым), если никакие
две вершины из этого множества не смежны. Другими
словами, если U ⊆V и U независимо в графе G, то
порожденный подграф G(U) является пустым. Очевидно,
что если при этом U*⊆ U, то U* - также независимое
множество.
Внутренне устойчивое множество называется
максимальным, если оно не является собственным
подмножеством некоторого другого независимого
множества.
Наибольшее по мощности независимое множество
называется наибольшим.
Ясно, что наибольшее независимое множество
является максимальным. Обратное, вообще говоря,
неверно.
Число вершин в наибольшем независимом
множестве графа G называется числом независимости
(или числом внутренней устойчивости) этого графа и
обозначается α (G).
Например, для графа G, изображенного на рис.1.,
α (G)=4, множества вершин {1,2,3,7}, {1,2,3,8},
{2,3,5,7}, {2,3,5,8} являются наибольшими
независимыми, а {4,7} – максимальное независимое
множество, не являющееся наибольшим.
2
1 3 7
5 4 6
8
Рис. 1.

Понятие внутренней устойчивости естественным


образом переносятся и на случай ориентированного
графа.

Алгоритм с возвратом
Очевидный алгоритм, который можно применить для
нахождения независимых множеств вершин, это
«полный перебор всех возможностей»: генерируем все
возможные подмножества вершин заданного графа или
орграфа и проверяем, является ли оно независимым.
Среди всех независимых множеств выбираем
максимальные. Опишем теперь общий метод,
позволяющий значительно сократить число шагов в
алгоритмах полного перебора всех возможностей. Чтобы
применить этот метод, представим искомое решение в
виде последовательности <x1,…x n>. Основная идея
метода состоит в том, что решение строится
последовательно, начиная с пустой последовательности
ε (длины 0). Вообще, имея данное частичное решение
<x1,…x k>, мы стараемся найти такое допустимое
значение x k+1, относительно которого мы не можем сразу
сказать, что <x1,…x k, x k+1> можно расширить до
некоторого решения (либо <x1,…x k, x k+1> уже является
решением). Если такое предполагаемое, но еще не
использованное значение x k+1 существует, то мы
добавляем его к нашему частичному решению и
продолжаем процесс для последовательности <x1,…x k, x
k+1>. Если его не существует, то мы возвращаемся к
нашему частичному решению <x1,…x k-1> и продолжаем
процесс, отыскивая новое, еще не использованное
допустимое значение xk – отсюда название «алгоритм с
возвратом» (англ.: backtracking).

С понятием независимости в графе связано понятие


доминирования или внешней устойчивости.
Подмножество вершин U графа G = (V,X) называется
доминирующим или внешне устойчивым, если
каждая вершина из V\U смежна с некоторой вершиной из
U. Иначе говоря, каждая вершина графа находится на
расстоянии не более 1 от доминирующего множества.
Внешне устойчивое множество U называется
минимальным, если при удалении из него вершины
получается множество, не являющееся внешне
устойчивым.
Доминирующее множество, состоящее из
наименьшего числа вершин, называется наименьшим.
Так для графа, изображенного на рис. 1,
минимальным внешне устойчивым множеством является
множество {4,6}.
Подмножество вершин графа, являющееся как
внутренне устойчивым, так и внешне устойчивым,
называется ядром.
Очевидно, что ядра графа – это максимальные
независимые и минимальные доминирующие множества.
Понятия независимого, доминирующего множеств, а
также ядра естественным образом переносится на
ориентированные графы.

1.2. Покрытия

Введем еще одно понятие, связанное с понятием


внутренне устойчивого множества.
Будем говорить, что вершина v и ребро x графа
покрывают друг друга, если они инцидентны. Таким
образом, ребро x={v,w} покрывает вершины v и w, а
каждая из этих вершин покрывает ребро x.
Подмножество вершин U⊆V называется покрытием
(вершинным покрытием, опорой) графа G, если
каждое ребро из X инцидентно хотя бы одной вершине
из U.
Покрытие графа называется минимальным, если
оно не содержит покрытия с меньшим числом вершин, и
наименьшим, если число вершин в нем наименьшее
среди всех покрытий графа G.
Число вершин в наименьшем покрытии графа G
называется числом покрытия ( или числом
вершинного покрытия) графа G и обозначается через
β 0(G).
Например, для графа, изображенного на рис.1,
каждое из множеств U1={4,5,6,8}, U2={4,5,6,7},
U3={1,2,3,5,6,8} является покрытием, причем U1 и U2 –
наименьшие покрытия, а U3 – минимальное покрытие.
Между покрытиями и независимыми множествами в
графе существует тесная связь, а именно, множество
вершин U графа G является (наименьшим,
минимальным) покрытием тогда и только тогда, когда
U*= V \U – (наибольшее, максимальное) независимое
множество.

Задача 1. Найти все минимальные опоры в


заданном орграфе, используя алгоритм нахождения
независимых множеств.

Задача 2. Найти наименьшую опору в заданном


орграфе, используя алгоритм нахождения независимых
множеств.
.

1.3. Клика

Антиподом понятия независимого множества


является понятие клики.
Подмножество U вершин графа G называется
кликой, если любые две входящие в него вершины
смежны, т.е. если порожденный подграф G(U) является
полным.
Клика называется максимальной, если она не
содержится в клике с большим числом вершин, и
наибольшей, если число вершин в ней наибольшее
среди всех клик.
Число вершин в наибольшей клике графа G
называется его плотностью (или кликовым числом) и
обозначается через ϕ (G). Как и в случае независимых
множеств, максимальная клика графа может оказаться
не наибольшей.
Понятие клики, в частности максимальной клики,
используется в различных социологических теориях
( вопросы, связанные с голосованием, альянсами и т.п.),
а также в теории игр.
Очевидно следующее утверждение: подмножество
вершин графа G является кликой тогда и только тогда,
когда оно является независимым множеством в
дополнительном графе G*.

Задача 3. Найти все максимальные клики в


заданном орграфе, используя алгоритм нахождения
независимых множеств.

Задача 4. Найти наибольшую клику в заданном


орграфе, используя алгоритм нахождения независимых
множеств.

1.4. Раскраска графа

Задачи раскраски вершин или ребер графа занимают


важное место в теории графов. К построению раскрасок
сводится целый ряд практических задач. Характерной
особенностью этих задач является существование
объектов, которые по каким-либо причинам не могут
быть объединены в одну группу.
Пусть G – некоторый граф, k – натуральное число.
Произвольная функция вида f: V → {1,2,…,k} называется
вершинной k-раскраской или просто k-раскраской
графа G.
Раскраска называется правильной, если f(v)≠f(u) для
любых смежных вершин v и u. Граф, для которого
существует правильная k-раскраска, называется k-
раскрашиваемым.
Минимальное число k, при котором граф G является
k-раскрашиваемым, называется хроматическим
числом этого графа и обозначается χ (G). Если χ (G)=k, то
граф называется k-хроматическим. Правильная k-
раскраска графа при k =χ (G) называется минимальной.

Алгоритм раскрашивания графов

1. Выберем в графе G некоторое максимальное


независимое множество вершин U. Покрасим
все вершины данного множества в один цвет.
2. Выберем максимальное независимое множество
вершин U1 в графе G1, который получается из
графа G удалением множества вершин U и всех
инцидентных им ребер. Покрасим вершины
множества U1 в очередной цвет.
3. Шаг 2 повторять до тех пор, пока в графе G не
будут раскрашены все вершины.

Реберной k-раскраской графа G называется


функция φ, ставящая в соответствие каждому его ребру
x число φ(x) из множества {1,2,…,k}. Реберная окраска
называется правильной, если смежные ребра имеют
разные цвета. Граф, допускающий правильную
реберную k-раскраску, называется реберно k-
раскрашиваемым. Минимальное число k, при котором
граф G является реберно k-раскрашиваемым, называется
хроматическим классом (хроматическим индексом или
реберным хроматическим числом) графа G и
обозначается через χ ‘(G). Если χ ‘(G)=k, то граф
называется реберно k-хроматическим.
Поскольку ребра любого графа G смежны тогда,
когда смежны соответствующие вершины реберного
графа L(G) (правило построения реберного графа смотри
ниже), то χ ‘(G) можно определить как хроматическое
число графа L(G), т.е. χ ‘(G)=χ (L(G)).
Задача 5. Найти хроматическое число заданного
графа, используя алгоритм нахождения независимых
множеств, указать, какие вершины в какой цвет
окрашиваются.

Задача 6. Найти хроматический класс заданного


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

1.5. Паросочетания

Не менее важным, чем понятие вершинной


независимости, является понятие реберной
независимости.
Произвольное подмножество попарно несмежных
ребер графа называется паросочетанием ( или
независимым множеством ребер).
В качестве иллюстрации рассмотрим граф,
изображенный на рис.2. В нем паросочетаниями
являются, например, {х1,х3,х5,х7}, {х1}, {х2}, {х2,х6}.

х1 х2 х3 х4 х5 х6 х7

Рис. 2.
Паросочетание графа G называется максимальным,
если оно не содержится в паросочетании с большим
числом ребер, и наибольшим, если число ребер в нем
наибольшее среди всех паросочетаний графа G.
Число ребер в наибольшем паросочетании графа G
называется числом паросочетания и обозначается
α 1(G).
Независимые множества ребер графа G находятся во
взаимно однозначном соответствии с независимыми
множествами вершин реберного графа L(G)=(V1,X1),
который для графа G=(V,X) определяется следующими
двумя условиями:
1. V1 = X,
2. вершины х1 и х2 смежны в L(G) тогда и только
тогда, когда ребра х1 и х2 смежны в G.
На рис. 3 изображены два графа – G и L(G). Вершины
графа G – темные кружки, вершины графа L(G) – светлые
кружки. Ребра графа G – тонкие линии, ребра графа L(G)
– жирные линии.

Рис. 3
Задача 7. Найти все максимальные паросочетания в
заданном графе, используя алгоритм нахождения
независимых множеств.

Задача 8. Найти наибольшее паросочетание в


заданном графе, используя алгоритм нахождения
независимых множеств.

1.5. Двудольные графы и паросочетания

Граф G = (V,X) называется двудольным, если


множество V его вершин допускает разбиение на два
непересекающихся подмножества V1 и V2 (две доли),
причем каждое ребро графа соединяет вершины из
разных долей.
Обозначим G = (V1,V2, X) двудольный граф G с долями
V1 и V2. Будем считать, что  V1 ≤  V2 .
Двудольный граф G = (V1,V2, X) есть полный
двудольный граф, если каждая вершина из V1 соединена
ребром с каждой вершиной из V2.
Паросочетанием Р для двудольного графа
G=(V1,V2,X) называется любое множество попарно
несмежных ребер в G.
Р есть наибольшее паросочетание для G , если
число ребер в Р наибольшее среди всех возможных
паросочетаний для G.
Р есть максимальное паросочетание (тупиковое)
для G, если к Р нельзя добавить ни одного ребра из G,
не нарушив условия паросочетаемости.
Р есть совершенное паросочетание для G, если Р
имеет  V1 ребер.
Наибольшее паросочетание максимально.
Совершенное паро-сочетание является и наибольшим, и
максимальным.
Простая цепь С ненулевой длины в G , ребра которой
попеременно лежат и не лежат в Р, называется
чередующейся цепью (относительно паросочетания
Р).
Эта цепь С называется Р-увеличителем, если
первое и последнее ребро цепи С лежат вне Р.
С помощью Р-увеличителя паросочетание Р можно
переделать в другое паросочетание Р* для G с числом
ребер в Р* на единицу больше, чем в Р. Для этого
достаточно все ребра в С, лежащие вне Р, добавить к Р,
а ребра в С, лежащие в Р, удалить из Р. Для
получившегося паросочетания Р* можно снова искать
увеличитель, и так далее, последовательно расширяя
получающиеся паросочетания, пока это возможно.

Алгоритм
построения совершенного паросочетания
для двудольного графа
Данные: матрица смежности двудольного графа G =
(U,V, X)
Результат: матрица смежности совершенного
паросочетания или множество ребер (дуг),
входящих в совершенное паросочетание

1. Выберем исходное паросочетание P1, например одно


ребро графа G.
2. Предположим, что паросочетание Pi=(Ui,Vi,Xi) для
графа G построено. Построим паросочетание Pi+1 для G
следующим образом: выбираем u из U, не
принадлежащую Pi. Если такой вершины u нет, то Pi
есть совершенное паросочетание. Строим в G
чередующуюся цепь µ i = [u1,v1,u2,v2,...up,vp] с u1=u, в
которой всякое ребро (ui,vi) не принадлежит Xi , а
всякое ребро (vi,ui+1) принадлежит Xi. Если такой цепи
нет, то совершенного паросочетания граф G не имеет,
а паросочетание Pi является для G максимальным
(тупиковым). Цепь µ i есть Pi-увеличитель.
3. Выбрасываем из Pi все ребра (vi,ui+1) и добавляем все
ребра (ui,vi) цепи µ i . Получившееся паросочетание Pi+1
на одно ребро длиннее паросочетания Pi. Переходим к
п.1.
Пример. Построим совершенное паросочетание для
двудольного графа G = (U,V, X), U={u1,u2,u3,u4,u5,u6},
V={v1,v2,v3,v4,v5,v6,v7}, матрица смежности которого имеет
вид
v1 v2 v3 v4 v5 v6 v7
u1 1 1 0 0 1 0 0
u2 1 0 1 0 1 0 0
u3 1 0 0 0 0 1 0
u4 0 0 1 1 0 1 1
u5 0 0 0 0 1 0 1
u6 0 0 0 1 0 1 1

Сначала паросочетание будем расширять за счет


единичных ребер, а затем с помощью чередующейся
цепи.
Шаг 1. Выбираем исходное паросочетание Р1={u1,v1}.
Добавляем ребро {u2,v3}.
Шаг 2. P2={ {u1,v1}, {u2,v3} }. Добавляем ребро {u3,v6}.
Шаг 3. P3={ {u1,v1}, {u2,v3},{u3,v6}}. Добавляем ребро
{u4,v4}.
Шаг 4. P4={ {u1,v1}, {u2,v3},{u3,v6},{u4,v4}}. Добавляем ребро {u5,v5}.
Шаг 5. P5={ {u1,v1}, {u2,v3},{u3,v6},{u4,v4},{u5,v5}}.
Найдем чередующуюся цепь:
µ 1= [u6,v4,u4,v3,u2,v1,u1,v2]
0 1 0 1 0 1 0
1 0 1 0 1 0 1
Первая единица в первой строке из нулей и единиц
означает, что соответствующее этой единице ребро
{v4,u4} лежит в P5. Аналогично для всех остальных
единиц. Убираем соответствующие им ребра из P5, а
вместо них добавляем ребра {u6,v4},{u4,v3}, {u2,v1}, {u1,v2},
соответствующие единицам второй строки. В
результате получим паросочетание P6, число ребер в
котором на одно больше, чем в P5.
Шаг 6. P6={ {u1,v2}, {u2,v1}, {u3,v6}, {u4,v3},{u5,v5},{u6,v4}}.
Полученное паросочетание является совершенным для
исходного графа.

Задача 9. Найти совершенное паросочетание в


заданном двудольном графе, используя алгоритм
чередующихся цепей.