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

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

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

Приближенный алгоритм для задачи о вершинном покрытии

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

Работа алгоритма начинается с создания пустого множества X и состоит в выполнении однотипных шагов, в результате каждого из которых к множеству X добавляются некоторые вершины. Допустим, перед очередным шагом имеется некоторое множество вершин X. Если оно покрывает все ребра (т.е. каждое ребро инцидентно одной из этих вершин), то процесс заканчивается и множество X принимается в качестве искомого вершинного покрытия. В противном случае выбирается какое-нибудь непокрытое ребро (a,b), и вершины a и b добавляются к множеству X.

Для полного описания алгоритма нужно бы еще сформулировать правило выбора ребра (a,b). Однако для оценки степени приближения, которая будет сейчас получена, это не имеет значения. Можно считать, что какое-то правило выбрано.

Обозначим через \beta'(G) мощность вершинного покрытия, которое получится при применении этого алгоритма к графу G, и докажем, что \beta'(G)\le 2\beta (G). Иначе говоря, полученное с помощью этого алгоритма решение не более чем в два раза отличается от оптимального.

Действительно, допустим, что до окончания работы алгоритм выполняет k шагов, добавляя к множеству X вершины ребер (a_{1},b_{1}),\ldots, (a_{k},b_{k}). Тогда \beta'(G)=2k. Никакие два из этих k ребер не имеют общей вершины. Значит, чтобы покрыть все эти ребра, нужно не меньше k вершин. Следовательно, \beta (G)\ge k и \beta '(G)\le 2\beta
(G).

Перебор максимальных независимых множеств

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

Предположим, что вершинами заданного графа G являются числа 1,2\ldots n. Рассматривая любое подмножество множества вершин, будем выписывать его элементы в порядке возрастания. Лексикографический порядок на множестве получающихся таким образом кортежей порождает линейный порядок на множестве всех подмножеств множества вершин, который тоже будем называть лексикографическим. Например, множество \{2,5,7,9\} предшествует в этом порядке множеству \{2,5,8\}, а множество \{2,5,7,10\} занимает промежуточное положение между этими двумя.

Нетрудно найти лексикографически первое максимальное независимое множество: нужно на каждом шаге брать наименьшую из оставшихся вершин, добавлять ее к построенному независимому множеству, а все смежные с ней вершины удалять из графа. Если граф задан списками смежности, то это построение выполняется за время O(m).

Допустим теперь, что U\subseteq VG, G' - подграф графа G, порожденный множеством U, и пусть имеется список L всех максимальных независимых множеств графа G. Тогда однократным просмотром списка L можно получить список L' всех максимальных независимых множеств графа G'. Это основано на следующих очевидных утверждениях:

  1. каждое максимальное независимое множество графа G' содержится в некотором максимальном независимом множестве графа G ;
  2. для каждого максимального независимого множества N графа G' имеется точно одно максимальное независимое множество M графа G, такое, что N\subseteq M и M-N - лексикографически первое среди максимальных независимых множеств подграфа, порожденного множеством VG-(U\cup V(N)) (последнее утверждение верно и в том случае, если VG-(U\cup V(N))=\varnothing, если считать, что пустое множество является максимальным независимым множеством в графе с пустым множеством вершин).
< Лекция 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(...)

}

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

 

 

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