Главная > Математика > Теория графов. Алгоритмический подход
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

2.4. Алгоритм для ЗНПС

Пусть задано начальное паросочетание. (Допустимо использование цустого паросочетания.) Алгоритм осуществляет систематический поиск аугментальных цепей с целью улучшения заданного паросочетания в соответствии с теоремой 1. Алгоритм был предложен Эдмондсом [10, 11].

Альтернирующее дерево имеет своим корнем некоторую экспонированную вершину и строится путем попеременного добавления

ребер, лежащих и не лежащих в паросочетании, до тех пор, пока или

(I) дерево станет аугментальным, или

(II) на дереве появится цветок, или

(III) дерево станет венгерским.

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

В случае (II) обнаруживается получившийся цветок (как описано в разд. 2.2), срезается и продолжается рост дерева в процессе поиска аугментальной цепи. Что касается вычислительной стороны, то срезание не производится «явным образом». Достаточно пометить все вершины цветка как внешние и отметить, что все они принадлежат этому цветку. Порядок, в котором цветки «срезаются», важен, так как в конце всей процедуры цветки должны «расцвести» в обратном порядке.

В случае (III) вершины венгерского дерева и инцидентные им ребра совсем удаляются из графа (в соответствии с теоремой 4) и алгоритм применяется к оставшемуся подграфу.

2.4.1. Описание алгоритма

Начальная установка.

Шаг 1. Выбрать в начальное паросочетание

Выбор корня.

Шаг 2. Если в существуют по крайней мере две экспонированные вершины, то взять одну из них в качестве корня; в противном случае перейти к шагу 8.

Шаг 3. Взять внешнюю вершину дерева. Для каждого ребра если экспонированная вершина, то перейти к шагу 4; если внутренняя вершина, то перейти к шагу 7; если не принадлежит дереву и не является экспонированной, то перейти к шагу 5.

Шаг 4. Найдена аугментальная цепь из корня к Построить новое улучшенное паросочетание, удаляя текущее дерево и пометки вершин, и перейти к шагу 2.

Шаг 5. Добавить к альтернирующему дереву ребро и отметить вершину как внутреннюю. Найти ребро принадлежащее текущему паросочетанию, и добавить его к дереву, пометив вершину как внешнюю. Если существует ребро между и другой внешней вершиной, то перейти к шагу 6. В противном: случае перейти к шагу 3.

Шаг 6. Опознать и срезать получившийся цветок. Отметить возникшую псевдовершину как внешнюю. Внести поправку в частичное упорядочение цветков и возвратиться к шагу 3.

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

Шаг 8. Выделить отдельно в последнем графе каждом удаленном венгерском графе оптимальное паросочетание, поступая так. Распустить сначала крайний цветок и выделить паросочетание, которое оставляет экспонированной относительно него ту вершину которая входит в паросочетание в нераспустившемся цветке. (См. теорему 2.) Продолжать процесс распускания в порядке, обратном к установленному на шаге 6, до тех пор, пока весь граф не будет распустившимся и не будет получено наибольшее паросочетание.

<< Предыдущий параграф Следующий параграф >>
Оглавление