Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тезисы по философии-2.1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.11 Mб
Скачать

5.2. Алгоритм решения задачи о паросочетании максимальной мощности

Граф, множество вершин которого Х допускает разбиение на два подмножества Х/ и Х//  так, что ни одна из дуг графа не соединяет вершины одного и того же подмножества, называется двудольным.

Например, на рис. 5.2 представлен граф, для которого X/ = {a, b, c} и X// = {d, e, f, g}.

Рис. 5.2.

Если граф G является двудольным, то задача о паросочетании максимальной мощности может быть решена путём сведения к задаче о максимальном потоке. Для этого необходимо:

а) ориентировать все дуги от  X/  к  X//;

б) ввести вершину  s – источник и дуги (s,x), для всех  x X/;

в) ввести вершину  t – сток и дуги  (x,t), для всех  x X//;

г) пропускную способность каждой из дуг положить равной 1

д) применить к изменённому графу алгоритм поиска максимального потока (см. разд. 4.3), и полученный в результате поток будет определять паросочетание максимальной мощности в исходном графе.

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

Если в G задано паросочетание M, то чередующейся цепью называется простая цепь, в которой из любых двух инцидентных рёбер (или дуг) одно принадлежит паросочетанию, а другое нет. Вершина называется открытой, если она не инцидентна ни одному из рёбер паросочетания. Чередующаяся цепь называется увеличивающей, если её первая и последняя вершины являются открытыми.

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

Утверждение. Паросочетание является паросочетанием максимальной мощности тогда и только тогда, когда для него не существует увеличивающей чередующейся цепи. (Без доказательства.)

Дерево с корнем в открытой вершине, состоящее из чередующихся цепей есть чередующееся дерево. Все вершины в чередующемся дереве делятся на внешние и внутренние. Если в цепи, соединяющей в чередующемся дереве корень с некоторой вершиной х, последнее ребро принадлежит паросочетанию, то х – внешняя вершина. В противном случае вершина х – внутренняя. Корень – внешняя вершина.

Пример чередующегося дерева приведён на рис. 5.3. Открытая вершина обозначается буквой E, внутренняя – I, внешняя – O.

Рис. 5.3.

Алгоритм построения чередующегося дерева

Шаг 1. Выбрать любую вершину v, не принадлежащую паросочетанию M. Определить её как корень и пометить как внешнюю. Все другие вершины считать непомеченными и все рёбра – неокрашенными.

Шаг 2. Выбрать любое неокрашенное ребро (x,y), инцидентное внешней вершине x. (Если такое ребро отсутствует, перейти к шагу 4.) Здесь возможны три случая:

а)  у – внутренняя вершина дерева;

б)  у – внешняя вершина дерева;

в)  у – непомеченная вершина.

В случае “а” окрасить (x,y) в синий цвет (т.е. ребро не принадлежит дереву) – и на шаг 2.

В случае “б” окрасить (x,y) в оранжевый цвет (т.е. ребро принадлежит дереву) – и на шаг 3.

В случае “в” окрасить (x,y) в оранжевый цвет. Если  у – открытая вершина, то увеличивающая чередующаяся цепь найдена, и работа алгоритма заканчивается. Если же вершине  инцидентна дуга (y,z), принадлежащая паросочетанию, то дугу (y,z) окрасить в оранжевый цвет, y – пометить как внутреннюю,  z – как внешнюю – и на шаг 2.

Шаг 3. Этот шаг выполняется только тогда, когда ребро (y,z) инцидентно двум внешним вершинам и окрашено в оранжевый цвет. В этом случае имеет место нечётный цикл, состоящий из нечётного числа оранжевых рёбер. Работа алгоритма заканчивается.

Шаг 4. Этот шаг выполняется, если дальнейшее окрашивание рёбер оказывается невозможным. Оранжевые рёбра образуют чередующееся дерево, которое называется венгерским деревом. При выявлении венгерского дерева алгоритм заканчивает работу.

Итак, возможны три результата алгоритма:

а) найдена увеличивающая чередующаяся цепь;

б) обнаружен нечётный цикл;

в) построено венгерское дерево.

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

Шаг 1. Выбрать любое паросочетание М0 в исходном графе G0. Все открытые вершины считать нерассмотренными. Положить i = 0.

Шаг 2. Если в Gi есть только одна открытая вершина – на шаг 6, иначе выбрать любую открытую нерассмотренную вершину v и построить чередующееся дерево с корнем в v. Если в результате найдена увеличивающая чередующаяся цепь – на шаг 3, если обнаружен нечётный цикл – на шаг 4, если построено венгерское дерево – на шаг 5.

Шаг 3. Исключить из паросочетания Mi входящие в него рёбра найденной увеличивающей чередующейся цепи и включить в него оставшиеся рёбра этой цепи. Мощность Mi  увеличится на 1, а v становится вершиной паросочетания. На шаг 2.

Шаг 4. Положить i=i+1. Найденный нечётный цикл обозначить через Ci. Стянуть Ci  в фиктивную вершину ai. Получим граф Gi. Паросочетание Mi включает все рёбра паросочетания Mi–1, входящие в Gi. (Заметим, что все вершины в Ci, кроме одной, – вершины паросочетания. Поэтому после стягивания Ci  в ai  максимум одно ребро паросочетания будет инцидентно ai.) Вернуться к шагу 2, выбирая для исследования в качестве открытой вершины отображение v в Gi. (Отметим, что на шаге 2 большая часть помеченных вершин и раскрашенных рёбер одной итерации алгоритма построения чередующегося дерева может быть повторно использована на следующей за ней итерации этого алгоритма.)

Шаг 5. Считать вершину v  рассмотренной. На шаг 2.

Шаг 6. В результате повторения шага 4 были получены последовательность графов G1, G2, …, Gt, последовательность фиктивных вершин a1, a2, …, at, и последовательность паросочетаний M1, M2,…, Mt.  Mt – паросочетание максимальной мощности в Gt. Положить =Mt. Для j=t, t-1,…,1 построить из паросочетания  в графе Gj паросочетание  в графе Gj–1 следующим образом:

а) Если aj инцидентна ребру из , то  включает все рёбра  совместно с единственным множеством рёбер нечётного цикла Cj, которые инцидентны всем открытым относительно  вершинам цикла Cj.

б) Если aj не инцидентна ребрам , то  включает все рёбра  совместно с любым паросочетанием максимальной мощности в Cj (т.е. выбор вершины в Cj, остающейся открытой, произволен).

 является паросочетанием максимальной мощности для исходного графа G0.