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