Введение
Алгоритм полиномиального времени для задачи назначения.
Венгерский метод — это алгоритм комбинаторной оптимизации, который решает задачу назначения за полиномиальное время и предвосхитил более поздние методы примально-дуального типа. Он был разработан и опубликован в 1955 году Гарольдом Куном, который дал ему название «венгерский метод», поскольку алгоритм в значительной степени основывался на более ранних работах двух венгерских математиков, Денеша Кёнига и Йене Эгервари. Однако в 2006 году было обнаружено, что Карл Густав Якоби решил задачу назначения в XIX веке, а решение было опубликовано посмертно в 1890 году на латыни. Джеймс Мункрес проанализировал алгоритм в 1957 году и отметил, что он является (строго) полиномиальным. С тех пор алгоритм также известен как алгоритм Куна — Мункреса или алгоритм назначения Мункреса. Временная сложность исходного алгоритма составляла , однако Эдмондс и Карп, а также независимо Томизава, заметили, что его можно модифицировать для достижения времени работы . Одним из наиболее популярных вариантов является алгоритм Йонкера — Волгенанта. Форд и Фулкерсон расширили этот метод для решения общих задач о максимальном потоке в форме алгоритма Форда — Фулкерсона.
The Hungarian method is a combinatorial optimization algorithm that solves the assignment problem in polynomial time and which anticipated later primal–dual methods. It was developed and published in 1955 by Harold Kuhn, who gave it the name "Hungarian method" because the algorithm was largely based on the earlier works of two Hungarian mathematicians, Dénes Kőnig and Jenő Egerváry. However, in 2006 it was discovered that Carl Gustav Jacobi had solved the assignment problem in the 19th century, and the solution had been published posthumously in 1890 in Latin. James Munkres reviewed the algorithm in 1957 and observed that it is (strongly) polynomial. Since then the algorithm has been known also as the Kuhn–Munkres algorithm or Munkres assignment algorithm. The time complexity of the original algorithm was , however Edmonds and Karp, and independently Tomizawa, noticed that it can be modified to achieve an running time. One of the most popular variants is the Jonker–Volgenant algorithm. Ford and Fulkerson extended the method to general maximum flow problems in form of the Ford–Fulkerson algorithm.
Формулировка двустороннего графа
Алгоритм можно эквивалентно описать, сформулировав задачу с помощью двудольного графа. У нас есть полный двудольный граф с 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.
M is of maximum possible size. contains an augmenting path. G contains a loose tailed path: a path from some vertex in to a vertex in that consists of any number (possibly zero) of tight edges followed by a single loose edge. The trailing loose edge of a loose tailed path is thus from , guaranteeing that Δ is well defined. If M is of maximum possible size, we are of course finished. Otherwise, by Berge's lemma, there must exist an augmenting path P with respect to M in the underlying graph G. However, this path may not exist in : Although every even numbered edge in P is tight by the definition of M, odd numbered edges may be loose and thus absent from One endpoint of P is in , the other in ; w. l. o. g., suppose it begins in If every edge on P is tight, then it remains an augmenting path in and we are done. Otherwise, let be the first loose edge on P. If then we have found a loose tailed path and we are done. Otherwise, v is reachable from some other path Q of tight edges from a vertex in Let be the subpath of P beginning at v and continuing to the end, and let be the path formed by traveling along Q until a vertex on is reached, and then continuing to the end of Observe that is an augmenting path in G with at least one fewer loose edge than P. P can be replaced with and this reasoning process iterated (formally, using induction on the number of loose edges) until either an augmenting path in or a loose tailed path in G is found.
Доказательство того, что корректировка потенциала 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 и процедура завершится, что дает общую временную сложность .
and denote any at which the minimum is attained. After adjusting the potentials in the way described in the previous section, there is now a tight edge from to
If is unmatched, then we have an augmenting path in the subgraph of tight edges from to After toggling the matching along this path, we have now matched the first jobs, and this procedure terminates. Otherwise, we add and the job matched with it to
Adjusting potentials takes time. Recomputing and after changing the potentials and also can be done in time. Case 1 can occur at most times before case 2 occurs and the procedure terminates, yielding the overall time complexity of .
Интерпретация матрицы
Этот вариант алгоритма соответствует формулировке, предложенной Фладом, а затем более подробно описанной Мункресом, который доказал, что его работа занимает время . Минимальное количество линий (минимальное вершинное покрытие) равно n (размер максимального паросочетания). Следовательно, когда требуется n линий, задачу минимальной стоимости можно решить, рассматривая только нули в матрице.