Теорема Кёнига (комбинаторика)

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

В теории графов теорема Кёнига, доказанная Денешем Кёнигом в 1931, утверждает эквивалентность задач нахождения наибольшего паросочетания и наименьшего вершинного покрытия в двудольных графах. Это же было независимо открыто, в том же 1931, венгерским математиком Йенё Эгервари[англ.] в несколько более общем виде для случая взвешенных графов.

Кёниг опубликовал в 1916 доказательство, что любой регулярный двудольный граф имеет совершенное паросочетание,[1] и, обобщённо, что хроматический индекс любого двудольного графа (то есть наименьшее число паросочетаний, на которые можно разложить все рёбра графа) равен максимальной степени его вершин[2]. Последнее утверждение известно как теорема Кёнига о рёберной раскраске.[3] Бонди и Мёрти (Bondy, Murty, 1976) приписывают саму теорему более поздней работе Кёнига (1931). Согласно Бигу (Bigg), Кёниг приписывает идею изучения паросочетаний в двудольных графах своему отцу, математику Юлиусу Кёнигу[англ.].

Определения

Граф называется двудольным, если его вершины можно разбить на два множества так, что у каждого ребра конечные вершины принадлежат разным множествам.

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

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

Утверждение теоремы

В любом двудольном графе число рёбер в наибольшем паросочетании равно числу вершин в наименьшем вершинном покрытии.

Пример

Двудольный граф на рисунке вверху имеет по 7 в каждой из долей. Паросочетание с 6 рёбрами выделено синим цветом, а вершинное покрытие выделено красным. Это покрытие является наименьшим по размеру, поскольку любая вершина в покрытии должна включать по меньшей мере одну конечную вершину ребра паросочетания. Таким же образом, нет паросочетания большего размера, поскольку любое ребро паросочетания должно содержать по меньшей мере одну конечную вершину из вершинного покрытия, так что это паросочетание является наибольшим. Теорема Кёнига как раз и утверждает равенство размеров паросочетания и покрытия (в данном примере оба числа равны шести).

Доказательство [источник не указан 1659 дней]

Разделение вершин на посещённые и не посещённые для доказательства теоремы Кёнига.

Пусть задан двудольный граф , а — наибольшее паросочетание в .

Сначала рассмотрим случай, когда паросочетание насыщает все вершины доли , то есть размер паросочетания равен . Очевидно, что вся доля является вершинным покрытием в графе , следовательно, она является и наименьшим вершинным покрытием, и в этом случае утверждение теоремы выполняется.

Иначе возьмём все вершины доли , не насыщенные паросочетанием , и запустим из них обход в ширину по следующему правилу:

  1. Слева направо переходим только по рёбрам, не входящим в (будем называть их чёрными).
  2. Справа налево переходим только по рёбрам, входящим в (будем называть их голубыми).

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

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

Докажем, что между множествами и нет также и голубых рёбер. От противного, пусть такое ребро есть. Вершина не могла являться стартовой для обхода в ширину, поскольку она насыщена паросочетанием . Следовательно, обход в ширину пришёл в из какой-то вершины по голубому ребру, что означает, что вершине инцидентны два голубых ребра и . Но это невозможно, поскольку голубые рёбра образуют паросочетание.

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

Следствие из теоремы Кёнига

Пусть и — соответственно, наибольшее паросочетание и наименьшее вершинное покрытие в двудольном графе . Тогда любое ребро из инцидентно в точности одной вершине из . И наоборот, любой вершине из инцидентно в точности одно ребро из . Другими словами, отношение инцидентности задаёт биекцию между множествами и .

Заметим, что если бы граф не являлся двудольным, то некоторым рёбрам могли бы быть инцидентны сразу две вершины из , а некоторые вершины из могли бы не иметь инцидентных им рёбер из .

Алгоритмы построения наименьшего вершинного покрытия в двудольном графе [источник не указан 1659 дней]

Алгоритм 1

Описанный выше обход в ширину из доказательства теоремы строит наименьшее вершинное покрытие по заданному наибольшему паросочетанию.

Реализация алгоритма на C++:

Предполагаем, что граф содержит x_count вершин в левой доле, y_count вершин в правой доле, а его рёбра заданы списками смежности x_lists (x_lists[x] содержит список вершин правой доли, смежных с вершиной x). Паросочетание задано массивами x_matching и y_matching, хранящими левого и правого соседа каждой вершины; если вершина не насыщена , то в соответствующей ячейке записано число -1. Массивы x_label и y_label обозначают, были ли посещены соответствующие вершины во время обхода в ширину. Наконец, в массивы x_cover и y_cover записывается найденное покрытие: x_cover[x_cover[x] == true] x_cover[x] == true (или, соответственно, y_cover[y] == true), если вершина x (y) входит в наименьшее вершинное покрытие.

  for (int x = 0; x < x_count; x++)
     x_label[x] = false;

  for (int y = 0; y < y_count; y++)
     y_label[y] = false;

  queue<int> x_queue;
  for (int x = 0; x < x_count; x++)
     if (x_matching[x] == -1)
     {
        x_queue.push(x);
        x_label[x] = true;
     }

  while (!x_queue.empty())
  {
     const int x = x_queue.front();
     x_queue.pop();

     for (int y : x_lists[x])
        if (!y_label[y])
        {
           y_label[y] = true;
           int new_x = y_matching[y];
           x_label[new_x] = true;
           x_queue.push(new_x);
        }
  }

  for (int x = 0; x < x_count; x++)
     x_cover[x] = !x_label[x];

  for (int y = 0; y < y_count; y++)
     y_cover[y] = y_label[y];

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

Алгоритм 2

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

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

Нужно показать, что на каждой итерации алгоритма найдётся нужная вершина . Для этого мы докажем, что во время работы алгоритма сохраняются следующие инварианты:

  1. покрывает все рёбра паросочетания , причём .
  2. Если — некоторое минимальное вершинное покрытие, а и — его, соответственно, левая и правая доли, то , а .

В начале работы алгоритма оба инварианта очевидно выполняются. Далее, рассуждая по индукции, рассмотрим, что происходит во время каждой итерации алгоритма, предполагая, что к её началу оба инварианта выполнялись.

Из того, что — вершинное покрытие, следует, что покрывает и ребро , то есть или . Первое невозможно, т.к. по предположению индукции (второй инвариант), а . Следовательно, . Значит, , как вершина из минимального вершинного покрытия, инцидентна некоторому ребру наибольшего паросочетания (см. следствие из теоремы Кёнига) — обозначим это ребро . По предположению индукции, множество покрывает ребро (первый инвариант). Но , следовательно, .

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

Далее, из следует , поскольку ребро паросочетания не может быть инцидентно сразу двум вершинам из наименьшего вершинного покрытия. Значит, убрав из вершину и добавив в вершину , мы не нарушим инвариант , .

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

Теперь оценим количество итераций работы алгоритма. На каждой итерации размер множества уменьшается на единицу, а когда совпадёт с , алгоритм завершит работу. Следовательно, всего будет выполнено не более итераций. Алгоритм может завершить работу и раньше, если в графе есть вершинное покрытие с размером левой доли более . На самом деле, мы доказали, что алгоритм найдёт минимальное вершинное покрытие с максимально возможным размером левой доли (поскольку, доказывая, что , никак не ограничивали выбор вершинного покрытия ).

Реализация алгоритма на C++:

Здесь используются те же обозначения, что и в реализации первого алгоритма.

  for (int x = 0; x < x_count; x++)
     x_cover[x] = x_matching[x] != -1;

  for (int y = 0; y < y_count; y++)
     y_cover[y] = false;

  bool ind = true;
  while (ind)
  {
     ind = false;
     for (int x = 0; x < x_count; x++)
        for (int y : x_lists[x])
           if (!x_cover[x] && !y_cover[y])
           {
              x_cover[y_matching[y]] = false;
              y_cover[y] = true;
              ind = true;
           }
  }

Данная реализация имеет сложность .

Связь с совершенными графами

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

Граф совершенен тогда и только тогда, когда его дополнение совершенно (Lovász 1972), и теорему Кёнига можно считать эквивалентом утверждения, что дополнение двудольного графа совершенно. Любые раскраски дополнения двудольного графа имеют размер максимум 2, а классы размера 2 образуют паросочетания. Клики в дополнении графа G — это независимое множество в G, и, как мы уже писали выше, независимое множество в двудольном графе G — это дополнение вершинного покрытия G. Таким образом, любое паросочетание M в двудольном графе G с n вершинами соответствует раскраске дополнения G с n-|M| цветами, что, ввиду совершенства дополнения двудольных графов, соответствует независимому множеству в G с n-|M| вершинами, что соответствует вершинному покрытию G |M| вершинами. Следовательно, теорема Кёнига доказывает совершенство дополнений двудольных графов, то есть результат, выраженный в более явной форме у Галаи (Gallai, 1958).

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

Поскольку рёберные графы двудольных графов совершенны, дополнения рёберных графов двудольных графов тоже совершенны. Клика в дополнении рёберного графа для G — это просто паросочетание G. А раскраска дополнения рёберного графа для G, в случае, если G является двудольным, — это разбиение рёбер графа G на подмножества рёбер, имеющих общие вершины. Конечные вершины, являющиеся общими в этих подмножествах, образуют вершинное покрытие графа G. Таким образом, сама теорема Кёнига может быть также интерпретирована как утверждение, что дополнение рёберных графов двудольных графов совершенно.

Дополнения

  • Для графов, не являющихся двудольными, ситуация с задачами о наибольшем паросочетании и наименьшем вершинном покрытии совсем другая — наибольшее паросочетание можно найти за полиномиальное время для любого графа, в то время как поиск наименьшего вершинного покрытия является NP-полной задачей. Дополнение вершинного покрытия для любого графа — это независимое множество, и поиск наибольшего независимого множества — это ещё одна NP-полная задача.
  • Теорема Кёнига эквивалентна массе других минимаксных теорем в теории графов и комбинаторике, таких как теорема Холла о свадьбах и теорема Дилуорса. Поскольку паросочетание в двудольных графах является частным случаем потока в сети, теорема Кёнига также вытекает из теоремы Форда — Фалкерсона.
  • В русскоязычном интернете и научной литературе распространена следующая формулировка теоремы[4]: если прямоугольная матрица составлена из нулей и единиц, то минимальное число линий, содержащих все единицы, равно максимальному числу единиц, которые могут быть выбраны так, чтобы никакие две из них не лежали на одной и той же линии (термин «линия» обозначает либо строку, либо столбец в матрице).[5]
  • Вопреки эквивалентности двух задач с точки зрения точного решения, они совершенно не эквивалентны для аппроксимационных алгоритмов. Задача о наибольшем паросочетании для двудольных графов может быть аппроксимирована с произвольной точностью за постоянное время с помощью распределённых алгоритмов[англ.], в противоположность задаче о наименьшем вершинном покрытии, требующей как минимум логарифмического времени.[6]

Замечания

  1. На плакате, выставленном в 1998 на Международном конгрессе математиков в Берлине, а затем на Международной конференции по теории графов Bled'07, Геральд Гроп (Harald Gropp) указал на то, что тот же самый результат уже появлялся на языке конфигураций в 1894 в тезисах Эрнста Штайница.
  2. Biggs, 1976.
  3. Lovász, 1986, Theorem 1.4.17, с. 37.
  4. Рыбников, 1972, с. 100.
  5. Вопросы кибернетики. Тр. Семинара по комбинаторной математике. — М., 1973. — С. 185—99..
  6. Göös, 2012.

Ссылки

  • Biggs, N. L.; Lloyd, E. K.; Wilson, R. J. Graph Theory 1736–1936. — Oxford University Press, 1976. — С. 203–207. — ISBN 0-19-853916-9.
  • J. A. Bondy, U. S. R. Murty. Graph Theory with Applications. — North Holland, 1976. — С. 74. — ISBN 0-444-19451-7.
  • Gallai, Tibor. Maximum-minimum Sätze über Graphen // Acta Math. Acad. Sci. Hungar.. — 1958. — Т. 9, вып. 3-4. — С. 395–434. — doi:10.1007/BF02020271.
  • Mika Göös, Jukka Suomela. 26th International Symposium on Distributed Computing (DISC), Salvador, Brazil, October 2012. — 2012.
  • Kőnig, Dénes. Gráfok és alkalmazásuk a determinánsok és a halmazok elméletére // Matematikai és Természettudományi Értesítő. — 1916. — Т. 34. — С. 104–119.
  • Kőnig, Dénes. Gráfok és mátrixok // Matematikai és Fizikai Lapok. — 1931. — Т. 38. — С. 116–119.
  • László Lovász, M. D. Plummer. Matching Theory. — North-Holland, 1986. — ISBN 0-444-87916-1.

Литература