Jump to content

Алгоритм цветения

В теории графов алгоритм цветения — это алгоритм построения максимальных паросочетаний на графах . Алгоритм был разработан Джеком Эдмондсом в 1961 году. [1] и опубликовано в 1965 г. [2] Учитывая общий граф G = ( V , E ) , алгоритм находит паросочетание M такое, что каждая вершина в V инцидентна не более чем одному ребру в M и | М | максимизируется. Соответствие строится путем итеративного улучшения исходного пустого сопоставления вдоль дополнительных путей в графе. В отличие от двудольного сопоставления, ключевая новая идея заключается в том, что цикл нечетной длины в графе (цветок) сжимается до одной вершины, а поиск продолжается итеративно в сжатом графе.

Алгоритм выполняется за время O (| E || V | 2 ) , где | Е | — количество ребер графа и | В | это его количество вершин . Лучшее время работы ту же задачу можно решить с помощью гораздо более сложного алгоритма Микали и Вазирани. [3]

Основная причина важности алгоритма цветения заключается в том, что он дал первое доказательство того, что совпадение максимального размера может быть найдено с использованием полиномиального количества времени вычислений. Другая причина заключается в том, что это привело к с помощью линейного программирования полиэдрическому описанию совпадающего многогранника , что дало алгоритм сопоставления с минимальным весом . [4] Как пояснил Александр Шрийвер , дальнейшее значение результата связано с тем фактом, что это был первый многогранник, доказательство целочисленности которого «не просто следует из полной унимодулярности , и его описание было прорывом в полиэдральной комбинаторике ». [5]

Расширение путей

[ редактировать ]

Учитывая G = ( V , E ) и паросочетание M из G , вершина v открыта, если ни одно ребро M не инцидентно с v . Путь в G называется попеременным путем , если его ребра поочередно находятся не в M и в M (или в M и не в M ). Дополняющий путь P — это чередующийся путь, который начинается и заканчивается в двух различных открытых вершинах. Обратите внимание, что количество несовпадающих ребер в увеличивающем пути на единицу больше, чем количество совпадающих ребер, и, следовательно, общее количество ребер в увеличивающем пути нечетно. Соответствующее увеличение по увеличивающему пути P — это операция замены M новым сопоставлением.

.

Увеличение вдоль пути

По лемме Бержа паросочетание M не существует M -дополняющего пути является максимальным тогда и только тогда, когда в G . [6] [7] Следовательно, либо паросочетание максимально, либо его можно расширить. Таким образом, начиная с начального сопоставления, мы можем вычислить максимальное сопоставление, дополняя текущее сопоставление дополняющими путями, пока мы можем их найти, и возвращаться всякий раз, когда дополняющих путей не остается. Формализовать алгоритм можно следующим образом:

   INPUT:  Graph G, initial matching M on G   OUTPUT: maximum matching M* on GA1 function find_maximum_matching(G, M) : M*A2     Pfind_augmenting_path(G, M)A3     if P is non-empty thenA4         return find_maximum_matching(G, augment M along P)A5     elseA6         return MA7     end ifA8 end function

Нам еще предстоит описать, как можно эффективно находить дополняющие пути. Подпрограмма для их поиска использует цветения и сокращения.

Цветение и схватки

[ редактировать ]

Учитывая G = ( V , E ) и паросочетание M группы G , цветок B — это цикл в G, состоящий из 2 k + 1 которого ребра, ровно k принадлежит M , и где одна из вершин v цикла ( base ) таков, что существует альтернативный путь четной длины ( основа ) от v до открытой вершины w .

Поиск цветов:

  • Перейдите по графу, начиная с открытой вершины.
  • Начиная с этой вершины, пометьте ее как внешнюю вершину o .
  • Поочередно маркируйте вершины, внутренние i и внешние o, так, чтобы никакие две соседние вершины не имели одинаковую метку.
  • Если в итоге мы получим две соседние вершины, помеченные как внешние o , то мы получим цикл нечетной длины и, следовательно, цветение.

Определим сжатый граф G' как граф, полученный из G путем стягивания каждого ребра B , и определим сжатое паросочетание M' как паросочетание G', соответствующее M .

Пример цветения

G' имеет M' -дополняющий путь тогда и только тогда, когда G имеет M -дополняющий путь и что любой M' -дополняющий путь P' в G' может быть поднят до M -дополняющего пути в G путем отмены сжатия с помощью B так, чтобы сегмент P' (если таковой имеется), проходящий через v B, заменялся соответствующим сегментом, проходящим через B . [8] Более подробно:

  • если P' проходит через сегмент u v B w в G' , то этот сегмент заменяется сегментом u → ( u' → … → w' ) → w в G , где цветут вершины u' и w' и стороны B выбираются ( u' → … → w' ) , идущие от u' к w', так, чтобы новый путь все еще был чередующимся ( u' открыт по отношению к , ).

Подъем пути, когда P' проходит через vB, два случая зависят от направления, которое нам нужно выбрать, чтобы достичь vB.

  • если P' имеет конечную точку v B , то сегмент пути u v B в G' заменяется сегментом u → ( u' → … → v' ) в G , где расцветают вершины u' и v' и сторона B v , ( u' → … → v' ) , идущие от u' к ', выбираются так, чтобы путь был чередующимся ( v' открыт, ).

Подъем пути, когда P' заканчивается в vB, два случая в зависимости от направления, которое нам нужно выбрать, чтобы достичь vB.

Таким образом, цветы можно сжимать и выполнять поиск в сжатых графах. Это сокращение лежит в основе алгоритма Эдмондса.

Поиск увеличивающего пути

[ редактировать ]

Для поиска расширяющего пути используется вспомогательная структура данных, состоящая из леса F отдельные деревья которого соответствуют определенным частям графа G. , Фактически лес F — это тот же самый лес, который можно использовать для поиска максимальных паросочетаний в двудольных графах (без необходимости сокращения цветков).На каждой итерации алгоритм либо (1) находит расширяющий путь, (2) находит цветок и возвращается к соответствующему сжатому графу, либо (3) приходит к выводу, что расширяющих путей нет. Вспомогательная структура создается с помощью пошаговой процедуры, которая будет рассмотрена ниже. [8]

Процедура построения рассматривает вершины v и ребра e в G и постепенно обновляет F соответствующим образом. Если v находится в дереве T леса, положим root(v) обозначаем корень T . Если и u, и v находятся в одном и том же дереве T в F , мы позволяем distance(u,v) обозначают длину единственного пути от u до v в T .

    INPUT:  Graph G, matching M on G    OUTPUT: augmenting path P in G or empty path if none foundB01 function find_augmenting_path(G, M) : PB02    F ← empty forestB03    unmark all vertices and edges in G, mark all edges of MB05    for each exposed vertex v doB06        create a singleton tree { v } and add the tree to FB07    end forB08    while there is an unmarked vertex v in F with distance(v, root(v)) even doB09        while there exists an unmarked edge e = { v, w } doB10            if w is not in F then                   // w is matched, so add e and w's matched edge to FB11                x ← vertex matched to w in MB12                add edges { v, w } and { w, x } to the tree of vB13            elseB14                if distance(w, root(w)) is odd then                       // Do nothing.B15                elseB16                    if root(v)root(w) then                           // Report an augmenting path in F  { e }.B17                        P ← path (root(v) → ... → v) → (w → ... → root(w))B18                        return PB19                    else                           // Contract a blossom in G and look for the path in the contracted graph.B20                        B ← blossom formed by e and edges on the path vw in TB21                        G’, M’ ← contract G and M by BB22                        P’find_augmenting_path(G’, M’)B23                        P ← lift P’ to GB24                        return PB25                    end ifB26                end ifB27            end ifB28            mark edge eB29        end whileB30        mark vertex vB31    end whileB32    return empty pathB33 end function

Следующие четыре рисунка иллюстрируют выполнение алгоритма. Пунктирные линии обозначают ребра, которых в данный момент нет в лесу. Сначала алгоритм обрабатывает границу леса, вызывающую расширение текущего леса (строки B10 – B12).

Расширение леса по линии B10

Затем он обнаруживает расцвет и сжимает график (строки B20 – B21).

Сокращение цветения на линии B21.

Наконец, он находит увеличивающий путь P' в сжатом графе (строка B22) и поднимает его до исходного графа (строка B23). Обратите внимание, что здесь решающее значение имеет способность алгоритма сжимать цветы; алгоритм не может найти P в исходном графе напрямую, поскольку в строке B17 алгоритма рассматриваются только ребра вне леса между вершинами на четных расстояниях от корней.

Обнаружение увеличивающего пути P' в G' на линии B17

Подъем P' до соответствующего пути увеличения в G в строке B25.

Лес F, построенный find_augmenting_path() Функция представляет собой переменный лес. [9]

  • дерево T в G является знакопеременным деревом относительно M , если
    • T содержит ровно одну открытую вершину r, называемую корнем дерева.
    • каждая вершина на нечетном расстоянии от корня имеет ровно два инцидентных ребра в T и
    • все пути от r до листьев в T имеют четную длину, их нечетные ребра не находятся в M , а их четные ребра находятся в M .
  • лес F в G является знакопеременным лесом относительно M , если
    • его связные компоненты представляют собой чередующиеся деревья, а
    • каждая открытая вершина в G является корнем знакопеременного дерева в F .

Каждая итерация цикла, начиная со строки B09, либо добавляет к дереву T в F (строка B10), либо находит расширяющий путь (строка B17), либо находит расцвет (строка B20). Легко видеть, что время работы .

Двустороннее сопоставление

[ редактировать ]

Когда G двудольная , нет нечетных циклов в G . В этом случае цветы никогда не будут найдены и можно просто удалить строки B20 – B24 алгоритма. Таким образом, алгоритм сводится к стандартному алгоритму построения паросочетаний максимальной мощности в двудольных графах. [7] где мы неоднократно ищем увеличивающий путь путем простого обхода графа: это, например, случай алгоритма Форда – Фулкерсона .

Взвешенное соответствие

[ редактировать ]

Задачу сопоставления можно обобщить, присвоив веса ребрам в G и запросив набор M , который дает сопоставление максимального (минимального) общего веса: это задача сопоставления максимального веса . Эту проблему можно решить с помощью комбинаторного алгоритма, использующего в качестве подпрограммы невзвешенный алгоритм Эдмондса. [6] Колмогоров обеспечивает эффективную реализацию этого на C++. [10]

  1. ^ Эдмондс, Джек (1991), «Взгляд на небеса», в Дж. К. Ленстре; AHG Риннуй Кан; А. Шрийвер (ред.), История математического программирования --- Сборник личных воспоминаний , CWI, Амстердам и Северная Голландия, Амстердам, стр. 32–54.
  2. ^ Эдмондс, Джек (1965). «Дорожки, деревья и цветы» . Может. Дж. Математика . 17 : 449–467. дои : 10.4153/CJM-1965-045-4 .
  3. ^ Микали, Сильвио; Вазирани, Виджай (1980). O(V 1/2 Д) алгоритм поиска максимального паросочетания в общих графах . 21-й ежегодный симпозиум по основам информатики. Издательство IEEE Computer Society Press, Нью-Йорк. стр. 17–27.
  4. ^ Эдмондс, Джек (1965). «Максимальное паросочетание и многогранник с 0,1-вершинами» . Журнал исследований Национального бюро стандартов . Раздел B. 69 : 125–130. дои : 10.6028/jres.069B.013 .
  5. ^ Шрийвер, Александр (2003). Комбинаторная оптимизация: многогранники и эффективность . Алгоритмы и комбинаторика. Берлин Гейдельберг: Springer-Verlag. ISBN  9783540443896 .
  6. ^ Перейти обратно: а б Ловас, Ласло ; Пламмер, Майкл (1986). Теория соответствия . Академическое издательство. ISBN  963-05-4168-8 .
  7. ^ Перейти обратно: а б Карп, Ричард, «Алгоритм недвустороннего сопоставления Эдмондса», Примечания к курсу. Калифорнийский университет в Беркли (PDF) , заархивировано из оригинала (PDF) 30 декабря 2008 г.
  8. ^ Перейти обратно: а б Тарьян, Роберт, «Отрывочные заметки о невероятном алгоритме Эдмондса сжимающегося цветка для общего сопоставления», конспекты курса, факультет компьютерных наук, Принстонский университет (PDF)
  9. ^ Кеньон, Клэр; Ловас, Ласло , «Алгоритмическая дискретная математика», технический отчет CS-TR-251-90, факультет компьютерных наук, Принстонский университет.
  10. ^ Колмогоров, Владимир (2009), «Blossom V: Новая реализация алгоритма идеального сопоставления с минимальной стоимостью» , Mathematical Programming Computation , 1 (1): 43–67, doi : 10.1007/s12532-009-0002-8
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 965df94fdd297d7e823bf21da2d090b3__1701101760
URL1:https://arc.ask3.ru/arc/aa/96/b3/965df94fdd297d7e823bf21da2d090b3.html
Заголовок, (Title) документа по адресу, URL1:
Blossom algorithm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)