Главная > Графы, сети и алгоритмы
НАПИШУ ВСЁ ЧТО ЗАДАЛИ
СЕКРЕТНЫЙ БОТ В ТЕЛЕГЕ
<< Предыдущий параграф Следующий параграф >>
Пред.
След.
Макеты страниц

Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше

Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике

ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO

15.5. Максимальные паросочетания в двудольном графе

Задача нахождения максимального паросочетания в двудольном графе имеет широкий спектр приложений. Например, она появляется как подзадача при решении транспортной задачи Хичкока [15.1]. Далее, составление расписаний в определенных случаях включает разбиение множества ребер двудольного графа на непересекающиеся

паросочетания этого графа. Определение элемента разбиения в свою очередь требует определения максимального паросочетания в двудольном графе. Это показано, например, в работе [15.35].

Ввиду такого разнообразия приложений интересна вычислительная сложность этой проблемы. Хопкрофт и Карп [15.36] показали, как построить максимальное паросочетание в двудольном графе за число шагов, пропорциональное где п — число вершин в графе. Методология их подхода основывается на некоторых интересных положениях (сформулированных ими) в теории паросочетаний. Эти положения и их алгоритм двудольного паросочетания обсуждаются в этом разделе.

15.5.1. Методология подхода Хопкрофта и Карпа

Все разработанные до сих пор алгоритмы максимального паросочетания начинают с паросочетания (которое может быть не максимальным) и получают, если оно существует, паросочетание большей мощности с помощью выделения добавляющего пути. Выбор добавляющего пути можно выполнить произвольным образом. Сложность этих алгоритмов составляет . Хопкрофт и Карп показали, что если дополнение осуществляется вдоль кратчайшего пути, то максимального паросочетания можно достичь за фаз, где каждая фаза включает в себя поиск максимального множества не пересекающихся по вершинам кратчайших, добавляющих по отношению к паросочетанию путей. Докажем этот результат.

Пусть М — паросочетание. Добавляющий путь Р называется кратчайшим путем по отношению к М, если Р имеет наименьшую длину среди всех добавляющих по отношению к М путей.

Лемма 15.3. Пусть М и N — два паросочетания в графе G. Если , где , то содержит по меньшей мере не пересекающихся по вершинам добавляющих по отношению к М путей.

Доказательство. Рассмотрим порожденный подграф G графа G на множестве ребер . Согласно теореме 8.19, каждая (связная) компонента подграфа G является 1) циклом четной длины, ребра которого попеременно входят в либо 2) путем, ребра которого попеременно входят в

Пусть компонентами G будут , где С - имеет множества вершин и ребер

Пусть . Тогда есть —1, либо 0, либо 1 для любого тогда и только тогда, когда С - добавляющий по отношению к k

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

Лемма 15.4. Пусть М — паросочетание. Пусть и предположим, что мощность млксимального паросочетания есть s. Тогда существует добавляющий по отношению к М путь длины не более

Доказательство. Пусть s — максимальное паросочетание. Тогда по предыдущей лемме содержит не менее не пересекающихся по вершинам (а следовательно, и ребрам) добавляющих по отношению к М путей. Вместе с тем эти пути содержат не более г ребер из М. Поэтому эти пути будут содержать не более ребер из М каждый и, следовательно, всего не более ребер.

Лемма 15.5. Пусть М — паросочетание, Р — кратчайший добавляющий по отношению к М путь, а Р — добавляющий по отношению к путь. Тогда

Доказательство. Пусть . Тогда N — паросочетание и . Поэтому содержит два не пересекающихся по вершинам добавляющих пути по отношению к М.

Поскольку то так как Р — кратчайший добавляющий путь. Поэтому . Тогда из тождества мы получаем . Предположим, что мы вычислили, начиная с паросочетания последовательность паросочетаний , где, кратчайший добавляющий по отношению к - путь. Тогда из леммы Следовательно, мы имеем следующее:

Лемма 15.6.

Теорема 15.4. Для всех таких i и j, что не пересекаются по вершинам.

Доказательство. Предположим, что пересекаются по вершинам. Тогда существуют такие k и что пересекаются по вершинам, а для любого не пересекается по вершинам с . Тогда -добавляющий путь по отношению к поэтому Но . Следовательно, . Таким образом, не имеют общих ребер. Но если имеют общую вершину v, то они имеют и общее ребро, которое инцидентно v и входит в Следовательно, не пересекаются по вершинам, и мы приходим к противоречию. Главный результат этого раздела формулируется в следующей теореме:

Теорема 15.5. Пусть s — мощность максимального паросочетания. Число различных целых чисел в последовательности меньше или равно

Доказательство. Пусть Тогда и по лемме 15.4

Таким образом, для каждого есть одно из положительных нечетных чисел, меньших или равных привносят не более различных целых чисел, а поэтому общее число целых чисел в последовательности меньше или равно Результаты, сформулированные в лемме 15.6 и теоремах 15.4 и 15.5, позволяют рассматривать вычисление последовательности как состоящее не более чем из таких фаз, что добавляющие пути, находимые на каждой фазе, имеют одинаковую длину и не пересекаются по вершинам. Так как все добавляющие пути на какой-либо фазе не пересекаются по вершинам, то они являются добавляющими путями по отношению к паросочетанию, с которого началась эта фаза. Это привело Хопкрофта и Карпа к предложению следующего альтернативного пути для описания порядка вычисления максимального паросочетания.

Шаг 0. Начать с нулевого паросочетания М, т. е.

Шаг 1. Пусть — длина кратчайшего добавляющего пути по отношению к М. Найти максимальное множество путей со следующими свойства

1) для каждого — добавляющий путь по отношению к М и

2) Q; не пересекаются по вершинам. HALT, если таких путей не существует. Шаг 2. Положить идти к шагу 1. Из предыдущего обсуждения ясно, что шаги 1 и 2 приведенного выше вычисления будут выполняться не более чем раз, т. е. раз. Далее сложность вычисления в значительной степени зависит от сложности реализации шага 1. Для графа общего вида реализация этого шага довольно сложна, так как требует порождения всех добавляющих путей по отношению к данному паросочетанию и последующего выбора из них максимального множества кратчайших путей, не пересекающихся по вершинам.

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

15.5.2. Алгоритм Хопкрофта и Карпа для нахождения максимального двудольного паросочетания

Пусть G — связный двудольный граф, множество вершин которого разбито на подмножества X и Y. Мы будем называть вершины из X верхними, а вершины из Y — нижними.

Способ выполнения шага 1, предложенный Хопкрофтом и Карпом и упомянутый ранее, состоит из двух стадий. Если паросочетание М не максимально, то на первой стадии выполнения шага 1 строится такой ориентированный граф G, что кратчайшие добавляющие пути по отношению к М взаимнооднозначно соответствуют ориентированным путям в графе G, которые начинаются в свободной нижней вершине, а заканчиваются в свободной верхней вершине. На второй стадии строится максимальное множество таких ориентированных путей в графе G с тем свойством, что они не пересекаются по вершинам. Эти пути дают требуемые кратчайшие добавляющие пути в графе G по отношению к М.

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

Пусть — множество свободных верхних вершин, для которых верно, что все ребра, инцидентные этим вершинам, не входят в паросочетание, т. е. ориентированы из нижних вершин в верхние.

Рассмотрим такое множество нижних вершин что существует ориентированное ребро из каждой из этих вершин по меньшей мере в одну верхнюю вершину из

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

множество свободных нижних вершин в множество ориентированных ребер, соединяющих Тогда требуемый граф G имеет множество вершин и множество ребер

Иначе (т. е. если не содержит свободных нижних вершин) пусть — множество ребер, связывающих — множество напарников нижних вершин из Пусть — множество соответствующих ребер, вошедших в паросочетание. Ясно, что — множество верхних вершин и ребра в направлены из

Предположим, что мы построили множество вершин и множества ребер Рассмотрим множество таких нижних вершин которые не встречались в что каждая из них смежна по меньшей мере с одной из верхних вершин множества

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

Иначе (если не содержит свободных нижних вершин) пусть — множество ребер, соединяющих и пусть — множество напарников нижних вершин в Пусть также множество соответствующих ребер, вошедших в паросочетание. Ясно, что процедура, описанная выше, закончится одним из двух следующих способов:

1. Для некоторого k множество содержит по крайней мере одну свободную нижнюю вершину. В этом случае мы останавливаем здесь процедуру и требуемый граф G имеет множество вершин и множество ребер

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

Таким образом, граф G обладает следующими свойствами:

1. Для нечетного i множество состоит из нижних вершин. В противном случае оно состоит из верхних вершин.

2. Каждое ребро графа G ориентировано из вершины множества в вершину множества для некоторого .

3. Граф G не имеет ориентированных циклов.

4. Кратчайший добавляющий путь в графе G по отношению к М взаимнооднозначно соответствует ориентированному пути в графе G, который начинается в свободной нижней и заканчивается в свободной верхней вершине.

Ясно, что сложность построения графа G составляет Из свойства 4 следует, что порождение максимального множества не пересекающихся по вершинам добавляющих путей в графе G по отношению к М эквивалентно порождению максимального множества не пересекающихся по вершинам ориентированных путей в графе G, которые начинаются в свободных нижних и заканчиваются в свободных верхних вершинах. Такие ориентированные пути в графе G могут быть порождены за шагов поиском в глубину в графе G, как мы увидим в алгоритме 15.6.

Представим алгоритм Хопкрофта и Карпа для максимального двудольного паросочетания. Не нарушая общности, предположим, что данный графсвязен. Алгоритм состоит из двух процедур: PROC-HOPKARP и PROC-AUGMENT.

PROC-HOPKARP — главная процедура. По данному паросочетанию М она проверяет, является ли М максимальным паросо-четанием. Если нет, то строит графв и вызывает PROC-AUGMENT. PROC-AUGMENT порождает максимальное множество не пересекающихся по вершинам ориентированных добавляющих путей в графе G и выполняет необходимые расширения. Добавляющие пути, построенные при каком-либо выполнении этой процедуры, соответствуют путям в отдельной фазе последовательности

В PROC-AUGMENT мы используем массив PATH, в котором запоминаются вершины пути по мере его порождения. Переменная POINT указывает на самый верхний элемент в массиве PATH.

Алгоритм 15.6. Максимальное двудольное паросочетание (Хопкрофт и Карп). PROC-HOPKARP.

H1. G - данный связный двудольный граф. Пусть -нулевое паросочетание, т. е. Положить

Н2. Построить из графа G ориентированный граф G, ориентируя каждое не вошедшее в паросочетание ребро (по отношению к ) графа G из нижней вершины в верхнюю и каждое вошедшее в паросочетание ребро (по отношению к ) из верхней вершины в нижнюю.

Н3. Пусть -множество свободных верхних вершин по отношению к Если не пусто, то идти к шагу Н4. Иначе HALT. (Паросочетание максимально.)

Н4. Построить последовательность подмножеств множества вершин V графа G и последовательность подмножеств множества таких ребер Е графа G, что

1)

2) для некоторого нижние вершины .

Н5. Если определено, то идти к шагу иначе HALT. (Не существует добавляющего пути по отношению к и, следовательно, максимальное паросочетание.)

Н6. Построить подграф графа G, где нижние (свободные нижние вершины).

Н7. Выполнить процедуру PROC-AUGMENT и идти к шагу PROC-AUGMENT.

А1. Положить POINT=0. (Содержание массива PATH очевидно.) Выбрать свободную нижнюю вершину у графа G, которая еще не помечена как «рассмотренная», и идти к шагу Если такой свободной нижней вершины не существует, то идти к шагу А8.

А2. Пометить у как «рассмотренную». Положить (у помещается сверху в массив PATH.)

А3. Выбрать ребро которое еще не помечено как «рассмотренное», и идти к шагу Если такого ребра не существует (мы не можем получить добавляющий путь, который включает вершину ), то выполнить следующие действия:

А4. Положить (POINT). (Удаляем сверху из массива PATH два элемента.) Идти к шагу А3.

А5. Пометить как «рассмотренное». Если уже помечена как «рассмотренная» уже встречалась в некотором кратчайшем добавляющем пути, либо такого пути, содержащего не существует), то идти к шагу АЗ. Иначе пометить как «рассмотренную» и положить помещается сверху в массив PATH).

А6. Если — свободная вершина по отношению к то идти к шагу Иначе положить у-напарник вершины и идти к шагу А2.

А7. Добавляющий путь Р по отношению к Мнайден. Вершинами Р являются вершины PATH (1), PATH (2), PATH (POINT). Положить — новое паросочетание после расширения.) Положить и идти к шагу А1.

А8. (Все кратчайшие не пересекающиеся по вершинам пути в графе G выделены и соответствующие расширения осуществлены.) Конец процедуры.

Можно показать, что сложность выполнения PROC-AUGMENT равна О Так как в любой фазе построения графа G выполнение PROC-AUGMENT производится только один раз и по теореме 15.5 существует фаз, то отсюда следует, что сложность алгоритма 15.6 равна

В качестве примера рассмотрим граф G, изображенный на рис. 15.13, а, где пунктирные линии обозначают ребра паросочетания М. В этом графе нижние вершины пронумерованы числами 1—12, а верхние вершины — числами

Вначале мы ориентируем ребра графа G так, что ребра, не вошедшие в паросочетание, ориентируются из нижних вершин в верхние, а ребра, вошедшие в паросочетание, ориентируются из верхних вершин в нижние. Получающаяся ориентация ребер изображена на рис. 15.13, а.

Множества получаемые в результате работы алгоритма, есть множества

Тогда Так как вершины 6 и 8 множества не являются свободными нижними вершинами, то они не входят в граф G. Граф G для паросочетания М изображен на рис. 15.13, б. Отметим, что существует только два добавляющих пути в графе G. Однако они не являются не пересекающимися по вершинам. Поэтому PROC-AUGMENT получит только один добавляющий путь для фазы, которая начинается с паросочетания М. Если ребро

полученный добавляющий путь, то после расширения мы получим новое паросочетание, в котором вновь введенными ребрами являются (-6,5) и (-9,9). Ребро (5, —9), входящее в паросочетание, удаляется из него.

Для дальнейшего изучения мы рекомендуем работу [15.37], в которой показано, как частный случай более общего результата, что максимальное паросочетание в двудольном графе может быть построено за шагов.

Авторы работы [15.38] разработали О (-алгоритм для максимального паросочетания в графе общего вида. Этот алгоритм использует метод, основанный на поисках в ширину и в глубину. При разработке этого алгоритма также использовались некоторые идеи, выдвинутые ранее [15.29, 15.36].

Рис. 15.13. (см. скан)

1
Оглавление
email@scask.ru