Совершенное паросочетание в кубическом графе — различия между версиями
Profick (обсуждение | вклад) |
Profick (обсуждение | вклад) |
||
Строка 68: | Строка 68: | ||
'''end if''' | '''end if''' | ||
<tex>M \leftarrow frink\_matching(G[V - \{v, w\}, E \cup r])</tex> | <tex>M \leftarrow frink\_matching(G[V - \{v, w\}, E \cup r])</tex> | ||
+ | '''if''' <tex>|r \cap M| = 2 </tex> '''then''' | ||
+ | <tex>C \leftarrow alternating\_cycle(G, M, r[0])</tex> | ||
+ | <tex>M \leftarrow M \oplus C</tex> | ||
+ | '''end if''' | ||
+ | <tex>M \leftarrow (M - r) \cup simple\_reversion(G, v, w, r, M)</tex> | ||
+ | '''return''' <tex>M</tex> | ||
+ | '''end if''' |
Версия 18:07, 28 января 2016
Теорема (Петерсон): |
Кубический граф, у которого нет совершенного паросочетания, содержит как минимум моста. |
Следствие теоремы Петерсона
Для любого двусвязного кубического графа существует совершенное паросочетание.
Теорема (Фринк): |
Пусть — двусвязный кубический граф.
Возьмём ребро Как минимум одно из двух сокращений графа . Пусть вершины и смежены с вершиной , а вершины и смежны с вершиной (рисунок ). , состоящее из удаления вершин и пересоединения вершин рёбрами или (рисунок ) сохранит двусвязность графа. |
Доказательство: |
Обозначим компоненты графа как , которые содержат вершины соответственно. Так как не имеет мостов (соответственно не является мостом) должно существовать ребро, соединяющее одну из компонент или , с одной из компонент или . Без потери общности предположим, что соединено с . Заметим, что рёбра так же не являются мостами, значит возможны три случая (с учётом изоморфизма) (рисунок ):
Во всех трёх случаях если расширить рёбрами (получим граф ), добавленные рёбра будут лежать на некотором цикле в (рисунок ). Так же, для любой пары вершин существует цикл в , содержащий данные вершины. Чтобы доказать, что двусвязен, нужно показать, что каждое ребро из лежит на некотором цикле в . Пусть цикл в содержит (такой цикл существует, так как двусвязен). Если не проходит через вершины тогда так же является циклом в , иначе построим цикл графа из следующим образом:
|
Алгоритм поиска совершенного паросочетания за O(n^2) (Frink's algorithm)
- будем сокращать данный граф вышеизложенным способом (на каждой итерации можем выбирать любое ребро) пока не удалим все вершины,
- когда все вершины закончились, создадим пустое совершенное паросочетание и начнём обратный процесс для всех сокращений (начиная с последних удалённых вершин). Каждый такой шаг будет приводить к одному из четырёх базовых случаев, представленных в рисунке или к одному из специальных случаев из рисунка . Обратный процесс для всех специальных случаев, а так же для первых трёх базовых выполняется по строгому алгоритму, т.е. разрешим за . Единственный проблемный случай, когда оба ребра принадлежат совершенному паросочетанию. В этой ситуации необходимо найти альтернативный цикл, содержащий как минимум одно из этих рёбер и обновить паросочетание с этим циклом. Эти действия сводят четвёртый базовый случай к одному из первых трёх.
Реализация
- двусвязный кубический граф,
- совершенное паросочетание .
ifthen return else if then else end if if then end if return end if