Минимальное покрытие двудольного графа

Покрытием двудольного графа G (X, Y, E) называется такое подмножество дуг W, что любая вершина графа инцидентна, по крайней мере, одной дуге из W (предполагается, что в графе нет изолированных вершин).

Например, для графа рис. 2.36 покрытием будет множество дуг

W = {(x 1, y 1), (x 2, y 4), (x 3, y 2), (x 4, y 3), (x 5, y 4), (x 5, y 5), (x 6, y 3)}.


Рисунок 2.36

В матрице смежности, показанной на рис. 2.36, дуги множества W выделены полужирным шрифтом.

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

По условию задачи требуется найти такое покрытие W 0, которое содержит минимальное количество дуг.

Алгоритм с использованием матрицы инцидентности графа

Для простоты будем рассматривать неориентированный двудольный граф, вершины которого обозначены натуральными числами 1, 2, 3,..., а ребра строчными буквами латинского алфавита.

Приведем шаги алгоритма:

1) Составляем матрицу инцидентности графа, в которой, как известно, число строк равно числу вершин графа, а число столбцов равно числу ребер графа. Каждое ребро инцидентно двум вершинам, поэтому в каждом столбце будет две единицы.

2) Для определения минимального покрытия вершин графа ребрами необходимо найти такую минимальную совокупность столбцов матрицы инцидентности (ребер), которая содержала хотя бы по одной 1 во всех строках, т.е. могла бы покрыть каждую вершину графа.

Для этого для каждой вершины (для каждой строки) записываем логическую сумму имен ребер, инцидентных вершине (имеющих 1 в строке вершины). Каждая сумма символизирует тот факт, что для покрытия вершины, чьим именем обозначена строка, нужно или ребро a, инцидентное вершине, или ребро b, инцидентное вершине, и т.д.

3) Для покрытия графа надо покрыть и вершину 1, и вершину 2, и т.д. Поэтому из сумм предыдущего пункта, заменив союз И символом логического умножения, составляем логическое произведение.

4) полученное логическое произведение сумм преобразуется в дизъюнктивную форму и минимизируется. Терм с минимальным числом букв и будет представлять минимальное покрытие графа.

Алгоритм с использованием матрицы смежности графа

Рассмотрим алгоритм построения минимального покрытия двудольного графа на примере графа G (X, Y, E), показанного на рис. 2.37.

Матрица смежности графа показана в табл. 2.2. (размер матрицы 6 х 5: 6 = | X | = m – число вершин множества X, 5 = | Y | = n – число вершин множества Y).

Приведем шаги алгоритма:

1) Сопоставим каждой строке матрицы смежности графа число Fi, равное сумме ее элементов, и каждому столбцу – число Gj, равное сумме его элементов (соответствующие числа показаны справа и снизу таблицы).

Очевидно, что

.

2. Если

,

то множество дуг, соответствующих 1, дает минимальное покрытие.


Рисунок 2.37

Таблица 2.2

  y1 y2 y3 y4 y5 Fi
x1            
x2            
x3            
x4            
x5            
x6            
Gj            

Если

,

то отмечаем последовательно в произвольном порядке символом * каждую из единиц, для которой Fi – 1>1 и Gj – 1>1, при этом Fi и Gj уменьшаем на 1.

Например, помечаем 1 на местах (x 1, y 1), (x 2, y 3), (x 5, y 4) в матрице табл. 24.2, получим матрицу, показанную в табл. 2.3.

Видим, эту операцию нельзя продолжить.

3. В каждой строке с Fi >1 ищем такую неотмеченную 1, что в содержащем ее столбце k найдется отмеченная 1, в строке m которой есть либо неотмеченная 1 с Gj > 1, либо отмеченная 1.

Если найдена 1 с Gj > 1, то есть возможность увеличить число 1 с метками. Для этого помечаем найденную единицу с координатами m, j и единицу с координатами i, k.

Метку у единицы c координатами k, m удаляем. Из Fi и Gj вычитаем по 1.

Если в строке m найдена отмеченная единица в столбце j c Gj = 1 и этот столбец содержит также отмеченyю 1 в строке n, то в строке n ищем либо неотмеченную 1 с Gj > 1, либо отмеченную 1 и т.д.

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

Таблица 2.3

  y1 y2 y3 y4 y5 Fi  
x1 1*            
x2     1*       m
x3             i
x4              
x5       1*      
x6              
Gj              
    j k        

В рассматриваемом примере последовательно получаем табл. 2.4 и табл. 2.5. В табл. 2.3, 2.4 и 2.5 пути поиска выделены полужирным шрифтом.

Таблица 2.4

  y1 y2 y3 y4 y5 Fi  
x1 1*            
x2   1*          
x3     1*       i
x4              
x5       1*     m’
x6              
Gj              
  j’     k’      

Таблица 2.5

  y1 y2 y3 y4 y5 Fi  
x1 1*            
x2   1*          
x3     1* 1*     i
x4              
x5 1*           m’
x6              
Gj              
  j’     k’      

Минимальное покрытие графа будет таким

W 0 = {(x 1, y 2), (x 2, y 3), (x 3, y 5), (x 4, y 1), (x 5, y 4), (x 6, y 1)}.

Рассмотрим двудольный граф G (X, Y, E) и два таких подмножества и , что | A | = | B |.

Взаимно однозначное отображение A на B называется паросочетанием отображающим A в Y или A на B. На языке графов паросочетание – это подмножество несмежных ребер (дуг) двудольного графа.


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



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