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