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

Жадные алгоритмы и матроиды

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >

Теорема 2. Если M=(E,\Phi) - матроид, то для любой весовой функции w\colon E\texto R^{+} множество A, найденное алгоритмом СПО, будет множеством наибольшего веса из \Phi. Если же M=(E,\Phi ) не является матроидом, то найдется такая функция w\colon E\texto R^{+}, что A не будет множеством наибольшего веса из \Phi.

Доказательство. Предположим, что M=(E,\Phi) является матроидом и A=\{a_{1},a_{2}\ldots a_{n}\} - множество, построенное алгоритмом СПО, причем w(a_{1})\ge w(a_{2})\ge \ldots \ge
w(a_{n}). Очевидно, A является базой матроида. Пусть B=\{b_{1},b_{2}\ldots
b_{k} \} - любое другое независимое множество и w(b_{1} )\ge w(b_{2})\ge \ldots \ge w(b_{k}). Так как A - база, то k\le n. Покажем, что w(a_{i} )\ge w(b_{i} ) для каждого i\in \{1\ldots k\}. Действительно, положим X=\{a_{1}\ldots a_{i-1} \}, Y=\{ b_{1}\ldots b_{i-1},b_{i}\} для некоторого i. Согласно условию (2) определения матроида, в множестве Y имеется такой элемент b_{j}, что b_{j} \notin X и множество X\cup \{b_{j}\} - независимое. В соответствии с алгоритмом, элементом наибольшего веса, который может быть добавлен к X так, чтобы получилось независимое множество, является a_{i}. Следовательно, w(a_{i} )\ge w(b_{j} )\ge w(b_{i}).

Теперь предположим, что M=(E,\Phi) не является матроидом. Допустим сначала, что нарушается условие (1), т.е. существуют такие подмножества X и Y множества E, что X\in
\Phi, Y\subset X и Y\notin \Phi. Определим функцию w следующим образом:

w(x)=\left\{\begin{aligned} & 1, && \text{если } x\in Y, \\ & 0,
&& \text{если } x \notin Y.
\end{aligned}\right.

Алгоритм СПО сначала будет рассматривать все элементы множества Y. Так как Y\notin \Phi, то не все они войдут в построенное алгоритмом множество A. Следовательно, w(A) < |Y|. В то же время имеется множество X\in \Phi, такое, что w(X)=|Y|. Таким образом, в этом случае алгоритм СПО строит не оптимальное множество. Если же условие (1) выполнено, а не выполняется условие (2), то существуют такие подмножества X и Y множества E, что X\in \Phi, Y\in \Phi, |X| < |Y| и X\cup \{ x\} \notin \Phi для каждого x\in Y. Выберем такое \varepsilon, что 0 < \varepsilon < \frac{|Y|}{|X|} -1, и определим функцию w следующим образом:

w(x)=\left\{\begin{aligned} & 1+\varepsilon, & & \text{если } x\in X, \\
& 1, && \text{если } x\in Y-X, \\ & 0, & & \text{если } x\notin
X\cup Y.
\end{aligned}\right.

Алгоритм СПО сначала выберет все элементы множества X, а затем отвергнет все элементы из Y-X. В результате будет построено множество A с весом w(A)=(1+\varepsilon )|X| < |Y|, которое не является оптимальным, так как W(Y)=|Y|.

Максимизирующий алгоритм Крускала - это алгоритм СПО, применяемый к семейству ациклических множеств ребер графа. Из теорем 1 и 2 следует, что он действительно решает задачу об оптимальном каркасе. В то же время существует много жадных алгоритмов, не являющихся алгоритмами типа СПО. Примером может служить алгоритм Прима. Эти алгоритмы не попадают под действие теоремы Радо-Эдмондса, для их обоснования нужна иная аргументация.

Если для некоторой конкретной задачи удалось установить применимость к ней алгоритма СПО, это не значит, что все проблемы позади. Этот алгоритм внешне очень прост, но он включает операцию проверки принадлежности множества семейству \Phi, эффективное выполнение которой может потребовать дополнительных усилий. В алгоритме Крускала, например, для этого применяются специальные структуры данных. Ниже рассмотрим еще один пример, когда для успешного решения задачи алгоритм СПО комбинируется с методом увеличивающих путей для задачи о паросочетании, рассмотренным в "лекции 12" .

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Петр Петров
Петр Петров

произведение графов К(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(...)

}

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

 

 

Асмик Гаряка
Асмик Гаряка
Армения, Ереван
Семен Дядькин
Семен Дядькин
Беларусь, Минск, БГУ, 2003