Скажите, пожалуйста, можно ли еще получить документ о прохождении курса ("Графы и алгоритмы", декабрь 2020) после предоставления всех дополнительных необходимых документов? |
Жадные алгоритмы и матроиды
Теорема Радо-Эдмондса
Рассмотрим общий тип оптимизационных задач, формулируемых следующим
образом. Дано произвольное конечное множество и некоторое
семейство
его подмножеств. Для каждого элемента
задан его вес - положительное число
. Вес множества
определяется как сумма весов его элементов. Требуется
найти множество наибольшего веса, принадлежащее
.
В эту схему укладываются многие известные задачи,
например задача о независимом множестве графа (
-
множество вершин графа, вес каждой вершины равен 1,
а
состоит из всех независимых множеств) или
задача о паросочетании (
- множество ребер графа, вес
каждого
ребра равен 1,
состоит из всех паросочетаний). В задаче об
оптимальном каркасе, рассмотренной в
"предыдущей лекции"
, требуется найти
каркас минимального, а не максимального веса, ее можно свести к задаче на
максимум. Действительно, пусть
- заданная весовая функция
на
множестве ребер графа и требуется найти каркас минимального веса. Пусть
- число, большее, чем веса всех ребер в данном графе.
Рассмотрим
новую весовую функцию
, полагая что
для каждого
ребра
. Очевидно, что ациклическое множество наибольшего веса
относительно весовой функции
будет каркасом наименьшего веса
относительно весовой функции
и обратно. Таким образом, задача об
оптимальном каркасе эквивалентна задаче построения ациклического множества
максимального веса. Последнюю будем называть задачей об оптимальном
каркасе на максимум. Она тоже является задачей рассматриваемого общего
типа:
- множество ребер графа,
состоит из всех
ациклических множеств. К этой задаче применимы рассмотреннные в
"предыдущей лекции"
алгоритмы Прима и Крускала, если в первом из них на каждом шаге
выбирать ребро не минимального, а максимального веса, а во втором
упорядочивать ребра не по возрастанию, а по убыванию весов.
Модифицированный таким образом алгоритм Крускала будем называть
максимизирующим алгоритмом Крускала.
Сформулируем теперь жадный алгоритм для решения этой общей задачи. Чтобы отличать этот алгоритм от других жадных алгоритмов, назовем его СПО (Сортировка и Последовательный Отбор).
Алгоритм 1. Алгоритм СПО
- Упорядочить элементы множества
по убыванию весов:
,
.
-
for
to
do
-
if
then
Максимизирующий алгоритм Крускала является примером алгоритма этого типа.
Уместен вопрос: каким условиям должно удовлетворять семейство
для того, чтобы при любой весовой функции
алгоритм СПО находил
оптимальное решение? Исчерпывающий ответ дает следующая теорема
Радо-Эдмондса.