Рассмотрите свойства графов: сформулируйте и докажите критерий двудольности, приведите эффективный алгоритм проверки двудольности и опишите алгоритмы нахождения максимального паросочетания (например, Hopcroft–Karp) с оценкой сложности и применимостью в реальных задачах

10 Окт в 13:31
6 +6
0
Ответы
1

Ниже приведены ключевые результаты, доказательства и алгоритмы по двудольности и по нахождению максимального паросочетания восновном—длядвудольныхграфов,супоминаниемобщихслучаевв основном — для двудольных графов, с упоминанием общих случаеввосновномдлядвудольныхграфов,супоминаниемобщихслучаев.

1) Критерий двудольности формулировкаидоказательствоформулировка и доказательствоформулировкаидоказательство

Определение. Неориентированный граф G = V,EV, EV,E называется двудольным, если множество вершин V можно разбить на два непересекающихся подможества L и R так, что каждое ребро имеет концы в разных частях нетрёбервнутриLивнутриRнет рёбер внутри L и внутри RнетрёбервнутриLивнутриR.Критерий: граф G двудолен ⇔ G не содержит циклов нечётной длины т.е.несодержитпростогоцикласнечётнымчисломрёберт.е. не содержит простого цикла с нечётным числом рёберт.е.несодержитпростогоцикласнечётнымчисломрёбер.

Доказательство.
aaa Если G двудолен, то в нем нет нечётных циклов. Действительно, любое ребро меняет часть L↔RL↔RLR, поэтому при обходе цикла длина цикла равна числу переходов между частями и потому должна быть чётной.

bbb Обратно, если G не содержит нечётных циклов, то G двудолен. Построим двудольность следующим образом: для каждой компоненты связности запустим BFS илиDFSили DFSилиDFS из произвольной вершины s и пометим вершины по уровню расстояниювребрахотsрасстоянию в ребрах от sрасстояниювребрахотs. Отнесём вершины чётных уровней в L, нечётных — в R. Если бы существовало ребро u,vu,vu,v между вершинами одинаковой парности уровней, то это давало бы цикл нечётной длины: путь s→u длины d, ребро u,vu,vu,v, и путь v→s длины d' всвязномслучаеd′=d±1в связном случае d' = d ± 1всвязномслучаеd=d±1, в сумме — нечётный цикл. Но по предположению таких циклов нет, поэтому раскраска возможна и даёт разбиение L,R. Таким образом G двудолен.

2) Алгоритм проверки двудольности эффективныйэффективныйэффективный

Идея: попытка "2-раскраски" графа. Для каждого не посещённого компонента запустить BFS/DFS, присваивая стартовой вершине цвет 0, соседям — цвет 1, их соседям — цвет 0 и т.д. Если в процессе найдём ребро между вершинами одного цвета — граф не двудолен; иначе — двудолен.Псевдокод BFSBFSBFS:
Инициализировать colorvvv = UNCOLORED для всех v.Для каждой вершины v, если colorvvv == UNCOLORED:
a) colorvvv = 0; положить v в очередь Q.
b) Пока Q не пусто: извлечь u; для каждого соседa w:
если colorwww == UNCOLORED: colorwww = 1 - coloruuu; положить w в Q;иначе если colorwww == coloruuu: вернуть "не двудолен".Если проверки прошли — вернуть "двудолен" и разбиение по color.Сложность: O∣V∣+∣E∣|V| + |E|V+E по времени и O∣V∣|V|V по памяти стандартнаясложностьобходаграфастандартная сложность обхода графастандартнаясложностьобходаграфа.

3) Понятия паросочетания и теорема Берже augmentingpathaugmenting pathaugmentingpath

Паросочетание M ⊆ E — множество попарно несмежных рёбер вершинапринадлежитнеболееодномуребруизMвершина принадлежит не более одному ребру из MвершинапринадлежитнеболееодномуребруизM.Паросочетание максимального размера максимальноепомощностимаксимальное по мощностимаксимальноепомощности — такое M, что нет другого паросочетания бoльшего размера.Augmenting path расширяющийпутьрасширяющий путьрасширяющийпуть относительно паросочетания M — простой путь, концы которого не покрыты M свободныевершинысвободные вершинысвободныевершины, и рёбра на пути чередуются: не в M, в M, не в M, ... начинаетсяизаканчиваетсяребромвнеMначинается и заканчивается ребром вне MначинаетсяизаканчиваетсяребромвнеM.Теорема Берже: паросочетание M является максимальным ⇔ в графе нет расширяющего пути относительно M.

Краткое доказательство.

Если существует расширяющий путь P, то можно увеличить мощность паросочетания, взяв симметрическую разность M' = M Δ P т.е.заменитьвPвсерёбраMнарёбравнеMинаоборотт.е. заменить в P все рёбра M на рёбра вне M и наоборотт.е.заменитьвPвсерёбраMнарёбравнеMинаоборот. Так как концы P свободны, |M'| = |M| + 1, значит M не был максимальным.Обратно, если расширяющего пути нет, то нельзя увеличить |M| на 1. Предположим, что существует более сильное паросочетание M' (|M'| > |M|). Рассмотрим симметрическую разность M Δ M' — это набор путей и циклов, в которых рёбра чередуются; в этих компонентах количество рёбер из M' превышает количество из M в сумме, значит там есть путь с концами свободными относительно M — расширяющий путь. Противоречие. Следовательно M максимальное.

4) Нахождение максимального паросочетания в двудольном графе

Общие подходы:
a) Наивный "поиск увеличивающего пути" KuhnKuhnKuhn: из каждой свободной вершины левой части запускают DFS для поиска свободной правой вершины по альтернирующим путям, при удаче увеличивают matching на 1. Если при каждой попытке пробегать весь граф, сложность в худшем случае O∣V∣<em>∣E∣|V| <em> |E|V<em>E точнееO(∣L∣</em>E)точнее O(|L| </em> E)точнееO(L</em>E), часто работоспособно на практике для средних по размеру разреженных графов.
b) Hopcroft–Karp оптимальныйпотеоретическойоценкедляб.г.оптимальный по теоретической оценке для б.г.оптимальныйпотеоретическойоценкедляб.г.. Работает уровнями и находит одновременно множество вершин-вершиной параллельных кратчайших увеличивающих путей.

Идея Hopcroft–Karp:

Пока существует путь увеличения:
a) BFS из всех свободных левых вершин строит слоёвую ориентированную сеть levelslevelslevels, останавливаясь на свободных правых вершинах, таким образом находит расстояние до ближайших свободных правых вершин этоминимальнаядлинаувеличивающегопутиэто минимальная длина увеличивающего путиэтоминимальнаядлинаувеличивающегопути.
b) Затем с помощью DFS вслоённогообходавслоённого обходавслоённогообхода ищут и блокируют максимальное число вершинно-реберно непересекающихся увеличивающих путей минимальной длины т.е.множествавершинно−непересекающихсяпутейт.е. множества вершинно-непересекающихся путейт.е.множествавершиннонепересекающихсяпутей. После нахождения каждого пути matching увеличивается.Повторяют, пока BFS не найдёт ни одного свободного правого узла неткороткихувеличивающихпутейнет коротких увеличивающих путейнеткороткихувеличивающихпутей.

Сложность: Osqrt(V)∗Esqrt(V) * Esqrt(V)E обычнозаписываютO(sqrt(n)⋅m)приn=∣V∣,m=∣E∣обычно записывают O(sqrt(n)·m) при n = |V|, m = |E|обычнозаписываютO(sqrt(n)m)приn=V,m=E. Краткая интуиция оценки: каждая фаза одинBFS+несколькоDFSодин BFS + несколько DFSодинBFS+несколькоDFS увеличивает размер matching на ≥1 и за каждую ~OEEE работы либо происходит значительное увеличение размера matching всумменеболееsqrt(V)фаздаютмногоприростав сумме не более sqrt(V) фаз дают много прироставсумменеболееsqrt(V)фаздаютмногоприроста, либо длина кратчайшего увеличивающего пути увеличивается, и длина может увеличиваться не больше Osqrt(V)sqrt(V)sqrt(V) раз; формальный анализ даёт O√V⋅E√V · EVE.

Практическая применимость Hopcroft–Karp:

Очень эффективен для больших разреженных двудольных графов при поиске максимального паросочетания по мощности.Часто используется в задачах вида распределение заданий/ресурсов, назначение assignmentбезвесовassignment без весовassignmentбезвесов, сопоставление в биоинформатике, алгоритмы потоков и т.д.Реализуется довольно просто и присутствует во многих библиотеках CP,networkx,boostCP, networkx, boostCP,networkx,boost.

Альтернативы:

Редукция к потоку: построить сеть с источником, стоком, ребрами из source→L cap=1cap=1cap=1, из L→R cap=1порёбрамисходногографаcap=1 по рёбрам исходного графаcap=1порёбрамисходногографа и R→sink cap=1cap=1cap=1. Тогда любой алгоритм максимального потока Dinic,Edmonds−Karp,Push–RelabelDinic, Edmonds-Karp, Push–RelabelDinic,EdmondsKarp,PushRelabel даст максимальное паросочетание. Для графов с единичными пропускными способностями Dinic обычно работает за Osqrt(V)⋅Esqrt(V) · Esqrt(V)E на практике и имеет хорошие реализации.Для взвешенного максимального паросочетания максимумпосуммевесовмаксимум по сумме весовмаксимумпосуммевесов применяется алгоритм Хунгарана Kuhn–MunkresKuhn–MunkresKuhnMunkres за On3n^3n3 для полного двудольного графа n—размерчастиn — размер частиnразмерчасти, либо min-cost max-flow для общего случая медленнеедлябольшихграфовмедленнее для больших графовмедленнеедлябольшихграфов.

5) Максимальное паросочетание в не двудольных графах

Для общих недвудольныхне двудольныхнедвудольных графов применяется алгоритм Эдмондса blossomalgorithmblossom algorithmblossomalgorithm, который умеет "сворачивать" чётные циклы blossomsblossomsblossoms. Классическая сложность OV3V^3V3, более современные реализации Micali–VaziraniMicali–VaziraniMicaliVazirani дают O√V⋅E√V · EVE. Реализация более сложна, но доступны готовые библиотеки BoostGraphLibrary,Lemon,LEDAидр.Boost Graph Library, Lemon, LEDA и др.BoostGraphLibrary,Lemon,LEDAидр..Практически, если граф двудолен — используйте Hopcroft–Karp; если нет — либо Blossom длябезвесовогодля безвесовогодлябезвесового, либо редукция к min-cost flow/Hungarian для взвешенной версии.

6) Приложения в реальных задачах

Задачи распределения и назначения: работа — вакансии, студент — проект, задачи с ресурсами.Сетевая маршрутизация и паросочетание используются при построении пар в сетях обмена peer−to−peerpeer-to-peerpeertopeer, парные сопоставления в биоинформатике сопоставлениегенов/структурсопоставление генов/структурсопоставлениегенов/структур, сопоставление признаков в компьютерном зрении.В задачах оптимизации и теории расписаний часто нужна максимальная кардинальная пара илимаксимальнаяповесуили максимальная по весуилимаксимальнаяповесу.Комбинирование с потоками, min-cost-max-flow, или с алгоритмами для динамического обновления паросочетания для онлайн/потоковых приложений.

7) Резюме по сложностям итоговаясводкаитоговая сводкаитоговаясводка

Проверка двудольности BFS/DFSBFS/DFSBFS/DFS: O∣V∣+∣E∣|V| + |E|V+E.Наивный поиск увеличивающего пути KuhnKuhnKuhn для двудольных графов: O∣L∣⋅∣E∣|L| · |E|LE в худшем случае, обычно прост и эффективен для средних размеров.Hopcroft–Karp максимальноенеперекрывающеесямнож.кратчайшихувеличивающихпутеймаксимальное неперекрывающееся множ. кратчайших увеличивающих путеймаксимальноенеперекрывающеесямнож.кратчайшихувеличивающихпутей: O√∣V∣⋅∣E∣√|V| · |E|√∣VE.Сеть + Dinic для единичных пропускных способностей: в практических ситуациях сопоставим с Hopcroft–Karp, часто O√∣V∣⋅∣E∣√|V| · |E|√∣VE на практике.Edmonds blossomblossomblossom для общих графов: классически O∣V∣3|V|^3V3, улучшенные варианты O√∣V∣⋅∣E∣√|V| · |E|√∣VE.Взвешенное двудольное назначение Hungarian/Kuhn–MunkresHungarian/Kuhn–MunkresHungarian/KuhnMunkres: On3n^3n3 для полного графа n×n.

Если хотите, могу:

Привести подробный псевдокод Hopcroft–Karp и доказательство оценки сложности пошагово;Показать пример работы алгоритма на конкретном графе;Порекомендовать реализации/библиотеки на C++, Python networkx,scipynetworkx, scipynetworkx,scipy, Java.
10 Окт в 14:01
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир