Введение

Алгоритм полиномиального времени для задачи назначения.
Венгерский метод — это алгоритм комбинаторной оптимизации, который решает задачу назначения за полиномиальное время и предвосхитил более поздние методы примально-дуального типа. Он был разработан и опубликован в 1955 году Гарольдом Куном, который дал ему название «венгерский метод», поскольку алгоритм в значительной степени основывался на более ранних работах двух венгерских математиков, Денеша Кёнига и Йене Эгервари. Однако в 2006 году было обнаружено, что Карл Густав Якоби решил задачу назначения в XIX веке, а решение было опубликовано посмертно в 1890 году на латыни. Джеймс Мункрес проанализировал алгоритм в 1957 году и отметил, что он является (строго) полиномиальным. С тех пор алгоритм также известен как алгоритм Куна — Мункреса или алгоритм назначения Мункреса. Временная сложность исходного алгоритма составляла , однако Эдмондс и Карп, а также независимо Томизава, заметили, что его можно модифицировать для достижения времени работы . Одним из наиболее популярных вариантов является алгоритм Йонкера — Волгенанта. Форд и Фулкерсон расширили этот метод для решения общих задач о максимальном потоке в форме алгоритма Форда — Фулкерсона.

Формулировка двустороннего графа

Алгоритм можно эквивалентно описать, сформулировав задачу с помощью двудольного графа. У нас есть полный двудольный граф с n вершинами работников (S) и n вершинами заданий (T), и каждое ребро (E) имеет неотрицательную стоимость. Мы хотим найти совершенное паросочетание с минимальной суммарной стоимостью.

Доказательство того, что алгоритм делает прогресс

Мы должны показать, что пока сопоставление не достигло максимально возможного размера, алгоритм всегда способен продвинуться вперёд — то есть либо увеличить число сопоставленных рёбер, либо усилить хотя бы одно ребро. Достаточно показать, что на каждом шаге выполняется хотя бы одно из следующих условий: M имеет максимально возможный размер, содержит увеличивающий путь, или G содержит свободный хвостовой путь: путь из некоторой вершины в вершину, состоящий из любого числа (возможно, нуля) усиленных рёбер, за которым следует одно свободное ребро. Завершающее свободное ребро свободного хвостового пути исходит из , что гарантирует корректность определения Δ. Если M имеет максимально возможный размер, мы, конечно, завершили работу. В противном случае, по лемме Берже, в базовом графе G должен существовать увеличивающий путь P относительно M. Однако этот путь может отсутствовать в : хотя каждое чётное ребро в P усилено по определению M, нечётные рёбра могут быть свободными и, следовательно, отсутствовать в . Один конец P находится в , другой в ; без ограничения общности, предположим, что он начинается в . Если все рёбра на P усилены, то он остаётся увеличивающим путём в и мы завершили работу. В противном случае, пусть — первое свободное ребро на P. Если , то мы нашли свободный хвостовой путь и завершили работу. В противном случае, вершина v достижима из некоторого другого пути Q, состоящего из усиленных рёбер, из вершины в . Пусть — подпуть P, начинающийся с v и продолжающийся до конца, а — путь, образованный движением по Q до достижения вершины на , а затем продолжением до конца . Отметим, что — увеличивающий путь в G с как минимум на одно свободное ребро меньше, чем в P. Путь P можно заменить на , и этот процесс рассуждений можно повторять (формально, используя индукцию по числу свободных рёбер), пока не будет найден либо увеличивающий путь в , либо свободный хвостовой путь в G.

Доказательство того, что корректировка потенциала y оставляет M неизменным

Чтобы показать, что каждый рёбер в M остаётся после корректировки y, достаточно показать, что для произвольного ребра в M, либо обе его конечные вершины, либо ни одна из них, находятся в Z. Для этого рассмотрим ребро в M от T к S. Легко видеть, что если v находится в Z, то u также должно находиться там, поскольку каждое ребро в M является натянутым. Теперь предположим, для получения противоречия, что, но сама u не может находиться в, потому что она является конечной вершиной сопоставленного ребра, следовательно, должен существовать некоторый направленный путь натянутых рёбер от вершины в Z к u. Этот путь должен избегать v, поскольку по предположению v не находится в Z, поэтому вершина, непосредственно предшествующая u в этом пути, является некоторой другой вершиной. Но тогда существует натянутое ребро от T к S, которое принадлежит M. Однако, это означает, что M содержит два ребра, имеющих общую вершину u, что противоречит тому факту, что M является сопоставлением. Таким образом, каждое ребро в M имеет либо обе конечные вершины, либо ни одной конечной вершины в Z.

Доказательство, что остается потенциальным

Чтобы показать, что y остаётся потенциалом после корректировки, достаточно показать, что у любого ребра общий потенциал не увеличивается сверх его стоимости. Это уже установлено для рёбер в M в предыдущем абзаце, поэтому рассмотрим произвольное ребро uv из S в T. Если потенциал этого ребра увеличивается на Δ, то либо потенциал вершины u увеличивается на Δ, в этом случае потенциал вершины v уменьшается на Δ, оставляя общий потенциал ребра без изменений, либо потенциал вершины v увеличивается на Δ, в этом случае определение Δ гарантирует, что потенциал вершины u уменьшается на Δ. Таким образом, y остаётся потенциалом.

Алгоритм в O ((n3) времени

Предположим, есть задач и рабочих. Мы опишем, как вычислить для каждого префикса задач минимальную общую стоимость назначения каждой из этих задач различным рабочим. В частности, мы добавляем -ю задачу и обновляем общую стоимость за время , что даёт общую временную сложность . Следует отметить, что это лучше, чем , когда количество задач мало по сравнению с количеством рабочих.

Добавление j-го задания в O ((jW) времени

Мы используем ту же нотацию, что и в предыдущем разделе, хотя при необходимости изменяем их определения. Пусть обозначает множество первых задач, а – множество всех работников. Перед -м шагом алгоритма мы предполагаем, что у нас есть соответствие на , которое сопоставляет все задачи из и потенциалы , удовлетворяющие следующему условию: соответствие является точным относительно потенциалов, потенциалы всех не сопоставленных работников равны нулю, а потенциалы всех сопоставленных работников неположительны. Отметим, что такие потенциалы подтверждают оптимальность соответствия. В течение -го шага мы добавляем -ю задачу к , формируя и инициализируем. В любой момент времени каждая вершина в будет достижима из -й задачи в Пока не содержит работника, которому не назначена задача, пусть и обозначают любой , в котором достигается минимум. После корректировки потенциалов способом, описанным в предыдущем разделе, теперь существует точное ребро из в . Если не сопоставлен, то у нас есть расширяющий путь в подграфе точных ребер из в . После переключения соответствия вдоль этого пути мы теперь сопоставили первые задач, и эта процедура завершается. В противном случае мы добавляем и задачу, сопоставленную с ним, к . Корректировка потенциалов занимает времени. Перевычисление и после изменения потенциалов и также может быть выполнено за времени. Случай 1 может произойти не более раз до того, как произойдет случай 2 и процедура завершится, что дает общую временную сложность .

Интерпретация матрицы

Этот вариант алгоритма соответствует формулировке, предложенной Фладом, а затем более подробно описанной Мункресом, который доказал, что его работа занимает время . Минимальное количество линий (минимальное вершинное покрытие) равно n (размер максимального паросочетания). Следовательно, когда требуется n линий, задачу минимальной стоимости можно решить, рассматривая только нули в матрице.