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