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

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

Метод увеличивающих путей

Пусть G - граф, M - некоторое паросочетание в нем. Ребра паросочетания будем называть сильными, остальные ребра графа - слабыми. Вершину назовем свободной, если она не принадлежит ребру паросочетания. На рис. 12.1 слева показан граф и в нем выделены ребра паросочетания M=\{(1,2),(6,8),(3,7),(9,10)\}. Вершины 4 и 5 - свободные. Заметим, что к этому паросочетанию нельзя добавить ни одного ребра, т.е. оно максимальное. Однако оно не является наибольшим. В этом легко убедиться, если рассмотреть путь 5,6,8,9,10,7,3,4 (показан пунктиром). Он начинается и заканчивается в свободных вершинах, а вдоль пути чередуются сильные и слабые ребра. Если на этом пути превратить каждое сильное ребро в слабое, а каждое слабое - в сильное, то получится новое паросочетание, показанное на рисунке справа, в котором на одно ребро больше. Увеличение паросочетания с помощью подобных преобразований - в этом и состоит суть метода увеличивающих путей.


Рис. 12.1.

Сформулируем необходимые понятия и докажем теорему, лежащую в основе этого метода. Чередующимся путем относительно данного паросочетания называется простой путь, в котором чередуются сильные и слабые ребра (т.е. за сильным ребром следует слабое, за слабым - сильное). Чередующийся путь называется увеличивающим, если он соединяет две свободные вершины. Если M - паросочетание, P - увеличивающий путь относительно M, то легко видеть, что M\otimes P - тоже паросочетание и |M\otimes P|=|M|+1.

Теорема 2. Паросочетание является наибольшим тогда и только тогда, когда относительно него нет увеличивающих путей.

Доказательство. Если есть увеличивающий путь, то, поступая так, как в рассмотренном примере, то есть заменяя вдоль этого пути сильные ребра на слабые и наоборот, мы, очевидно, получим большее паросочетание. Для доказательства обратного утверждения рассмотрим паросочетание M в графе G и предположим, что M - не наибольшее. Покажем, что тогда имеется увеличивающий путь относительно M. Пусть M' - другое паросочетание и |M'|>|M|. Рассмотрим подграф H графа G, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний M,M'. Иначе говоря, множеством ребер графа H является симметрическая разность M\otimes M'. В графе H каждая вершина инцидентна не более чем двум ребрам (одному из M и одному из M' ), т.е. имеет степень не более двух. В таком графе каждая компонента связности - путь или цикл. В каждом из этих путей и циклов чередуются ребра из M и M'. Так как |M'|>|M|, имеется компонента, в которой ребер из M' содержится больше, чем ребер из M. Это может быть только путь, у которого оба концевых ребра принадлежат M'. Легко видеть, что относительно M этот путь будет увеличивающим.

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

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

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

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

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