Совершенное паросочетание в кубическом графе — различия между версиями
Profick (обсуждение | вклад) м (→Реализация алгоритма Фринка) |
Profick (обсуждение | вклад) м (→Псевдокод алгоритма Фринка) |
||
Строка 61: | Строка 61: | ||
* <tex>M</tex> совершенное паросочетание <tex>G</tex>. | * <tex>M</tex> совершенное паросочетание <tex>G</tex>. | ||
* функция <tex>bridgeless</tex> сообщает, имеет ли граф мост. | * функция <tex>bridgeless</tex> сообщает, имеет ли граф мост. | ||
− | * функция <tex> | + | * функция <tex>alternatingCycle</tex> принимает три параметра: граф, совершенное паросочетание и ребро. Возвращает альтернативный цикл, включающий в себя данное ребро и обновляет совершенное паросочетание. |
− | * функции <tex>reductions</tex> и <tex> | + | * функции <tex>reductions</tex> и <tex>simpleReversion</tex> сокращают и восстанавливают граф соответственно. |
'''if''' <tex>|V| = 0</tex> '''then''' | '''if''' <tex>|V| = 0</tex> '''then''' | ||
Строка 74: | Строка 74: | ||
<tex>r = R[1]</tex> | <tex>r = R[1]</tex> | ||
'''end if''' | '''end if''' | ||
− | <tex>M \leftarrow | + | <tex>M \leftarrow frinkMatching(G[V - \{v, w\}, E \cup r])</tex> |
'''if''' <tex>|r \cap M| = 2 </tex> '''then''' | '''if''' <tex>|r \cap M| = 2 </tex> '''then''' | ||
− | <tex>C \leftarrow | + | <tex>C \leftarrow alternatingCycle(G, M, r[0])</tex> |
<tex>M \leftarrow M \oplus C</tex> | <tex>M \leftarrow M \oplus C</tex> | ||
'''end if''' | '''end if''' | ||
− | <tex>M \leftarrow (M - r) \cup | + | <tex>M \leftarrow (M - r) \cup simpleReversion(G, v, w, r, M)</tex> |
'''return''' <tex>M</tex> | '''return''' <tex>M</tex> | ||
'''end if''' | '''end if''' |
Версия 20:41, 28 января 2016
Содержание
Теорема Петерсона (Petersen)
Определение: |
Кубический граф (англ. Cubic graph) граф, в котором все вершины имеют степень три. Другими словами, кубический граф является | -регулярным.
Теорема (Петерсон): |
Кубический граф, у которого нет совершенного паросочетания, содержит как минимум моста. |
Следствие из данной теоремы: для любого двусвязного кубического графа существует совершенное паросочетание.
Теорема Фринка (Frink)
Теорема (Фринк): |
Пусть двусвязный кубический граф.
Возьмём ребро Как минимум одно из двух сокращений графа . Пусть вершины и смежены с вершиной , а вершины и смежны с вершиной (рисунок ). , состоящее из удаления вершин и пересоединения вершин рёбрами или (рисунок , рисунок ) сохранит двусвязность графа. |
Доказательство: |
Обозначим компоненты графа как , которые содержат вершины соответственно. Так как не имеет мостов (соответственно не является мостом) должно существовать ребро, соединяющее одну из компонент или , с одной из компонент или . Без потери общности предположим, что соединено с . Заметим, что рёбра так же не являются мостами, значит возможны три случая (с учётом изоморфизма) (рисунок ):
Во всех трёх случаях если цикле в (рисунок ). Так же, для любой пары вершин существует цикл в , содержащий данные вершины. Чтобы доказать, что двусвязен, нужно показать, что каждое ребро из лежит на некотором цикле в . Пусть цикл в содержит (такой цикл существует, так как двусвязен). Если не проходит через вершины тогда так же является циклом в , иначе построим цикл графа из следующим образом: расширить рёбрами (получим граф ), добавленные рёбра будут лежать на некотором
|
Алгоритм поиска совершенного паросочетания за (Frink's algorithm)
будем сокращать данный граф
вышеизложенным способом (на каждой итерации можем выбирать любое ребро) пока не удалим все вершины. Когда все вершины закончились, создадим пустое совершенное паросочетание и начнём обратный процесс для всех сокращений, то есть восстановление графа (начиная с последних удалённых вершин). Каждый такой шаг будет приводить к одному из четырёх базовых случаев, представленных в рисунке или к одному из специальных случаев из рисунка . Восстановление для всех специальных случаев, а так же для первых трёх базовых выполняется по строгому алгоритму, т.е. разрешим за . Единственный проблемный случай, когда оба ребра принадлежат совершенному паросочетанию. В этой ситуации необходимо найти альтернативный цикл, содержащий как минимум одно из этих рёбер и обновить паросочетание с этим циклом. Эти действия сводят четвёртый базовый случай к одному из первых трёх.
Псевдокод алгоритма Фринка
- двусвязный кубический граф,
- совершенное паросочетание .
- функция сообщает, имеет ли граф мост.
- функция принимает три параметра: граф, совершенное паросочетание и ребро. Возвращает альтернативный цикл, включающий в себя данное ребро и обновляет совершенное паросочетание.
- функции и сокращают и восстанавливают граф соответственно.
ifthen return else if then else end if if then end if return end if
Время работы алгоритма Фринка
Операция сокращения должна на каждом шаге проверять граф на наличие мостов
, кроме того, при возникновении четвёртого базового случая требуется найти альтернативный цикл за . В алгоритме операций сокращения и восстановления графа, причем каждая из этих операций требует времени. Таким образом, весь этот алгоритм исполняется за время .Ссылки
- Использование обхода в глубину для поиска цикла
- Использование обхода в глубину для поиска мостов
- Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях
Источники информации
- Лекториум — Дополнительные главы теории паросочетаний
- Wikipedia — Кубический граф
- Piotr Stanczyk — THEORY AND PRACTICE OF COMPUTING MAXIMUM MATCHINGS IN GRAPHS стр. 21-28.