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

Паросочетания

Выявление цветков не представляет трудности - нужно только добавить ветвь else к оператору if в строке 14 алгоритма 1. Первое, что мы сделаем, обнаружив цветок, - превратим все сильные ребра пути P в слабые, а слабые - в сильные. После этого преобразования множество сильных ребер является паросочетанием той же мощности, но вместо вершины a свободной вершиной станет вершина b. Таким образом, на цикле C будет одна свободная вершина и этот цикл является чередующимся путем, который начинается и заканчивается в этой вершине. Покажем, что такой цикл можно стянуть в одну вершину, не теряя информации о существовании увеличивающих путей.

Операция стягивания подграфа H в графе G состоит в следующем. Все вершины этого подграфа удаляются из графа, а вместо них добавляется новая вершина. Эта новая вершина соединяется ребрами с теми и только теми из оставшихся вершин графа, которые были смежны хотя бы с одной вершиной подграфа H. Граф, получаемый в результате такой операции, будем обозначать через G/H.

Теорема 3. Пусть M - паросочетание в графе G, C - цикл длины 2k+1 в этом графе, причем на цикле имеется k сильных ребер и одна свободная вершина. Пусть M' - паросочетание в графе G'=G/C, составленное из всех ребер паросочетания M, не принадлежащих циклу C. Паросочетание M является наибольшим в графе G тогда и только тогда, когда M' - наибольшее паросочетание в графе G'.

Доказательство. Докажем, что из существования увеличивающего пути относительно паросочетания M в графе G следует, что существует увеличивающий путь относительно паросочетания M' в графе G' и обратно.

Пусть b - свободная вершина цикла C. Новую вершину, образованную в графе G' при стягивании цикла C, обозначим через c. Отметим, что она является свободной вершиной относительно паросочетания M'.

Пусть P - увеличивающий путь в графе G. Если он не содержит вершин цикла C, то он будет увеличивающим путем и в графе G'. В противном случае рассмотрим отрезок P' пути P, начинающийся в свободной вершине, отличной от b, заканчивающийся в вершине x, лежащей на цикле C, и не содержащий других вершин цикла C. Если в пути P' заменить вершину x вершиной c, то, очевидно, получится увеличивающий путь в графе G'.

Обратно, пусть P' - увеличивающий путь в графе G'. Если P' не проходит через вершину c, то он будет увеличивающим путем и в графе G. В противном случае рассмотрим путь P'', получающийся удалением вершины c из пути P'. Можно считать, что вершина c была последней вершиной пути P', а путь P'' заканчивается в предпоследней вершине x. Так как вершина x смежна с вершиной c в графе G', то в графе G на цикле C имеется вершина y, смежная с x. Добавим к пути P'' тот из отрезков цикла C, соединяющих вершину y с вершиной b, который начинается сильным ребром. В результате получится увеличивающий путь в графе G.

Из доказательства видно, что увеличивающий путь в графе G при известном увеличивающем пути в графе G' находится за линейное время. Для получения оценок времени работы алгоритма в целом требуется еще проработка ряда деталей, например подробностей выполнения операции стягивания и т.д. Однако ясно, что это время ограничено полиномом.

Татьяна Наумович
Татьяна Наумович

Скажите, пожалуйста, можно ли еще получить документ о прохождении курса ("Графы и алгоритмы", декабрь 2020) после предоставления всех дополнительных необходимых документов?
Или нужно проходить заново?

Петр Петров
Петр Петров

произведение графов К(2)*О(4) фактически 4 отдельных графа К(2)?