logo
Лекции ДМ

Паросочетания. Реберные покрытия

Задачи, сформулированные в предыдущем пункте, решаются путем отыскания в графе , так называемых, максимального паросочетания и минимального реберного покрытия. Сформулируем определения этих понятий.

Паросочетанием в М в графе G(V,X) называется подмножество ребер X' множества Х такое, что каждая вершина графа инцидентна не более чем одному ребру из X'.

Паросочетание с наибольшим числом ребер называется максимальным паросочетанием.

Реберным покрытием С графа G(V, X) называется такое подмножество его ребер X’ множества Х, что каждая вершина графа инцидентна хотя бы одному ребру из X’.

Реберное покрытие, содержащее наибольшее число ребер, называется минимальным реберным покрытием.

Рассмотрим граф, представленный на рисунке.

Паросочетаними являются множества: {{v2, v5}, {v3, v6}}, {{v3, v6}, {v4, v7}, {v9, v8}}. Максимальным паросочетанием является, например, множество {{v8, v4}, {v6, v3}, {v5, v2}}. Если в это множество добавить хотя бы одно какое- либо ребро, то это множество уже не будет паросочетанием.

Добавим в максимальное паросочетание ребра {v1, v2}, {v4, v7}, {v9, v8}, получим реберное покрытие, причем минимальное.

Задачи о максимальном паросочетании и минимальном реберном покрытии связаны между собой таким образом, что решение любой из них позволяет найти решение другой. Изучим связь между этими задачами.

  1. Пусть М – произвольное паросочетание графа. Возьмем любую вершину v V, которая не инцидентна ни одному из ребер, составляющих М. добавим к паросочетанию любое ребро, инцидентное вершине v, и будем повторять это действие до тех пор, пока не переберем все вершины, не инцидентные ни одному ребру из М. в результате получим множество ребер C' Х, являющихся реберным покрытием графа.

  2. Пусть С – произвольное реберное покрытие, вершина v V, инцидентна более чем одному ребру из С. Исключим из С любое инцидентное v ребро и будем повторять это действие до тех пор, покане останется ни одной вершины, которая инцидентна более чем одному ребру. Получим некоторое паросочетание M’ графа G.

Справедливо утверждение, которое примем без доказательства:

Если М – максимальное паросочетание, то C' – минимальное реберное покрытие. Если С – минимальное реберное покрытие, то М' – максимальное паросочетание.

Эквивалентность задач о максимальном паросочетании и минимальном реберном покрытии позволяет при решении одной из них построить и решение другой.

Введем несколько необходимых понятий.

Открытая вершина – это вершинане инцидентная ни одному ребру из ребер паросочетания М.

Чередующаяся цепь – это простая цепь, в которой из любой пары смежных ребер одно принадлежит М, а другое – не принадлежит.

Увеличивающая чередующаяся цепь – это чередующаяся цепь, у которой концевые вершины являются открытыми.

Для графа , представленного на рисунке выше возьмем паросочетание М = {{v2, v5}, {v3, v6}}, тогда упорядоченная последовательность ребер {{v1, v2}, {v2, v5}, {v5, v6}, {v6, v3}, {v3, v4}} ­ - увеличивающая чередующаяся цепь.

Алгоритм выделения максимального паросочетания основывается на утверждении:

Паросочетание М тогда и только тогда максимальное, когда для него не существует увеличивающей чередующейся цепи.

Алгоритм построения максимального паросочетания

Задан связный граф G(V, X) и выделено какое – либо паросочетание М:

  1. выбрать любую открытую вершину и отыскать увеличивающую чередующуюся цепь;

  2. если такая цепь есть, то не входившие в паросочетания ребра этой цепи включить в максимальное паросочетание, а остальные исключить;

  3. если для выбранной вершины не найдется такая цепь, то выбрать другую вершину и повторить работу;

  4. алгоритм заканчивается , когда все открытые вершины прверены на наличие увеличивающей цепи.

Минимальное реберное покрытие можно получить из построенного максимального паросочетания следующим образом: взять любую вершину, не инцидентную ребрам из М.; добавить к паросочетанию любое ребро, инцидентное этой вершине и повторять действие до тех пор, пока не переберем все вершины, не инцидентные ни одному ребру из М.

Рассмотрим пример на построение максимального паросочетания и минимального реберного покрытиядл вышеприведенного графа:

  1. выделим паросочетание { {v5, v6} ,{v3, v4}} (ребра окрашены в красный цвет);

  2. открытыми являются вершины: v1, v2, v7, v8, v9 ;

  3. для вершин v2, v7, v8 существуют увеличивающие цепи;

  4. для v2 : {v2, v5}, {v5, v6}, {v6, v3}, {v3, v4}, {v4, v7}; для нее максимальное паросочетание : {v2, v5}, {v6, v3}, {v4, v7} (ребра – синие тонкие линии));

  5. для v7 – как для v2 ;

  6. для v8 максимальное паросочетание: {v8 , v4}, {v3 , v6} , {v5, v2} (ребра – широкие синие линии).

Из максимального паросочетания, например для вершины v2, построим минимальное реберное покрытие: не инцидентны вершины v1 и v8 . Добавим ребра к М : {v1, v2}, {v8, v4}. Осталась не инцидентной вершина v9. Добавим в построенное реберное покрытие еще одно ребро {v9, v8}.

М вместе с добавленными ребрами – минимальное реберное покрытие данного графа.

V1 V2 V3 V4 V9

V5 V6 V7 V8

Максимальные паросочетание Минимальное реберное покрытие