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

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

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

Теорема Радо-Эдмондса

Рассмотрим общий тип оптимизационных задач, формулируемых следующим образом. Дано произвольное конечное множество E и некоторое семейство \Phi его подмножеств. Для каждого элемента x\in
E задан его вес - положительное число w(x). Вес множества X\subseteq E определяется как сумма весов его элементов. Требуется найти множество наибольшего веса, принадлежащее \Phi. В эту схему укладываются многие известные задачи, например задача о независимом множестве графа ( E - множество вершин графа, вес каждой вершины равен 1, а \Phi состоит из всех независимых множеств) или задача о паросочетании ( E - множество ребер графа, вес каждого ребра равен 1, \Phi состоит из всех паросочетаний). В задаче об оптимальном каркасе, рассмотренной в "предыдущей лекции" , требуется найти каркас минимального, а не максимального веса, ее можно свести к задаче на максимум. Действительно, пусть w - заданная весовая функция на множестве ребер графа и требуется найти каркас минимального веса. Пусть a - число, большее, чем веса всех ребер в данном графе. Рассмотрим новую весовую функцию w', полагая что w'(e)=a-w(e) для каждого ребра e. Очевидно, что ациклическое множество наибольшего веса относительно весовой функции w' будет каркасом наименьшего веса относительно весовой функции w и обратно. Таким образом, задача об оптимальном каркасе эквивалентна задаче построения ациклического множества максимального веса. Последнюю будем называть задачей об оптимальном каркасе на максимум. Она тоже является задачей рассматриваемого общего типа: E - множество ребер графа, \Phi состоит из всех ациклических множеств. К этой задаче применимы рассмотреннные в "предыдущей лекции" алгоритмы Прима и Крускала, если в первом из них на каждом шаге выбирать ребро не минимального, а максимального веса, а во втором упорядочивать ребра не по возрастанию, а по убыванию весов. Модифицированный таким образом алгоритм Крускала будем называть максимизирующим алгоритмом Крускала.

Сформулируем теперь жадный алгоритм для решения этой общей задачи. Чтобы отличать этот алгоритм от других жадных алгоритмов, назовем его СПО (Сортировка и Последовательный Отбор).

Алгоритм 1. Алгоритм СПО

  1. Упорядочить элементы множества E по убыванию весов: E=\{e_1,e_2\ldots e_{m}\}, w(e_{1} )\ge w(e_{2})\ge \ldots \ge w(e_{m} ).
  2. A:=\varnothing
  3. for i:=1 to m do
  4. if A\cup \{e_{i}\} \in
\Phi then A:=A\cup \{e_{i}\}

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

< Лекция 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(...)

}

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

 

 

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