Максимальное независимое множество в графе: разбор

Максимальное независимое множество в графе - одна из центральных конструкций теории графов, вокруг которой выстроены задачи о вершинном покрытии, клике и раскраске. На практике её встречают, когда нужно выбрать как можно больше попарно несовместимых объектов: непересекающиеся интервалы, неконфликтующие задачи, частоты без взаимных помех. Ниже разберём строгое определение, ключевую разницу между «максимальным» и «наибольшим» множеством, связь с дополнением и вершинным покрытием, а также способы искать такое множество вручную и алгоритмически.
Что такое независимое множество вершин
Пусть дан неориентированный граф . Множество вершин называется независимым (или внутренне устойчивым), если никакие две вершины из не соединены ребром:
Иными словами, - это набор попарно несмежных вершин. Пустое множество и любая одиночная вершина всегда независимы, поэтому интерес представляют максимально возможные по размеру такие наборы. Содержательно независимое множество моделирует «совместимый» выбор: если ребро означает конфликт, то независимое множество - это объекты, которые можно взять одновременно без противоречий.
Чтобы сразу увидеть ответ на конкретном графе, опишите его рёбра в инструменте ниже - он найдёт независимые множества, число независимости и связанное вершинное покрытие с пошаговым разбором.
Максимальное и наибольшее: в чём разница
Это место, где чаще всего возникает путаница, потому что в русской терминологии два разных понятия звучат похоже.
Максимальное (по включению) независимое множество - такое , к которому нельзя добавить ни одной вершины, не нарушив независимости. То есть каждая вершина вне смежна хотя бы с одной вершиной из . Это локальное свойство: множество «насыщено».
Наибольшее независимое множество - такое , размер которого максимален среди всех независимых множеств графа. Его мощность называют числом независимости и обозначают :
Любое наибольшее множество автоматически максимально по включению, но обратное неверно. Классический пример - путь из четырёх вершин . Множество дополнить нельзя ( смежна с и , а … здесь нюанс: как раз не максимально, его можно расширить до ). А вот - максимально по включению и наибольшее, . Зато в звезде «коготь» центр образует максимальное по включению множество размера , тогда как наибольшее - это три листа, . Локально насыщенное множество может быть в разы меньше глобального оптимума.
В переводной литературе «maximal» = максимальное по включению (нельзя добавить вершину), а «maximum» = наибольшее по размеру. По-русски их часто путают. Если в задаче спрашивают число независимости $\alpha(G)$ - нужно именно наибольшее множество, а не любое насыщенное.
Число независимости, клика и вершинное покрытие
Независимое множество тесно связано с двумя другими понятиями, и эти связи позволяют пересчитывать одну характеристику через другую.
Клика. Множество вершин, попарно соединённых рёбрами, называется кликой. Независимое множество в графе - это в точности клика в его дополнении (граф на тех же вершинах, где рёбра ровно там, где их не было в ). Отсюда фундаментальное равенство для кликового числа :
Вершинное покрытие. Множество - вершинное покрытие, если каждое ребро имеет хотя бы один конец в . Дополнение независимого множества всегда является вершинным покрытием, и наоборот. Это даёт теорему Галлаи:
где - размер наименьшего вершинного покрытия. Поэтому, найдя наибольшее независимое множество, вы бесплатно получаете и минимальное покрытие как . Подробнее метрики структуры графа разбираются в материале про эксцентриситет вершины графа.
Как искать множество вручную
Для небольших графов работает прямой перебор с отсечениями.
- Постройте список смежности: для каждой вершины - её соседи.
- Жадно соберите одно максимальное по включению множество: берите вершину, удаляйте её и всех соседей, повторяйте. Это даст нижнюю оценку для .
- Чтобы убедиться, что найдено именно наибольшее, переберите подмножества убывающего размера или используйте ветвление: выберите вершину - либо она в множестве (тогда соседи исключаются), либо нет (тогда обязана войти хотя бы одна из её соседей или сама покрывается покрытием).
Например, в цикле (пятиугольник ) жадность из вершины даёт , добавить нечего - это максимальное по включению множество размера . И действительно : три попарно несмежные вершины в пятиугольнике не помещаются. А в цикле ответ уже , то есть .
Полезная проверка: для любого графа $\alpha(G) \ge n / (\Delta + 1)$, где $n$ - число вершин, а $\Delta$ - максимальная степень. Эта оценка снизу помогает понять, не слишком ли мало вершин вы набрали жадным алгоритмом.
Сложность задачи и точные алгоритмы
Поиск наибольшего независимого множества - NP-трудная задача; соответствующая задача распознавания «есть ли независимое множество размера » NP-полна. Поэтому полиномиального алгоритма для произвольных графов не известно, и точные методы экспоненциальны в худшем случае.
Базовый точный подход - ветвление по вершине: выбираем вершину максимальной степени и рассматриваем два случая - входит в множество (удаляем и всех её соседей) либо не входит (удаляем только ). Рекурсия с такими отсечениями работает заметно быстрее наивного перебора подмножеств; лучшие известные алгоритмы дают порядка . Для разреженных графов и графов с малой шириной дерева существуют полиномиальные методы.
Приближённые и жадные методы
Поскольку точное решение дорого, на больших графах применяют эвристики:
- Жадный по минимальной степени: на каждом шаге берём вершину с наименьшим числом соседей, добавляем в , удаляем её вместе с соседями. Часто даёт хороший результат на разреженных графах.
- Локальный поиск (2-improvement): пытаемся заменить одну вершину множества на две несмежные снаружи - увеличивая .
- Для планарных графов существует схема приближения с любой точностью; для общего случая задача плохо приближается - гарантированное приближение лучше невозможно (при ).
Где это применяется
Модель «вершины - объекты, рёбра - конфликты» встречается повсеместно. Планирование непересекающихся событий сводится к независимому множеству в графе пересечений интервалов (там, кстати, задача решается жадно за полиномиальное время). Распределение частот в беспроводных сетях, выбор несоседних клеток, отбор признаков без сильной корреляции, упаковка в комбинаторике - всё это варианты одной задачи.
Частые ошибки
- Путают «максимальное» и «наибольшее». Жадно собранное насыщенное множество максимально по включению, но почти никогда не равно .
- Считают одиночную вершину независимым множеством «по умолчанию максимальным». Максимальность нужно проверять: либо нельзя добавить вершину (по включению), либо доказать оптимальность размера.
- Забывают про изолированные вершины. Вершина без рёбер обязана входить в любое наибольшее независимое множество - её всегда выгодно взять.
- Применяют жадный алгоритм и считают результат точным. Жадность даёт лишь оценку снизу для , а не гарантированный оптимум.
- Игнорируют связь с покрытием. Проверить ответ легко: должно быть вершинным покрытием, и .
FAQ
Чем отличается независимое множество от вершинного покрытия? Это дополняющие понятия. независимо тогда и только тогда, когда - вершинное покрытие. Наибольшему независимому множеству соответствует наименьшее покрытие, и их размеры в сумме дают число вершин: .
Как число независимости связано с кликой? Независимое множество в - это клика в дополнении , поэтому . Любой алгоритм поиска клики работает и для независимого множества, если запустить его на дополнении графа.
Всегда ли наибольшее множество единственно? Нет. Граф может иметь несколько разных наибольших независимых множеств одного размера . Например, в полном двудольном графе обе доли - наибольшие множества размера .
Коротко
Независимое множество - набор попарно несмежных вершин; максимальное по включению нельзя расширить, наибольшее имеет максимальный размер (число независимости). Оно дополняет минимальное вершинное покрытие () и равно клике в дополнении графа (). Поиск наибольшего множества NP-труден: на малых графах решается ветвлением и перебором, на больших - жадными эвристиками и локальным поиском, дающими лишь оценку снизу.
Читайте также

Алгоритм Прима - как построить остовное дерево по шагам
Разбираем, как алгоритм Прима шаг за шагом строит минимальное остовное дерево графа: идея жадного выбора, лемма о разрезе и трассировка на конкретном примере.

Хроматический полином графа: как считать и применять
Что такое хроматический полином графа, как его вычислить через теорему об удалении и стягивании ребра, свойства коэффициентов и связь с хроматическим числом. Формулы и пошаговый пример.

Задача о k-центрах в графе: постановка и алгоритмы
Что такое задача о k-центрах в графе: постановка как минимаксная задача размещения, NP-трудность, жадный 2-приближённый алгоритм Гонзалеса и связь с радиусом графа.