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