Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
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 |
Оглавление
|