Теорема Холла — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Теорема)
м (rollbackEdits.php mass rollback)
 
(не показаны 73 промежуточные версии 10 участников)
Строка 2: Строка 2:
 
==Определения==
 
==Определения==
  
Пусть <tex>G(V,E)</tex> - двудольный граф. <tex>L</tex> - множество вершин первой доли. <tex>R</tex> - множество вершин правой доли.
+
Пусть <tex>G(V,E)</tex> {{---}} [[Основные_определения_теории_графов#Двудольный_граф |двудольный граф]].<ref name="Generalizing"/> <tex>L</tex> {{---}} множество вершин левой доли. <tex>R</tex> {{---}} множество вершин правой доли.
 
{{Определение
 
{{Определение
 
|id=def1.  
 
|id=def1.  
 
|nеat=1
 
|nеat=1
|definition='''Полным(совершенным)''' паросочетанием называется паросочетание в которое входят все вершины.
+
|definition='''Полным (совершенным)''' паросочетанием ''(англ. perfect matching)'' называется паросочетание, в которое входят все вершины.
 
}}
 
}}
 
{{Определение
 
{{Определение
 
|id=def2.
 
|id=def2.
 
|nеat=1
 
|nеat=1
|definition=Пусть <tex>X \subset V </tex>. '''Множeство соседей''' <tex>X</tex> определим формулой:  <tex>N(X)= \{  y \in V: (x,y) \in E \}</tex>
+
|definition=Пусть <tex>X \subset V </tex>. '''Множeство соседей''' <tex>X</tex> ''(англ. neighborhood)'' определим формулой:  <tex>N(X)= \{  y \in V \mid (x,y) \in E , x \in X\}</tex>
 
}}
 
}}
  
Строка 17: Строка 17:
 
{{Теорема
 
{{Теорема
 
|id=th1.  
 
|id=th1.  
|author=Холл
+
|author=Холл <ref name="Marriage"/>
|statement=Полное паросочетание существует тогда и только тогда, когда для любого <tex>A \subset  L </tex> выполнено <tex>|A| \leq |N(A)|</tex>.
+
|statement=Полное паросочетание существует тогда и только тогда, когда для любого <tex>A \subset  L </tex> выполнено <tex>|A| \leqslant |N(A)|</tex>.
 
|proof=
 
|proof=
* Очевидно, что если существует полное паросочетание, то для любого <tex>A \subset  L </tex> выполнено <tex>|A| \leq |N(A)|</tex>. У любого подмножества вершин есть по крайней мере столько же "соседей"("соседи по парасочетанию").
+
<tex>\Rightarrow</tex> <br>
Пусть граф <tex>G'</tex> изначально имеет левую долю <tex>L'</tex>, которая содержит одну любую вершину из <tex>L</tex>, и правую <tex>R' = R</tex>.
+
Очевидно, что если существует полное паросочетание, то для любого <tex>A \subset  L </tex> выполнено <tex>|A| \leqslant |N(A)|</tex>. У любого подмножества вершин есть по крайней мере столько же ''соседей'' (''соседи по паросочетанию'').
*В обратную сторону докажем по индукции(будем добавлять какую-нибудь вершину <tex>x</tex> из <tex>L</tex> в <tex>G'</tex> и доказывать, что в <tex>G'</tex> есть паросочетание, насыщающее все вершины из <tex>L'</tex>). Таким образом, в конце получим что <tex>G'</tex> совпадает с <tex>G</tex>. Из этого будет следовать существование в <tex>G</tex> полного паросочетания.
+
 
#База: Одна вершина соединена хотя бы с одной вершиной из <tex>R'</tex>. Следовательно база верна.
+
<tex>\Leftarrow</tex> <br>
#Переход: Пусть после <tex>k</tex> добавлений в <tex>G'</tex> можно построить паросочетание <tex>P</tex>, насыщающее все вершины из <tex>L'</tex>. Докажем что после добавления вершины <tex>x</tex> в <tex>G'</tex> будет существовать паросочетание, насыщающее все вершины <tex>L'</tex>.Добавим <tex>x</tex> в <tex>G'</tex>. Рассмотрим множество вершин <tex>H</tex> — все вершины, достижимые из <tex>x</tex>, если можно ходить  из <tex>R'</tex> в <tex>L'</tex> только по ребрам из <tex>P</tex>, а из <tex>L'</tex> в <tex>R'</tex> по любым ребрам из <tex>G'</tex>. Тогда в <tex>H</tex> найдется вершина <tex>y</tex> из <tex>R'</tex>, не принадлежащая <tex>P</tex>, иначе, если рассмотреть вершины <tex>H_L</tex>(вершины из <tex>H</tex> принадлежащие <tex>L'</tex>), то для них не будет выполнено условие: <tex>|H_L| > |N(H_L)|</tex>. Тогда существует путь из <tex>x</tex> в <tex>y</tex>, который будет удлиняющим для паросочетания <tex>P</tex>(т.к из <tex>R'</tex> в <tex>L'</tex> мы проходили по ребрам паросочетания <tex>P</tex>). Увеличив паросочетание P вдоль этого пути получаем искомое паросочетание.
+
В обратную сторону докажем по индукции (будем добавлять в изначально пустое паросочетание <tex>P</tex> по одному ребру и доказывать, что мы можем это сделать, если <tex>P</tex> не полное). Таким образом, в конце получим что <tex>P</tex> — полное паросочетание.
Следовательно предположение индукции верно.  
+
 +
<u>'''''База индукции'''''</u>
 +
 
 +
Вершина из <tex>L</tex> соединена хотя бы с одной вершиной из <tex>R</tex>. Следовательно база верна.
 +
 
 +
<u>'''''Индукционный переход'''''</u>
 +
 
 +
Пусть после <tex>k<n</tex> шагов построено паросочетание <tex>P</tex>. Докажем, что в <tex>P</tex> можно добавить вершину <tex>x</tex> из <tex>L</tex>, не насыщенную паросочетанием <tex>P</tex>. Рассмотрим множество вершин <tex>H</tex> — все вершины, достижимые из <tex>x</tex>, если можно ходить  из <tex>R</tex> в <tex>L</tex> только по ребрам из <tex>P</tex>, а из <tex>L</tex> в <tex>R</tex> по любым ребрам из <tex>G</tex>. Тогда в <tex>H</tex> найдется вершина <tex>y</tex> из <tex>R</tex>, не насыщенная паросочетанием <tex>P</tex>, иначе, если рассмотреть вершины <tex>H_L</tex> (вершины из <tex>H</tex> принадлежащие <tex>L</tex>), то для них не будет выполнено условие: <tex>|H_L| \leqslant |N(H_L)|</tex>. Тогда существует путь из <tex>x</tex> в <tex>y</tex>, который будет удлиняющим для паросочетания <tex>P</tex> (т.к из <tex>R</tex> в <tex>L</tex> мы проходили по ребрам паросочетания <tex>P</tex>). Увеличив паросочетание <tex>P</tex> вдоль этого пути, получаем искомое паросочетание. Следовательно предположение индукции верно.  
 +
 
 
}}
 
}}
 +
 +
==Пояснения к доказательству==
 +
[[Файл:aba.gif|600px|thumb|right|Пример]]
 +
 +
Пусть было построено паросочетание размером <tex>3</tex> (синие ребра).
 +
 +
Добавляем вершину с номером <tex>4</tex>.
 +
 +
Во множество <tex>H</tex> вошли вершины с номерами <tex>1</tex>, <tex>3</tex>, <tex>4</tex>, <tex>5</tex>, <tex>7</tex>, <tex>8</tex>.
 +
 +
Ненасыщенная вершина из правой доли всегда найдется (в примере вершина с номером <tex>8</tex>), т.к иначе получаем противоречие:
 +
# В <tex>H_R</tex> входят только насыщенные вершины.
 +
# <tex>N(H_L) = H_R</tex>
 +
# В <tex>H_L</tex> по крайней мере <tex>H_R+1</tex> вершин (''соседи'' по паросочетанию для каждой вершины из <tex>H_R</tex> и ещё одна вершина, которую пытаемся добавить).
 +
Цепь <tex>{4, 7, 3, 8}</tex> является удлиняющей для текущего паросочетания.
 +
 +
Увеличив текущее парасочетание вдоль этой цепи, мы насытим вершину с номером <tex>4</tex>.
 +
 +
==См. также==
 +
* [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях]]
 +
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]
 +
* [[Связь вершинного покрытия и независимого множества]]
  
 
==Примечания==
 
==Примечания==
Иногда теорему называют теоремой о свадьбах.
+
<references>
 
+
<ref name="Generalizing">Также теорема обобщается на граф, имеющий произвольное множество долей.</ref>
Также теорема обобщается на граф, имеющий произвольное множество долей.
+
<ref name="Marriage">Иногда теорему называют теоремой о свадьбах.</ref>
 +
</references>
  
==Ссылки==
+
==Источники информации==
*[http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A5%D0%BE%D0%BB%D0%BB%D0%B0 Теорема Холла — Википедия]
+
* [http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A5%D0%BE%D0%BB%D0%BB%D0%B0 Википедия {{---}} Теорема Холла]
 +
* [https://en.wikipedia.org/wiki/Hall%27s_marriage_theorem Wikipedia {{---}} Hall's marriage theorem]
  
 
[[Категория: Алгоритмы и структуры данных]]
 
[[Категория: Алгоритмы и структуры данных]]
 
[[Категория: Задача о паросочетании ]]
 
[[Категория: Задача о паросочетании ]]

Текущая версия на 19:17, 4 сентября 2022

Определения

Пусть [math]G(V,E)[/math]двудольный граф.[1] [math]L[/math] — множество вершин левой доли. [math]R[/math] — множество вершин правой доли.

Определение:
Полным (совершенным) паросочетанием (англ. perfect matching) называется паросочетание, в которое входят все вершины.


Определение:
Пусть [math]X \subset V [/math]. Множeство соседей [math]X[/math] (англ. neighborhood) определим формулой: [math]N(X)= \{ y \in V \mid (x,y) \in E , x \in X\}[/math]


Теорема

Теорема (Холл [2]):
Полное паросочетание существует тогда и только тогда, когда для любого [math]A \subset L [/math] выполнено [math]|A| \leqslant |N(A)|[/math].
Доказательство:
[math]\triangleright[/math]

[math]\Rightarrow[/math]
Очевидно, что если существует полное паросочетание, то для любого [math]A \subset L [/math] выполнено [math]|A| \leqslant |N(A)|[/math]. У любого подмножества вершин есть по крайней мере столько же соседей (соседи по паросочетанию).

[math]\Leftarrow[/math]
В обратную сторону докажем по индукции (будем добавлять в изначально пустое паросочетание [math]P[/math] по одному ребру и доказывать, что мы можем это сделать, если [math]P[/math] не полное). Таким образом, в конце получим что [math]P[/math] — полное паросочетание.

База индукции

Вершина из [math]L[/math] соединена хотя бы с одной вершиной из [math]R[/math]. Следовательно база верна.

Индукционный переход

Пусть после [math]k\lt n[/math] шагов построено паросочетание [math]P[/math]. Докажем, что в [math]P[/math] можно добавить вершину [math]x[/math] из [math]L[/math], не насыщенную паросочетанием [math]P[/math]. Рассмотрим множество вершин [math]H[/math] — все вершины, достижимые из [math]x[/math], если можно ходить из [math]R[/math] в [math]L[/math] только по ребрам из [math]P[/math], а из [math]L[/math] в [math]R[/math] по любым ребрам из [math]G[/math]. Тогда в [math]H[/math] найдется вершина [math]y[/math] из [math]R[/math], не насыщенная паросочетанием [math]P[/math], иначе, если рассмотреть вершины [math]H_L[/math] (вершины из [math]H[/math] принадлежащие [math]L[/math]), то для них не будет выполнено условие: [math]|H_L| \leqslant |N(H_L)|[/math]. Тогда существует путь из [math]x[/math] в [math]y[/math], который будет удлиняющим для паросочетания [math]P[/math] (т.к из [math]R[/math] в [math]L[/math] мы проходили по ребрам паросочетания [math]P[/math]). Увеличив паросочетание [math]P[/math] вдоль этого пути, получаем искомое паросочетание. Следовательно предположение индукции верно.
[math]\triangleleft[/math]

Пояснения к доказательству

Пример

Пусть было построено паросочетание размером [math]3[/math] (синие ребра).

Добавляем вершину с номером [math]4[/math].

Во множество [math]H[/math] вошли вершины с номерами [math]1[/math], [math]3[/math], [math]4[/math], [math]5[/math], [math]7[/math], [math]8[/math].

Ненасыщенная вершина из правой доли всегда найдется (в примере вершина с номером [math]8[/math]), т.к иначе получаем противоречие:

  1. В [math]H_R[/math] входят только насыщенные вершины.
  2. [math]N(H_L) = H_R[/math]
  3. В [math]H_L[/math] по крайней мере [math]H_R+1[/math] вершин (соседи по паросочетанию для каждой вершины из [math]H_R[/math] и ещё одна вершина, которую пытаемся добавить).

Цепь [math]{4, 7, 3, 8}[/math] является удлиняющей для текущего паросочетания.

Увеличив текущее парасочетание вдоль этой цепи, мы насытим вершину с номером [math]4[/math].

См. также

Примечания

  1. Также теорема обобщается на граф, имеющий произвольное множество долей.
  2. Иногда теорему называют теоремой о свадьбах.

Источники информации