Построение совершенного паросочетания в двудольном графе

 

Простая цепь С ненулевой длины в G, ребра которой попеременно лежат и не лежат в Р, называется чередующейся цепью (относительно паросочетания Р).

Эта цепь С называется Р-увеличителем, если первое и последнее ребро цепи С лежат вне Р.

С помощью Р-увеличителя паросочетание Р можно переделать в другое паросочетание Р* для G с числом ребер в Р* на единицу больше, чем в Р. Для этого достаточно все ребра в С, лежащие вне Р, добавить к Р, а ребра в С, лежащие в Р, удалить из Р. Для получившегося паросочетания Р* можно снова искать увеличитель, и так далее, последовательно расширяя получающиеся паросочетания, пока это возможно.

 

Алгоритм

построения совершенного паросочетания

для двудольного графа

 

Данные: матрица смежности двудольного графа G = (U,V, X)

Результат: матрица смежности совершенного паросочетания или множество ребер (дуг), входящих в совершенное паросочетание

 

1. Выберем исходное паросочетание P1, например одно ребро графа G.

2. Предположим, что паросочетание Pi=(Ui,Vi,Xi) для графа G построено. Построим паросочетание Pi+1 для G следующим образом: выбираем u из U, не принадлежащую Pi, например u1. Если такой вершины u нет, то Pi есть совершенное паросочетание. Строим в G чередующуюся цепь mi = [u1,v1,u2,v2,...up,vp] с u1=u, в которой всякое ребро (ui,vi) не принадлежит Xi, а всякое ребро (vi,ui+1) принадлежит Xi. Если такой цепи нет, то совершенного паросочетания граф G не имеет, а паросочетание Pi является для G максимальным (тупиковым). Цепь mi есть Pi-увеличитель.

3. Выбрасываем из Pi все ребра (vi,ui+1) и добавляем все ребра (ui,vi) цепи mi. Получившееся паросочетание Pi+1 на одно ребро длиннее паросочетания Pi. Переходим к п.1.

 

Пример. Построим совершенное паросочетание для двудольного графа G = (U,V, X), U={u1,u2,u3,u4,u5,u6}, V={v1,v2,v3,v4,v5,v6,v7}, матрица смежности которого имеет вид

 

 

 

v1 v2 v3 v4 v5 v6 v7

u1 1 1 0 0 1 0 0

u2 1 0 1 0 1 0 0

u3 1 0 0 0 0 1 0

u4 0 0 1 1 0 1 1

u5 0 0 0 0 1 0 1

u6 0 0 0 1 0 1 1

Шаг 1. Выбираем исходное паросочетание Р1={u1,v1}.

V1 V2 V3 V4 V5 V6 V7

 
 

 

 


 

                       
           


U1 U2 U3 U4 U5 U6

Шаг 2. Выберем вершину u2, которая не входит в паросочетание P1, но которая смежна с вершиной v1, содержащейся в P1. Далее ищем вершину v, смежную с вершиной u1, содержащейся в Р1. В результате получим чередующуюся цепь:

m1= [u2,v1,u1,v2]

0 1 0

1 0 1

Единица в первой строке из нулей и единиц означает, что соответствующее этой единице ребро {v1,u1} лежит в P1. Убираем это ребро из P1, а вместо него добавляем ребра {u2,v1}, {u1,v2}, соответствующие единицам второй строки. В результате получим паросочетание P2 ={ {u1,v1}, {u2,v3} }, число ребер в котором на одно больше, чем в P1.

Шаг 3.

V1 V2 V3 V4 V5 V6 V7

 
 

 

 


 

                       
           


U1 U2 U3 U4 U5 U6

Найдем чередующуюся цепь:

m2= [u3,v1,u2,v3,]

0 1 0

1 0 1

P3={ {u1,v2}, {u2,v3},{u3,v1}}.

 

 

Шаг 4.

V1 V2 V3 V4 V5 V6 V7

 
 

 

 


 

                       
           


U1 U2 U3 U4 U5 U6

Найдем чередующуюся цепь:

m3= [u4,v3,u2,v3]

0 1 0

1 0 1

 

P4={ {u1,v2}, {u2,v5},{u3,v1},{u4,v3}}.

 

Шаг 5.

V1 V2 V3 V4 V5 V6 V7

 
 

 

 


 

                       
           


U1 U2 U3 U4 U5 U6

Найдем чередующуюся цепь:

m4 = [u5,v5,u2,v1,u3,v6]

0 1 0 1 0

1 0 1 0 1

P5={ {u1,v2}, {u2,v1},{u3,v6},{u4,v3},{u5,v5}}.

 

Шаг 6.

V1 V2 V3 V4 V5 V6 V7

 
 

 

 


 

                       
           


U1 U2 U3 U4 U5 U6

Найдем чередующуюся цепь:

m5= [u6,v6,u3,v1,u2,v3,u4,v7]

0 1 0 1 0 1 0

1 0 1 0 1 0 1

 

V1 V2 V3 V4 V5 V6 V7

 
 

 

 


 

                       
           


U1 U2 U3 U4 U5 U6

 

P6={ {u1,v2}, {u2,v3}, {u3,v1}, {u4,v7},{u5,v5},{u6,v6}}. Полученное паросочетание является совершенным для исходного графа.

 

Задача26. Решить задачу нахождения совершенного паросочетания в двудольном графе, используя алгоритм чередующихся цепей.

 

2.2.1. Системы различных представителей

 

Пусть <A1,…,An> - произвольная последовательность множеств (необязательно непересекающихся и необязательно различных). Системой различных представителей для <A1,…,An> будем называть такую произвольную последовательность <а1,…,аn>, что и . Мы будем говорить, что в такой системе различных представителей элемент ai представляет множество Ai. Проблема существования и построения системы различных представителей известна во многих неформальных постановках. Одна из них – это так называемая «задача о комиссиях». Имеется n комиссий, причем Ai – множество членов i-й комиссии. Нужно в каждой комиссии выбрать председателя так, чтобы ни один человек не был председателем более чем в одной комиссии.

Нетрудно заметить, что задача о комиссиях сводится к частному случаю «задачи о назначениях». Действительно, создадим множества

,

(элементы x1,…,xm, y1,…,yn попарно различны) и

.

Очевидно, что каждая система различных представителей <а1,…,аn> однозначно соответствует паросочетанию мощности n в двудольном графе D = (X,Y,E).

 

Задача27. Решить задачу о системе различных представителей, сведя ее к задаче построения совершенного паросочетания в двудольном графе и используя алгоритм чередующихся цепей (см. п.2.2.3).

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: