Задача присваивания: различия между версиями
Irina (обсуждение | вклад) |
Irina (обсуждение | вклад) |
||
Строка 30: | Строка 30: | ||
Вышеприведенная теорема служит основой алгоритма нахождения паросочетания с максимальным весом в полном двудольном графе. Начав с допустимой разметки, вычислим подграф равенства и затем найдем максимальное паросочетание в этом подграфе (на этом этапе веса ребер не учитываются). Если найденное паросочетание является совершенным, процесс на этом завершается. В противном случае к подграфу равенства добавляются ребра посредством пересмотра меток вершин. После добавления ребер к подграфу равенства либо увеличивается размер паросочетания (был найден дополняющий путь), либо продолжает расти венгерское дерево.1 В первом случае этот этап процесса завершается и начинается новый (поскольку размер паросочетания вырос). Во втором случае венгерское дерево растет за счет добавления к нему новых вершин, что, очевидно, не может произойти более n раз. | Вышеприведенная теорема служит основой алгоритма нахождения паросочетания с максимальным весом в полном двудольном графе. Начав с допустимой разметки, вычислим подграф равенства и затем найдем максимальное паросочетание в этом подграфе (на этом этапе веса ребер не учитываются). Если найденное паросочетание является совершенным, процесс на этом завершается. В противном случае к подграфу равенства добавляются ребра посредством пересмотра меток вершин. После добавления ребер к подграфу равенства либо увеличивается размер паросочетания (был найден дополняющий путь), либо продолжает расти венгерское дерево.1 В первом случае этот этап процесса завершается и начинается новый (поскольку размер паросочетания вырос). Во втором случае венгерское дерево растет за счет добавления к нему новых вершин, что, очевидно, не может произойти более n раз. | ||
1 Эта структура включает исследованные ребра при поиске базисного возможного решения одновременно из всех свободных вершин в S. Когда в T найдена вершина, сопоставленная какой-либо вершине из S, нужно исследовать только соответствующее ребро; однако в S исследуются все ребра, инцидентные этой вершине. | |||
Строка 39: | Строка 42: | ||
T =YnT : | T =YnT : | ||
\S\>\T\. | \S\>\T\. | ||
Между S и T не имеется ребер, поскольку в противном случае не было бы возможности полностью вырастить венгерские деревья. Поскольку венгерские деревья выращиваются в G^, альтернативные вершины в поиске помещаются в S и T. Для обновления меток следует взять метки из S и начать равномерно уменьшать их (скажем, на значение A), в то же время увеличивая метки в T на то же значение A. Этот подход гарантирует, что ребра, ведущие из S в T, не исчезнут из подграфа равенства (рис. 1). | |||
Поскольку метки в S уменьшаются, ребра (в графе G), ведущие из S в T, потенциально могут попасть в подграф равенства Gi. По мере увеличения значения A в какой-то момент ребро окажется в подграфе равенства. В этот момент процесс следует остановить и обновить венгерское дерево. Если вершина из T, добавленная к T, сопоставлена с вершиной из S, обе эти вершины перемещаются в S и T, что увеличивает размер венгерского дерева. Если вершина из T свободна, то дополняющий путь найден и данный этап завершен. Этап состоит из таких шагов, выполненных между приращениями размера паросочетания. Поскольку в G всего n вершин, у алгоритма будет не более n этапов, поскольку на каждом этапе размер паросочетания увеличивается на 1. В рамках каждого этапа размер венгерского дерева увеличивается не более n раз. Очевидно, что за время O(n2) можно обнаружить, какое ребро, ведущее из S в T, первым войдет в подграф равенства (для этого нужно просто просмотреть все ребра). Общее время выполнения в таком случае составит O(n4). Теперь покажем, как реализовать это подход за время O(n3). | |||
Показаны только ребра в Gg | |||
Задача присваивания, рис. 1 | |||
Множества S и T, поддерживаемые алгоритмом | |||
Более эффективная реализация |
Версия от 00:41, 4 ноября 2016
Ключевые слова и синонимы
Паросочетание на взвешенных двудольных графах
Постановка задачи
Пусть дан полный двудольный граф G = (X, F, Ix, Y) с присвоенным каждому ребру (x, y) весом w(x, y). Паросочетание M представляет собой подмножество ребер, такое, что никакие два ребра в M не имеют общей вершины. Паросочетание является совершенным, если в него входят все вершины. Предположим, что |X| = |Y| = n. Задача поиска паросочетания на взвешенных двудольных графах заключается в нахождении паросочетания с максимальным общим весом, где w(M) = Pe2M w(e). Поскольку граф G является полным и двудольным, у него имеется совершенное паросочетание. Алгоритм для решения данной задачи предложили Кун [4] и Манкрес [6]. Будем предполагать, что всех веса ребер неотрицательны.
Основные результаты
Определим допустимую разметку вершин £ как отображение множества вершин G на множество вещественных чисел, где £(x) + £(y) > w(x;y):
Назовем l(x) меткой вершины x. Допустимую разметку вершин легко вычислить следующим образом: 8y 2 Y l(y) = 0 and 8x 2 X £(x) = maxw(x; y): y2Y
Определим подграф равенства, G^, как остовный подграф G, содержащий все вершины G и только те ребра (x, y), веса которых удовлетворяют условию w(x, y) =
Связь между подграфами равенства и паросочетаниями с максимальным весом задается следующей теоремой.
Теорема 1. Если подграф равенства Gi содержит совершенное паросочетание M*, то M* является в G паросочетанием с максимальным весом.
Заметим, что сумма меток является верхней границей веса паросочетания с максимальным весом. Алгоритм последовательно находит паросочетание и допустимую разметку, такие, что вес паросочетания оказывается равен сумме всех меток.
Высокоуровневое описание
Вышеприведенная теорема служит основой алгоритма нахождения паросочетания с максимальным весом в полном двудольном графе. Начав с допустимой разметки, вычислим подграф равенства и затем найдем максимальное паросочетание в этом подграфе (на этом этапе веса ребер не учитываются). Если найденное паросочетание является совершенным, процесс на этом завершается. В противном случае к подграфу равенства добавляются ребра посредством пересмотра меток вершин. После добавления ребер к подграфу равенства либо увеличивается размер паросочетания (был найден дополняющий путь), либо продолжает расти венгерское дерево.1 В первом случае этот этап процесса завершается и начинается новый (поскольку размер паросочетания вырос). Во втором случае венгерское дерево растет за счет добавления к нему новых вершин, что, очевидно, не может произойти более n раз.
1 Эта структура включает исследованные ребра при поиске базисного возможного решения одновременно из всех свободных вершин в S. Когда в T найдена вершина, сопоставленная какой-либо вершине из S, нужно исследовать только соответствующее ребро; однако в S исследуются все ребра, инцидентные этой вершине.
Пусть S – дерево свободных вершин в X. Вырастим венгерские деревья из каждой вершины S. Пусть T – вершины из Y, встретившиеся в поиске дополняющего пути из вершин в S. Добавим все вершины из X, встретившиеся в поиске, в S.
Стоит отметить свойство данного алгоритма:
~s = XnS:
T =YnT :
\S\>\T\.
Между S и T не имеется ребер, поскольку в противном случае не было бы возможности полностью вырастить венгерские деревья. Поскольку венгерские деревья выращиваются в G^, альтернативные вершины в поиске помещаются в S и T. Для обновления меток следует взять метки из S и начать равномерно уменьшать их (скажем, на значение A), в то же время увеличивая метки в T на то же значение A. Этот подход гарантирует, что ребра, ведущие из S в T, не исчезнут из подграфа равенства (рис. 1).
Поскольку метки в S уменьшаются, ребра (в графе G), ведущие из S в T, потенциально могут попасть в подграф равенства Gi. По мере увеличения значения A в какой-то момент ребро окажется в подграфе равенства. В этот момент процесс следует остановить и обновить венгерское дерево. Если вершина из T, добавленная к T, сопоставлена с вершиной из S, обе эти вершины перемещаются в S и T, что увеличивает размер венгерского дерева. Если вершина из T свободна, то дополняющий путь найден и данный этап завершен. Этап состоит из таких шагов, выполненных между приращениями размера паросочетания. Поскольку в G всего n вершин, у алгоритма будет не более n этапов, поскольку на каждом этапе размер паросочетания увеличивается на 1. В рамках каждого этапа размер венгерского дерева увеличивается не более n раз. Очевидно, что за время O(n2) можно обнаружить, какое ребро, ведущее из S в T, первым войдет в подграф равенства (для этого нужно просто просмотреть все ребра). Общее время выполнения в таком случае составит O(n4). Теперь покажем, как реализовать это подход за время O(n3).
Показаны только ребра в Gg
Задача присваивания, рис. 1
Множества S и T, поддерживаемые алгоритмом
Более эффективная реализация