Х. Пападимитриу, К. Стайглиц - Комбинаторная оптимизация (1125252), страница 44
Текст из файла (страница 44)
Однако, если вернуться к построению увличивающпх путей на рис. 10.2(б), можно заметить, что этот поиск в ширину имеет специальную структуру. Шаги поиска из уровней с нечет. ными номерами (о, находится на нулевом уровне) довольно тривиальны, так как следующая вершина всегда является напарником текущей вершины.
Поэтому можно упростить поиск, игнорируя уровни с нечетными номерами и переходя непосредственно из внешних вершин в новые внешние вершины; в нашем примере такой поиск выполнялся бы так, как показано на рис, 10.2(в). Очевидно, это соответствует поиску по орграфу (]г, А), где (и„о,) Е А тогда и только тогда, когда о, может быть следующей внешней вершиной после о, в некотором увеличивающем пути, т. е. ш смежна с напарником вершины о,. Множество вершин этого вспомогательного орграфа совпадает с )г, так как, очевидно, только вершины из [г могут быть внешними вершинами в увеличивающих путях, начинающихся из )л. Вспомогательный граф, соответствующий нашему примеру из рис. 10.2(а), представлен на рис. 10.2(г).
Легко видеть, что поиск увеличивающих путей, представленный па рис. 10.2(в), совпадает с поиском в ширину по вспомогательному графу из вершины о,. Наряду с массивом пометка, используемым при поиске, наш алгоритм будет использовать еще два массива, напарник и свободная. Массив напарник содержит [Д + [У] элементов и служит для представления текущего паросочетания. Если оЕ[л, то свабодншйи1— это вершина из (л', которая свободна и смежна с о; если такой вершины нет, то свободная [о]=0 Очевидно, если в процессе поиска мы натолкнемся на такую вершину оЕ]г, что свободная[о] ~ О, это будет означать, что мы нашли увеличивающий путь.
Процедура УВЕЛИЧЕНИЕ является рекурсивной(вспомните процедуруПУТЬ, представленную на рис. 9.6). В нашем примере на рис. !0.2 вначале вызывается УВЕЛИЧЕНИЕ(о,); так как свободная[о,]=и„тс УВЕЛИЧЕНИЕ изменяет напарника вершины о, с и, иа и, и затем вызывает УВЕЛИЧЕНИЕ(и,). Напарник вершины о, изменяется с и, иа и„после чего вызывается УВЕЛИЧЕНИЕ(о,). Теперь !0.2.
Алгоритм построения парвсочвтакия пометка [оэ)=0, поэтому УВЕЛИЧЕНИЕ объединяет в пару вершины о, и и, и останавливается. Потностью этот алгоритм представлен на рис. 10.3. АЛГОРИТМ ПОСТРОЕНИЯ ДВУДОЛЪНОГО ПАРОСОЧЕТАНИЯ Вход: Двудольный граф В=(Ч, [), Е), Выход. Максимальное паросочетание в В, представленное массивом напарник. Ьей[п 1ог ап ч Е Ч() О до ниларник[ч):= О; (сопппепг: задание начальных значений) этап Ьеа1п 1ог а11 ч Е Ч до свободная[э): О; А: Я; (совшеп1: начало построения вспомогательного графа (Ч, А)) (ог ап [ч, и) Е Е 6о и наггирник[и) =О 1Ьеп свободнал[ч):=и е1зе и напарник[и) Ф ч Гйеп А;= А[) (ч, напарник[иун ! ! (с):=я; ! 1ог а~ МЕЧ до и напарник[у)=О гнеп , :О:= О[) (ч), пометка[э) = О; ыш!е О Ы р до Ьей!п пусть ч — вершина из О; удалить ч из О! П И свободная[ч) ~ О гнеп УВЕЛИЧЕНИЕ(ч), йо !о этап; ! ене 1ог аи непомеченных ч', таких, что (ч, ч') ЕА до пометка(ч']: = ч, Гч: = С) [) (ч') ! епд епд епд ргоседиге УВЕЛИЧЕНИЕ(ч) и иомегпка[ч) =О Гйеп напарник(ч1:=свободная[ч1, напарник[свободная(ч Ц: = ч! е1зе Ьей!п свободная[пометка[чЦ:= напарник[у); кипарник[ч1;= свободкая[ч); напарник(свободная[чЦ: ч; УВЕЛИЧЕНИЕ(пометка[ч)) епб Рис.
10.3. Алгоригм построения иаросочетаиня в авудольном графе. Доказан!ельсгпео. Алгоритм останавливается, если во вспомога. тельном графе нет пути из свободной вершины множества [г в целевую вершину. По построению вспомогательного графа это означив.!, %то в В не существует увеличивающего пути относительно теку.
Теорема 10.2. Алгоритлг, представленный на рис. 10.3, корректно ресиаеп! задачу о паросочетании для деудольного гра!)нг  — -((', [/, Е) за время О (пцп (














