Нижегородский государственный университет им. Н.И.Лобачевского
Опубликован: 27.09.2006 | Доступ: свободный | Студентов: 3533 / 125 | Оценка: 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 этот путь будет увеличивающим.

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

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

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

Александр Лаврентьев
Александр Лаврентьев

много инструкций вида if - then - else

Например Procedure DFS(a) опишите каким образом следует понимать вложенность инструкций. Как в языке С ? 

т.е. следующее 

if (...) then (...)

if (...) then (...)

else(...)

 

раскрывается как 

if (...) then (...)

if (...) then (...)

         else(...)

или так :

if (...) then

 {  (...)

     if (...) then (...)

              else(...)

}

обьясните пожалуйста.

 

 

Константин Дементьев
Константин Дементьев
Россия, г. Мичуринск