Алгоритм Хопкрофта-Карпа - Hopcroft–Karp algorithm
Класс | Алгоритм графа |
---|---|
Структура данных | График |
Худший случай спектакль | |
Худший случай космическая сложность |
В Информатика, то Алгоритм Хопкрофта – Карпа (иногда точнее называется Алгоритм Хопкрофта – Карпа – Карзанова)[1] является алгоритм который принимает на входе двудольный граф и производит на выходе максимальное соответствие количества элементов - набор из максимально возможного количества ребер с тем свойством, что никакие два ребра не имеют общей конечной точки. Он работает в время в худший случай, где - множество ребер в графе, - множество вершин графа, и предполагается, что . На случай, если плотные графы срок становится , а для редких случайные графы он работает почти за линейное (в | E |) время[нужна цитата ].
Алгоритм был найден Джон Хопкрофт и Ричард Карп (1973 ) и независимо Александр Карзанов (1973 ).[2] Как и в предыдущих методах сопоставления, таких как Венгерский алгоритм и работа Эдмондс (1965), алгоритм Хопкрофта – Карпа многократно увеличивает размер частичного совпадения, находя расширение путей. Эти пути представляют собой последовательности ребер графа, которые чередуются между ребрами в сопоставлении и ребрами из частичного сопоставления, и где начальное и конечное ребро не входят в частичное сопоставление. Нахождение увеличивающего пути позволяет нам увеличивать размер частичного соответствия, просто переключая края увеличивающего пути (вставляя частичное совпадение с теми, которые не были, и наоборот). Более простые алгоритмы для двудольного сопоставления, такие как Алгоритм Форда – Фулкерсона ‚Найдите один увеличивающий путь на итерацию: алгоритм Хопкрофта-Карпа вместо этого находит максимальный набор кратчайших увеличивающих путей, чтобы гарантировать, что только необходимы итерации вместо итераций. Такое же исполнение может быть достигнуто, чтобы найти совпадения максимальной мощности в произвольных графах, с помощью более сложного алгоритма Микали и Вазирани.[3]
Алгоритм Хопкрофта – Карпа можно рассматривать как частный случай Алгоритм диника для проблема максимального расхода.[4]
Расширение путей
Вершина, которая не является конечной точкой ребра в некотором частичном совпадении называется свободная вершина. Основная концепция, на которой основан алгоритм, - это концепция расширение пути, путь, который начинается в свободной вершине, заканчивается в свободной вершине и чередуется между несовпадающими и согласованными ребрами внутри пути. Из этого определения следует, что, за исключением конечных точек, все другие вершины (если есть) в увеличивающем пути должны быть несвободными вершинами. Расширяющий путь может состоять только из двух вершин (обе свободные) и одного несовпадающего ребра между ними.
Если соответствует, и является дополнительным путем относительно , то симметричная разница из двух наборов ребер, , будет соответствовать размеру . Таким образом, найдя дополнительные пути, алгоритм может увеличить размер сопоставления.
Наоборот, предположим, что соответствие не оптимально, и пусть быть симметричной разностью где оптимальное соответствие. Потому что и являются паросочетаниями, каждая вершина имеет степень не выше 2 в . Так должны образовывать набор непересекающихся циклов путей с равным количеством совпадающих и несовпадающих ребер в , дополнительных путей для , и дополнительных путей для ; но последнее невозможно, потому что оптимально. Теперь циклы и пути с равным количеством совпавших и несовпадающих вершин не влияют на разницу в размере между и , так что эта разница равна количеству дополнительных путей для в . Таким образом, всякий раз, когда существует соответствие больше, чем текущее соответствие , также должен существовать дополнительный путь. Если не удается найти расширяющий путь, алгоритм может безопасно завершиться, поскольку в этом случае должен быть оптимальным.
Расширяющий путь в проблеме сопоставления тесно связан с расширение путей возникающий в проблемы с максимальным потоком, пути, по которым можно увеличить количество потока между терминалами потока. Можно преобразовать задачу двустороннего согласования в пример максимального потока, так что чередующиеся пути задачи согласования становятся дополнительными путями проблемы потока. Достаточно вставить две вершины, источник и сток, и вставить ребра единичной мощности от источника в каждую вершину в , и из каждой вершины в к раковине; и пусть края от к имеют единицу мощности.[5] Обобщение метода, используемого в алгоритме Хопкрофта – Карпа для поиска максимального потока в произвольных сетях, известно как Алгоритм диника.
Алгоритм
Алгоритм можно выразить в следующем псевдокод.
- Ввод: Двудольный граф
- Вывод: Соответствие
- повторение
- максимальное множество непересекающихся по вершинам кратчайших дополняющих путей
- до тех пор
Более подробно пусть и - два множества в двудольном , и пусть совпадение из к в любой момент можно представить как набор .Алгоритм выполняется поэтапно. Каждый этап состоит из следующих шагов.
- А поиск в ширину разбивает вершины графа на слои. Свободные вершины в используются как начальные вершины этого поиска и образуют первый слой разбиения. На первом уровне поиска есть только несовпадающие ребра, так как свободные вершины в по определению не примыкают ни к каким согласованным ребрам. На последующих уровнях поиска пройденные края должны чередоваться между совпадающими и несогласованными. То есть при поиске наследников из вершины в , могут быть пересечены только несовпадающие ребра, а из вершины в могут быть пересечены только совпавшие края. Поиск заканчивается на первом слое. где одна или несколько свободных вершин в достигнуты.
- Все свободные вершины в на слое собраны в набор . То есть вершина помещается в тогда и только тогда, когда он заканчивается кратчайшим путем увеличения.
- Алгоритм находит максимальный набор непересекающаяся вершина увеличение длины пути . (Максимальный означает, что больше нельзя добавлять такие пути. Это отличается от поиска максимум количество таких путей, которые было бы труднее сделать. К счастью, здесь достаточно найти максимальный набор путей.) Это множество можно вычислить с помощью поиск в глубину (DFS) из к свободным вершинам в , используя слои в ширину для направления поиска: DFS разрешено следовать только за ребрами, ведущими к неиспользуемой вершине на предыдущем уровне, а пути в дереве DFS должны чередоваться между совпадающими и несогласованными ребрами. Как только будет найден дополнительный путь, включающий одну из вершин в , ДФС продолжается со следующей стартовой вершины. Любая вершина, обнаруженная во время DFS, может быть немедленно помечена как использованная, поскольку, если от нее нет пути к в текущей точке DFS, то эту вершину нельзя использовать для достижения в любой другой точке DFS. Это гарантирует время работы DFS. Также можно работать в обратном направлении, от свободных вершин в тем в , который является вариантом, используемым в псевдокоде.
- Каждый из найденных таким образом путей используется для увеличения .
Алгоритм завершается, когда в части поиска в первую очередь в ширину одной из фаз не обнаруживаются дополнительные пути.
Анализ
Каждая фаза состоит из одного поиска в ширину и одного поиска в глубину. Таким образом, одна фаза может быть реализована в время. Поэтому первый фаз, на графике с вершины и края, займите время .
Каждая фаза увеличивает длину кратчайшего пути увеличения как минимум на один: фаза находит максимальный набор путей увеличения заданной длины, поэтому любой оставшийся путь увеличения должен быть длиннее. Поэтому, как только начальный этапы алгоритма завершены, кратчайший оставшийся путь дополнения имеет не менее края в нем. Однако симметричная разница возможного оптимального соответствия и частичного соответствия M найденный начальными фазами, образует совокупность непересекающихся по вершинам дополняющих путей и чередующихся циклов. Если каждый из путей в этой коллекции имеет длину не менее , может быть не больше путей в коллекции, а размер оптимального соответствия может отличаться от размера самое большее края. Поскольку каждая фаза алгоритма увеличивает размер сопоставления по крайней мере на один, может быть не более дополнительные фазы перед завершением алгоритма.
Поскольку алгоритм выполняет в общей сложности не более фаз, это занимает общее время в худшем случае.
Однако во многих случаях время, затрачиваемое алгоритмом, может быть даже быстрее, чем показывает анализ наихудшего случая. Например, в средний случай для редкий двудольный случайные графы, Bast et al. (2006) (улучшение предыдущего результата Мотвани 1994 ) показал, что с большой вероятностью все неоптимальные сопоставления имеют увеличивающие пути логарифмический длина. Как следствие, для этих графов алгоритм Хопкрофта – Карпа принимает фазы и общее время.
Сравнение с другими алгоритмами двудольного сопоставления
Для разреженные графики, алгоритм Хопкрофта – Карпа по-прежнему имеет наилучшую известную производительность в худшем случае, но для плотных графов () более свежий алгоритм Alt et al. (1991) обеспечивает немного лучшие временные рамки, . Их алгоритм основан на использовании push-relabel алгоритм максимального потока а затем, когда соответствие, созданное этим алгоритмом, становится близким к оптимальному, переходят к методу Хопкрофта – Карпа.
Несколько авторов выполнили экспериментальные сравнения алгоритмов двустороннего сопоставления. Их результаты в целом показывают, что метод Хопкрофта – Карпа на практике не так хорош, как в теории: он уступает как более простым стратегиям поиска в ширину и в глубину для поиска дополнительных путей, так и методам push-relabel. .[6]
Недвудольные графы
Та же самая идея поиска максимального набора кратчайших дополняющих путей работает также для поиска совпадений максимальной мощности в недвудольных графах, и по тем же причинам алгоритмы, основанные на этой идее, принимают фазы. Однако для недвудольных графов задача поиска увеличивающих путей внутри каждой фазы является более сложной. Основываясь на работе нескольких более медленных предшественников, Микали и Вазирани (1980) показал, как реализовать фазу за линейное время, что привело к алгоритму недвудольного сопоставления с той же временной границей, что и алгоритм Хопкрофта – Карпа для двудольных графов. Методика Микали – Вазирани сложна, и ее авторы не предоставили полных доказательств своих результатов; впоследствии "ясное изложение" было опубликовано Петерсон и Луи (1988) и альтернативные методы описаны другими авторами.[7] В 2012 году Вазирани предложил новое упрощенное доказательство алгоритма Микали-Вазирани.[8]
Псевдокод
/ * G = U ∪ V ∪ {NIL}, где U и V - левая и правая части двудольного графа, а NIL - специальная нулевая вершина * / функция BFS () является для каждого ты в U делать если Pair_U [u] = NIL тогда Dist [u]: = 0 Enqueue (Q, u) еще Dist [u]: = ∞ Dist [NIL]: = ∞ в то время как Пусто (Q) = ложь делать u: = Удалить из очереди (Q) если Расст. [U] <Расст. [NIL] тогда для каждого v в Adj [u] делать если Расстояние [Pair_V [v]] = ∞ тогда Dist [Pair_V [v]]: = Dist [u] + 1 Enqueue (Q, Pair_V [v]) вернуть Dist [NIL] ≠ ∞функция ДФС (u) является если u ≠ ноль тогда для каждого v в Adj [u] делать если Расстояние [Pair_V [v]] = Расстояние [u] + 1 тогда если DFS (Pair_V [v]) = истина тогда Pair_V [v]: = u Pair_U [u]: = v вернуть истинное расстояние [u]: = ∞ вернуть ложный вернуть правдафункция Хопкрофт – Карп является для каждого ты в U делать Pair_U [u]: = NIL для каждого v в V делать Pair_V [v]: = NIL соответствие: = 0 в то время как BFS () = истина делать для каждого ты в U делать если Pair_U [u] = NIL тогда если DFS (u) = истина тогда соответствие: = соответствие + 1 вернуть соответствие
Объяснение
Пусть вершины нашего графа разделены на U и V, и рассмотрим частичное совпадение, как указано в таблицах Pair_U и Pair_V, которые содержат одну вершину, с которой сопоставляется каждая вершина U и V, или NIL для несовпадающих вершин. Ключевая идея состоит в том, чтобы добавить две фиктивные вершины с каждой стороны графа: uDummy, подключенный ко всем несовпадающим вершинам в U, и vDummy, подключенный ко всем несовпадающим вершинам в V. Теперь, если мы запустим поиск в ширину (BFS) от uDummy к vDummy, тогда мы можем получить пути минимальной длины, которые соединяют несогласованные в данный момент вершины в U с несогласованными в настоящее время вершинами в V. Обратите внимание, что, поскольку граф является двудольным, эти пути всегда чередуются между вершинами в U и вершинами в V, и мы требуем в нашей BFS, чтобы при переходе от V к U мы всегда выбирали согласованное ребро. Если мы достигаем несовпадающей вершины V, то мы заканчиваем на vDummy и поиск путей в BFS прекращается. Подводя итог, BFS начинается с несовпадающих вершин в U, переходит ко всем их соседям в V, если все совпадают, то он возвращается к вершинам в U, которым сопоставлены все эти вершины (и которые не были посещены ранее), затем он переходит ко всем соседям этих вершин и т. д., пока одна из вершин, достигнутая в V, не станет несовместимой.
В частности, обратите внимание, что BFS отмечает несогласованные узлы U с расстоянием 0, а затем увеличивает расстояние каждый раз, когда возвращается к U. Это гарантирует, что пути, рассматриваемые в BFS, имеют минимальную длину для соединения несовпадающих вершин U с несовпадающими вершинами V, всегда возвращаясь от V к U на ребрах, которые в настоящее время являются частью соответствия. В частности, специальной вершине NIL, которая соответствует vDummy, затем назначается конечное расстояние, поэтому функция BFS возвращает истину, если был найден какой-то путь. Если путь не найден, значит, дополнительных путей не осталось и соответствие максимальное.
Если BFS возвращает истину, мы можем продолжить и обновить пары для вершин на путях минимальной длины, найденных от U до V: мы делаем это, используя поиск в глубину (DFS). Обратите внимание, что каждая вершина в V на таком пути, кроме последней, в настоящее время сопоставляется. Таким образом, мы можем исследовать с помощью DFS, убедившись, что пути, по которым мы идем, соответствуют расстояниям, вычисленным в BFS. Мы обновляем вдоль каждого такого пути, удаляя из сопоставления все ребра пути, которые в настоящее время находятся в сопоставлении, и добавляя к сопоставлению все кромки пути, которые в настоящее время не находятся в сопоставлении: поскольку это дополняющий путь (первый и последние кромки пути не были частью сопоставления, и путь чередовался между сопоставленными и несовпадающими кромками), тогда это увеличивает количество кромок в сопоставлении. Это то же самое, что заменить текущее совпадение симметричной разницей между текущим совпадением и всем путем.
Обратите внимание, что код гарантирует, что все рассматриваемые нами расширяющие пути не пересекаются с вершинами. Действительно, после выполнения симметричной разницы для пути ни одна из его вершин не может быть снова рассмотрена в DFS только потому, что Dist [Pair_V [v]] не будет равно Dist [u] + 1 (это будет в точности Dist [u]).
Также обратите внимание, что DFS не посещает одну и ту же вершину несколько раз. Это благодаря следующим строкам:
Dist [u] = ∞ return false
Когда нам не удалось найти какой-либо кратчайший увеличивающий путь из вершины u, тогда DFS помечает вершину u, устанавливая Dist [u] равным бесконечности, чтобы эти вершины больше не посещались.
И последнее наблюдение: на самом деле нам не нужен uDummy: его роль просто помещать все несогласованные вершины U в очередь, когда мы запускаем BFS. Что касается vDummy, в псевдокоде выше он обозначен как NIL.
Смотрите также
- Соответствие максимальной мощности, проблема, решаемая алгоритмом, и ее обобщение на недвудольные графы
- Проблема с присвоением, обобщение этой проблемы на взвешенные графики, решено, например посредством Венгерский алгоритм
- Алгоритм Эдмондса – Карпа для поиска максимального потока, обобщение алгоритма Хопкрофта – Карпа
Заметки
- ^ Габоу (2017); Аннамалай (2018)
- ^ Диниц (2006).
- ^ Петерсон, Пол А .; Луи, Майкл К. (1988-11-01). «Общий алгоритм максимального соответствия Микали и Вазирани». Алгоритмика. 3 (1): 511–533. Дои:10.1007 / BF01762129. ISSN 1432-0541. S2CID 16820.
- ^ Тарджан, Роберт Эндре (1983-01-01). Структуры данных и сетевые алгоритмы. CBMS-NSF Серия региональных конференций по прикладной математике. Общество промышленной и прикладной математики. Дои:10.1137/1.9781611970265. ISBN 978-0-89871-187-5., стр.102
- ^ Ахуджа, Маньянти и Орлин (1993), раздел 12.3, задача о двудольном согласовании мощности, стр. 469–470.
- ^ Чанг и Маккормик (1990); Дарби-Доуман (1980); Сетубал (1993); Сетубал (1996).
- ^ Габоу и Тарджан (1991).
- ^ Вазирани (2012)
использованная литература
- Ахуджа, Равиндра К.; Маньянти, Томас Л.; Орлин, Джеймс Б. (1993), Сетевые потоки: теория, алгоритмы и приложения, Прентис-Холл.
- Alt, H .; Blum, N .; Мельхорн, К.; Пол, М. (1991), "Вычисление максимального соответствия мощности в двудольном графе во времени ", Письма об обработке информации, 37 (4): 237–240, Дои:10.1016 / 0020-0190 (91) 90195-Н.
- Аннамалай, Чидамбарам (2018), "Нахождение идеальных пар в двудольных гиперграфах", Комбинаторика, 38 (6): 1285–1307, arXiv:1509.07007, Дои:10.1007 / s00493-017-3567-2, Г-Н 3910876, S2CID 1997334
- Баст, Хольгер; Мельхорн, Курт; Шафер, Гвидо; Тамаки, Хисао (2006), «Алгоритмы сопоставления работают быстро в разреженных случайных графах», Теория вычислительных систем, 39 (1): 3–14, Дои:10.1007 / s00224-005-1254-у, S2CID 9321036.
- Чанг, С. Франк; Маккормик, С. Томас (1990), Более быстрая реализация алгоритма двудольного соответствия мощности, Тех. Rep. 90-MSC-005, факультет торговли и делового администрирования, Univ. Британской Колумбии. Как цитирует Сетубал (1996).
- Дарби-Доуман, Кеннет (1980), Использование разреженности в крупномасштабных задачах линейного программирования - структуры данных и алгоритмы реструктуризации, Кандидат наук. диссертация, Университет Брунеля. Как цитирует Сетубал (1996).
- Диниц, Ефим (2006), «Алгоритм Диница: исходная версия и версия Эвена», в Гольдрайх, Одед; Розенберг, Арнольд Л.; Селман, Алан Л. (ред.), Теоретическая информатика: очерки памяти Шимона Эвена, Конспект лекций по информатике, 3895, Берлин и Гейдельберг: Springer, стр. 218–240, Дои:10.1007/11685654_10.
- Эдмондс, Джек (1965), «Дорожки, деревья и цветы», Канадский математический журнал, 17: 449–467, Дои:10.4153 / CJM-1965-045-4, Г-Н 0177907.
- Габоу, Гарольд Н. (2017), "Подход с взвешенным соответствием к соответствию максимальной мощности", Fundamenta Informaticae, 154 (1–4): 109–130, arXiv:1703.03998, Дои:10.3233 / FI-2017-1555, Г-Н 3690573, S2CID 386509
- Габоу, Гарольд Н .; Тарджан, Роберт Э. (1991), "Более быстрые алгоритмы масштабирования для общих задач сопоставления графов", Журнал ACM, 38 (4): 815–853, Дои:10.1145/115234.115366, S2CID 18350108.
- Хопкрофт, Джон Э.; Карп, Ричард М. (1973), "Ан п5/2 алгоритм максимальных паросочетаний в двудольных графах », SIAM Журнал по вычислениям, 2 (4): 225–231, Дои:10.1137/0202019. Ранее было объявлено на 12-м ежегодном симпозиуме по теории переключений и автоматов, 1971 г.
- Карзанов, А.В. (1973), «Точная оценка алгоритма поиска максимального потока применительно к задаче о представителях», Проблемы кибернетики, 5: 66–70. Ранее анонсировано на Семинаре по комбинаторной математике (Москва, 1971).
- Микали, С.; Вазирани, В.В. (1980), "An алгоритм поиска максимального совпадения в общих графах », Proc. 21-й симпозиум IEEE. Основы компьютерных наук, стр. 17–27, Дои:10.1109 / SFCS.1980.12, S2CID 27467816.
- Петерсон, Пол А .; Луи, Майкл С. (1988), "Общий алгоритм максимального соответствия Микали и Вазирани", Алгоритмика, 3 (1–4): 511–533, CiteSeerX 10.1.1.228.9625, Дои:10.1007 / BF01762129, S2CID 16820.
- Мотвани, Раджив (1994), "Анализ среднего случая алгоритмов сопоставлений и связанных задач", Журнал ACM, 41 (6): 1329–1356, Дои:10.1145/195613.195663, S2CID 2968208.
- Сетубал, Жоао К. (1993), "Новые экспериментальные результаты для двудольного сопоставления", Proc. Netflow93, Кафедра информатики, Univ. Пизы, стр. 211–216. Как цитирует Сетубал (1996).
- Сетубал, Жоао К. (1996), Последовательные и параллельные экспериментальные результаты с алгоритмами двустороннего сопоставления, Тех. Представитель IC-96-09, Inst. вычислительной техники, Univ. Кампинаса, CiteSeerX 10.1.1.48.3539.
- Вазирани, Виджай (2012), Улучшенное определение цветков и более простое доказательство алгоритма сопоставления MV, CoRR абс / 1210.4594, arXiv:1210.4594, Bibcode:2012arXiv1210.4594V.