Скажите, пожалуйста, можно ли еще получить документ о прохождении курса ("Графы и алгоритмы", декабрь 2020) после предоставления всех дополнительных необходимых документов? |
Лекция 9: Независимые множества, клики, вершинные покрытия.
Приближенный алгоритм для задачи о вершинном покрытии
Иногда для алгоритма, не гарантирующего точного решения, удается получить оценку степени приближения, т.е. отклонения получаемого решения от точного. В таком случае говорят о приближенном алгоритме. Рассмотрим один простой приближенный алгоритм для задачи о вершинном покрытии.
Работа алгоритма начинается с создания пустого
множества и состоит в выполнении однотипных шагов, в результате
каждого из которых к
множеству
добавляются некоторые вершины. Допустим, перед
очередным шагом имеется некоторое множество вершин
. Если оно
покрывает все ребра (т.е. каждое ребро инцидентно одной из этих вершин),
то процесс заканчивается и множество
принимается в качестве
искомого вершинного покрытия. В противном случае выбирается какое-нибудь
непокрытое ребро
, и
вершины
и
добавляются
к множеству
.
Для полного описания алгоритма нужно бы еще сформулировать правило выбора
ребра . Однако для оценки степени приближения, которая будет
сейчас получена, это не имеет значения. Можно считать, что какое-то
правило выбрано.
Обозначим через мощность вершинного покрытия, которое
получится при применении этого алгоритма к графу
, и докажем,
что
. Иначе говоря, полученное с помощью
этого
алгоритма решение не более чем в два раза отличается от оптимального.
Действительно, допустим, что до окончания работы алгоритм
выполняет шагов, добавляя к множеству
вершины
ребер
,
.
Тогда
. Никакие
два из этих
ребер не имеют общей вершины. Значит, чтобы покрыть
все эти ребра, нужно не меньше
вершин.
Следовательно,
и
.
Перебор максимальных независимых множеств
Основной недостаток изложенного выше способа организации перебора состоит в том, что при нем часто рассматриваются не только максимальные независимые множества. Это означает, что делается заведомо лишняя работа, так как наибольшее независимое множество находится, конечно, среди максимальных. Кроме того в некоторых случаях бывает необходимо знать все максимальные независимые множества. Рассмотрим алгоритм, который строит все максимальные и только максимальные независимые множества графа.
Предположим, что вершинами заданного графа являются
числа
. Рассматривая любое подмножество множества
вершин, будем
выписывать его элементы в порядке возрастания. Лексикографический порядок
на множестве получающихся таким образом кортежей порождает линейный
порядок на множестве всех подмножеств множества вершин, который тоже будем
называть лексикографическим. Например,
множество
предшествует в этом порядке
множеству
, а множество
занимает
промежуточное положение между этими двумя.
Нетрудно найти лексикографически первое максимальное независимое
множество: нужно на каждом шаге брать наименьшую из оставшихся вершин,
добавлять ее к построенному независимому множеству, а все смежные с ней
вершины удалять из графа. Если граф задан списками смежности, то это
построение выполняется за время .
Допустим теперь, что ,
-
подграф графа
,
порожденный множеством
, и пусть имеется
список
всех максимальных независимых множеств
графа
. Тогда однократным
просмотром списка
можно получить список
всех
максимальных независимых множеств графа
. Это основано на
следующих очевидных утверждениях:
- каждое максимальное независимое множество графа
содержится в некотором максимальном независимом множестве графа
;
- для каждого максимального независимого
множества
графа
имеется точно одно максимальное независимое множество
графа
, такое, что
и
- лексикографически первое среди максимальных независимых множеств подграфа, порожденного множеством
(последнее утверждение верно и в том случае, если
, если считать, что пустое множество является максимальным независимым множеством в графе с пустым множеством вершин).