<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vsklamm</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vsklamm"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Vsklamm"/>
		<updated>2026-08-04T13:36:27Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68176</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68176"/>
				<updated>2019-01-06T12:03:10Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
'''Псевдокод'''&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Время работы'''&lt;br /&gt;
&lt;br /&gt;
Это подразумевает, что максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt; мы можем найти за полиномиальное время (жадно наращивать независимое множество в &amp;lt;tex&amp;gt;M = M_1 \cup \ldots \cup M_k&amp;lt;/tex&amp;gt;). Cunningham&amp;lt;ref&amp;gt;Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, стр.732&amp;lt;/ref&amp;gt; разработал алгоритм, которым за &amp;lt;tex&amp;gt;O((n^{(3/2)} + k)mQ + n^{(1/2)}km)&amp;lt;/tex&amp;gt; можно найти максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; максимальный размер множества в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; размер подмножества и &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; время, необходимое, чтобы определить принадлежит ли множество &amp;lt;tex&amp;gt; \mathcal{I}_j&amp;lt;/tex&amp;gt; для каждого &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Более детальное объяснение алгоритма (но не время работы) можно найти у C. Greene и T.L. Magnanti&amp;lt;ref&amp;gt;C. Greene, T.L. Magnanti, Some abstract pivot algorithms, SIAM Journal on Applied Mathematics, p.530-539&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, {{---}} Springer, 2004, {{---}} стр.732&lt;br /&gt;
&lt;br /&gt;
[http://booksc.org/book/18618751/0b4420 C. Greene, T.L. Magnanti, Some abstract pivot algorithms, SIAM Journal on Applied Mathematics 29 (1975) 530-539]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68160</id>
		<title>Вершинная, рёберная связность, связь между ними и минимальной степенью вершины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68160"/>
				<updated>2019-01-04T22:52:41Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Нахождение реберной связности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинной связностью''' &amp;lt;tex&amp;gt;\kappa&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''vertex-connectivity'') называется наименьшее число вершин, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Реберной связностью''' &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''edge-connectivity'') называется наименьшее количество ребер, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Связь между вершинной, реберной связностью и минимальной степенью вершины ==&lt;br /&gt;
Пускай минимальная степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; обозначается буквой &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;. Тогда:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; справедливо следующее неравенство: &amp;lt;tex&amp;gt;\kappa \leqslant \lambda \leqslant \delta &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Ver_ed_coh_1.png|thumb|right|150px|Полный граф. &amp;lt;tex&amp;gt; \lambda = \delta = \kappa = 4&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
# Проверим второе неравенство. Если в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; нет ребер, то &amp;lt;tex&amp;gt; \lambda = 0 &amp;lt;/tex&amp;gt;. Если ребра есть, то несвязный граф получаем из данного, удаляя все ребра, инцидентные вершине с наименьшей степенью. В любом случае &amp;lt;tex&amp;gt; \lambda \leqslant \delta &amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Чтобы проверить первое неравенство нужно рассмотреть несколько случаев. &lt;br /&gt;
##Если  &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} несвязный или тривиальный граф, то  &amp;lt;tex&amp;gt; \kappa = \lambda = 0 &amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; связен и имеет мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\lambda = 1 &amp;lt;/tex&amp;gt;. В последнем случае &amp;lt;tex&amp;gt; \kappa = 1 &amp;lt;/tex&amp;gt;, поскольку или граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет точку сочленения, инцидентную ребру &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, или же &amp;lt;tex&amp;gt;G=K_2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Наконец, предположим, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; содержит множество из &amp;lt;tex&amp;gt; \lambda \geqslant 2 &amp;lt;/tex&amp;gt; ребер, удаление которых делает его несвязным. Ясно, что удаляя &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер из этого множества получаем граф, имеющий мост &amp;lt;tex&amp;gt;x = uv&amp;lt;/tex&amp;gt;. Для каждого из этих &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер выберем какую-либо инцидентную с ним вершину отличную от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.  Удаление выбранных вершин приводит к удалению &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; (а возможно, и большего числа) ребер. Если получаемый после такого удаления граф не связен, то &amp;lt;tex&amp;gt;\kappa \lt \lambda&amp;lt;/tex&amp;gt;; если же он связен, то в нем есть мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, и поэтому удаление вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; приводит либо к несвязному, либо к тривиальному графу. В любом случае &amp;lt;tex&amp;gt; \kappa \leqslant \lambda&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
 Для любых натуральных чисел &amp;lt;tex&amp;gt;a, b, c&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a \leqslant b \leqslant c&amp;lt;/tex&amp;gt;, существует граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, у которого &amp;lt;tex&amp;gt;\kappa  = a, \lambda  = b&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\delta = c &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=[[Файл:Ver_ed_coh_2.png|thumb|right|335px|Граф, в котором &amp;lt;tex&amp;gt; \delta = 4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\lambda = 3&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\kappa = 2&amp;lt;/tex&amp;gt;.]]&lt;br /&gt;
Рассмотрим граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, являющийся объединением двух полных графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, содержащих &amp;lt;tex&amp;gt;c + 1&amp;lt;/tex&amp;gt; вершину. Отметим &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;. Добавим в граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; ребер так, чтобы каждое ребро было инцидентно помеченной вершине, лежащей в  подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и помеченной вершине, лежащей в подграфе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, причем не осталось ни одной помеченной вершины, у которой не появилось хотя бы одно новое ребро, инцидентное ей.&lt;br /&gt;
Тогда:&lt;br /&gt;
&lt;br /&gt;
# Поскольку &amp;lt;tex&amp;gt;b \leqslant c&amp;lt;/tex&amp;gt;, то было как минимум две непомеченные вершины, поэтому &amp;lt;tex&amp;gt; \delta = c&amp;lt;/tex&amp;gt;, так как минимальные степени вершин графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; были равны &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;, а степени их вершин не уменьшались.&lt;br /&gt;
# Заметим, что между двумя вершинами графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует не меньше &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершинно-непересекающихся простых цепей, следовательно по [[теорема Менгера|теореме Менгера]] &amp;lt;tex&amp;gt;\kappa \geqslant a&amp;lt;/tex&amp;gt;. Однако если удалить из графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; помеченные вершины его подграфа &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; потеряет связность. Значит, &amp;lt;tex&amp;gt;\kappa = a&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Аналогично рассуждению пункта 2, легко убедится, что &amp;lt;tex&amp;gt;\lambda = b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Нахождение реберной связности ==&lt;br /&gt;
&lt;br /&gt;
Для нахождения реберной связности нужно перебрать все пары вершин &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, найти количество непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; и выбрать минимум.&lt;br /&gt;
Пусть он равен &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;. По утверждению, граф является [[k-связность#def_2|&amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;-связным]], причем такое &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; {{---}} максимально (ведь мы явно нашли количество путей). А значит, по определению, реберная связность равна &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для нахождения количества непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и найдем максимальный [[Определение сети, потока #Определение потока |поток]] (например, [[Алгоритм Эдмондса-Карпа|алгоритм Эдмондса-Карпа]]).&lt;br /&gt;
Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, по которым поток неотрицателен и равен &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (т.к. пропускная способность всех ребер равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;). А значит, если поток равен &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;, то и количество путей равно &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Псевдокод алгоритма '''&lt;br /&gt;
  '''function''' disjoint_paths_count(): '''int'''&lt;br /&gt;
    ans = INF&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;s \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''for''' &amp;lt;tex&amp;gt;t \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
              flow = find_max_flow(s, t) &amp;lt;font color=darkgreen&amp;gt;// максимальный поток {{---}} количество путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; &amp;lt;/font&amp;gt;&lt;br /&gt;
              ans = min(ans, flow)&lt;br /&gt;
    '''return''' ans&lt;br /&gt;
&lt;br /&gt;
'''Оценка работы'''&lt;br /&gt;
&lt;br /&gt;
Время работы равно &amp;lt;tex&amp;gt;V^2 \times O(find\_max\_flow)&amp;lt;/tex&amp;gt;. При использовании алгоритма Эдмондса-Карпа время равно &amp;lt;tex&amp;gt;V^2 \times O(V E^2)&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;O(V^3 E^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Нахождение вершинной связности ==&lt;br /&gt;
Используя аналогичные утверждения и определения для вершинной связности придем к такому же алгоритму с тем отличием, что понадобится искать вершинно-непересекающиеся пути.&lt;br /&gt;
Искать их можно тем же способом, если сопоставить каждой вершине пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для этого воспользуемся известным трюком:&lt;br /&gt;
&lt;br /&gt;
Разобьем каждую вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; графа на две вершины &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Все ребра, которые входили в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут входить в &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt;. Все ребра, которые выходили из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут выходить из &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Так же добавим ребро &amp;lt;tex&amp;gt;(v_1, v_2)&amp;lt;/tex&amp;gt; с пропускной способностью &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Vertex-2vertex.png|300px|left|thumb|Иллюстрация]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого для нахождения количества вершинно непересекающихся путей в исходном графе будем искать количество реберно непересекающихся в новом графе.&lt;br /&gt;
&lt;br /&gt;
Тем самым сведя задачу к нахождению реберной связности.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Теорема Менгера]]&lt;br /&gt;
*[[Алгоритм Эдмондса-Карпа]]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A0%D0%BE%D0%B1%D0%B1%D0%B8%D0%BD%D1%81%D0%B0 Википедия {{---}} Теорема Роббинса]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* [https://stugum.files.wordpress.com/2014/03/harary-graph-theory.pdf Харари Ф. Теория графов: Пер. с англ. / Предисл. В. П. Козырева; Под ред. Г.П.Гаврилова. Изд. 4-е. — М.: Книжный дом &amp;quot;ЛИБРОКОМ&amp;quot;, 2009. — 60 с.]&lt;br /&gt;
&lt;br /&gt;
* [http://alleng.org/d/comp/comp384.htm Дж. Клейнберг, Е. Тардос. Алгоритмы: разработка и применение. Классика Computers Science. 2016. - 383 c.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Связность в графах]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68159</id>
		<title>Вершинная, рёберная связность, связь между ними и минимальной степенью вершины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68159"/>
				<updated>2019-01-04T22:52:13Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Нахождение реберной связности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинной связностью''' &amp;lt;tex&amp;gt;\kappa&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''vertex-connectivity'') называется наименьшее число вершин, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Реберной связностью''' &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''edge-connectivity'') называется наименьшее количество ребер, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Связь между вершинной, реберной связностью и минимальной степенью вершины ==&lt;br /&gt;
Пускай минимальная степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; обозначается буквой &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;. Тогда:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; справедливо следующее неравенство: &amp;lt;tex&amp;gt;\kappa \leqslant \lambda \leqslant \delta &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Ver_ed_coh_1.png|thumb|right|150px|Полный граф. &amp;lt;tex&amp;gt; \lambda = \delta = \kappa = 4&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
# Проверим второе неравенство. Если в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; нет ребер, то &amp;lt;tex&amp;gt; \lambda = 0 &amp;lt;/tex&amp;gt;. Если ребра есть, то несвязный граф получаем из данного, удаляя все ребра, инцидентные вершине с наименьшей степенью. В любом случае &amp;lt;tex&amp;gt; \lambda \leqslant \delta &amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Чтобы проверить первое неравенство нужно рассмотреть несколько случаев. &lt;br /&gt;
##Если  &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} несвязный или тривиальный граф, то  &amp;lt;tex&amp;gt; \kappa = \lambda = 0 &amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; связен и имеет мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\lambda = 1 &amp;lt;/tex&amp;gt;. В последнем случае &amp;lt;tex&amp;gt; \kappa = 1 &amp;lt;/tex&amp;gt;, поскольку или граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет точку сочленения, инцидентную ребру &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, или же &amp;lt;tex&amp;gt;G=K_2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Наконец, предположим, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; содержит множество из &amp;lt;tex&amp;gt; \lambda \geqslant 2 &amp;lt;/tex&amp;gt; ребер, удаление которых делает его несвязным. Ясно, что удаляя &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер из этого множества получаем граф, имеющий мост &amp;lt;tex&amp;gt;x = uv&amp;lt;/tex&amp;gt;. Для каждого из этих &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер выберем какую-либо инцидентную с ним вершину отличную от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.  Удаление выбранных вершин приводит к удалению &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; (а возможно, и большего числа) ребер. Если получаемый после такого удаления граф не связен, то &amp;lt;tex&amp;gt;\kappa \lt \lambda&amp;lt;/tex&amp;gt;; если же он связен, то в нем есть мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, и поэтому удаление вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; приводит либо к несвязному, либо к тривиальному графу. В любом случае &amp;lt;tex&amp;gt; \kappa \leqslant \lambda&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
 Для любых натуральных чисел &amp;lt;tex&amp;gt;a, b, c&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a \leqslant b \leqslant c&amp;lt;/tex&amp;gt;, существует граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, у которого &amp;lt;tex&amp;gt;\kappa  = a, \lambda  = b&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\delta = c &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=[[Файл:Ver_ed_coh_2.png|thumb|right|335px|Граф, в котором &amp;lt;tex&amp;gt; \delta = 4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\lambda = 3&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\kappa = 2&amp;lt;/tex&amp;gt;.]]&lt;br /&gt;
Рассмотрим граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, являющийся объединением двух полных графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, содержащих &amp;lt;tex&amp;gt;c + 1&amp;lt;/tex&amp;gt; вершину. Отметим &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;. Добавим в граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; ребер так, чтобы каждое ребро было инцидентно помеченной вершине, лежащей в  подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и помеченной вершине, лежащей в подграфе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, причем не осталось ни одной помеченной вершины, у которой не появилось хотя бы одно новое ребро, инцидентное ей.&lt;br /&gt;
Тогда:&lt;br /&gt;
&lt;br /&gt;
# Поскольку &amp;lt;tex&amp;gt;b \leqslant c&amp;lt;/tex&amp;gt;, то было как минимум две непомеченные вершины, поэтому &amp;lt;tex&amp;gt; \delta = c&amp;lt;/tex&amp;gt;, так как минимальные степени вершин графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; были равны &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;, а степени их вершин не уменьшались.&lt;br /&gt;
# Заметим, что между двумя вершинами графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует не меньше &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершинно-непересекающихся простых цепей, следовательно по [[теорема Менгера|теореме Менгера]] &amp;lt;tex&amp;gt;\kappa \geqslant a&amp;lt;/tex&amp;gt;. Однако если удалить из графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; помеченные вершины его подграфа &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; потеряет связность. Значит, &amp;lt;tex&amp;gt;\kappa = a&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Аналогично рассуждению пункта 2, легко убедится, что &amp;lt;tex&amp;gt;\lambda = b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Нахождение реберной связности ==&lt;br /&gt;
&lt;br /&gt;
Для нахождения реберной связности нужно перебрать все пары вершин &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, найти количество непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; и выбрать минимум.&lt;br /&gt;
Пусть он равен &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;. По утверждению, граф является [[k-связность#def_2|&amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;-связным]], причем такое &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; {{---}} максимально (ведь мы явно нашли количество путей). А значит, по определению, реберная связность равна &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для нахождения количества непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и найдем максимальный [[Определение сети, потока #Определение потока |поток]] (например, [[Алгоритм Эдмондса-Карпа|алгоритм Эдмондса-Карпа]]).&lt;br /&gt;
Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, по которым поток неотрицателен и равен &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (т.к. пропускная способность всех ребер равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;). А значит, если поток равен &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;, то и количество путей равно &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Псевдокод алгоритма '''&lt;br /&gt;
  '''function''' disjoint_paths_count(): '''int'''&lt;br /&gt;
    ans = INF&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;s \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''for''' &amp;lt;tex&amp;gt;t \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
              flow = find_max_flow(s, t) &amp;lt;font color=darkgreen&amp;gt;// максимальный поток {{---}} количество путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; &amp;lt;/font&amp;gt;&lt;br /&gt;
              ans = min(ans, flow)&lt;br /&gt;
    '''return''' ans&lt;br /&gt;
&lt;br /&gt;
'''Оценка работы'''&lt;br /&gt;
&lt;br /&gt;
Время работы равно &amp;lt;tex&amp;gt;V^2 \times O(find_max_flow)&amp;lt;/tex&amp;gt;. При использовании алгоритма Эдмондса-Карпа время равно &amp;lt;tex&amp;gt;V^2 \times O(V E^2)&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;O(V^3 E^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Нахождение вершинной связности ==&lt;br /&gt;
Используя аналогичные утверждения и определения для вершинной связности придем к такому же алгоритму с тем отличием, что понадобится искать вершинно-непересекающиеся пути.&lt;br /&gt;
Искать их можно тем же способом, если сопоставить каждой вершине пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для этого воспользуемся известным трюком:&lt;br /&gt;
&lt;br /&gt;
Разобьем каждую вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; графа на две вершины &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Все ребра, которые входили в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут входить в &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt;. Все ребра, которые выходили из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут выходить из &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Так же добавим ребро &amp;lt;tex&amp;gt;(v_1, v_2)&amp;lt;/tex&amp;gt; с пропускной способностью &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Vertex-2vertex.png|300px|left|thumb|Иллюстрация]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого для нахождения количества вершинно непересекающихся путей в исходном графе будем искать количество реберно непересекающихся в новом графе.&lt;br /&gt;
&lt;br /&gt;
Тем самым сведя задачу к нахождению реберной связности.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Теорема Менгера]]&lt;br /&gt;
*[[Алгоритм Эдмондса-Карпа]]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A0%D0%BE%D0%B1%D0%B1%D0%B8%D0%BD%D1%81%D0%B0 Википедия {{---}} Теорема Роббинса]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* [https://stugum.files.wordpress.com/2014/03/harary-graph-theory.pdf Харари Ф. Теория графов: Пер. с англ. / Предисл. В. П. Козырева; Под ред. Г.П.Гаврилова. Изд. 4-е. — М.: Книжный дом &amp;quot;ЛИБРОКОМ&amp;quot;, 2009. — 60 с.]&lt;br /&gt;
&lt;br /&gt;
* [http://alleng.org/d/comp/comp384.htm Дж. Клейнберг, Е. Тардос. Алгоритмы: разработка и применение. Классика Computers Science. 2016. - 383 c.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Связность в графах]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=68158</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=68158"/>
				<updated>2019-01-04T22:42:09Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Критерий существования реберного ядра */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по [[Теорема Холла|теореме о свадьбах (Холла)]], существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни несводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему 3 (Theorem 3)&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 519.&amp;lt;/ref&amp;gt; аналогичного результата для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
[[File:Bipartite_graph_1.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
[[File:Bipartite_graph_2.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68156</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68156"/>
				<updated>2019-01-04T18:10:45Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
'''Псевдокод'''&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Время работы'''&lt;br /&gt;
&lt;br /&gt;
Это подразумевает, что максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt; мы можем найти за полиномиальное время (жадно наращивать независимое множество в &amp;lt;tex&amp;gt;M = M_1 \cup \ldots \cup M_k&amp;lt;/tex&amp;gt;). Cunningham&amp;lt;ref&amp;gt;Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, стр.732&amp;lt;/ref&amp;gt; разработал алгоритм, которым за &amp;lt;tex&amp;gt;O((n^{(3/2)} + k)mQ + n^{(1/2)}km)&amp;lt;/tex&amp;gt; можно найти максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; максимальный размер множества в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; размер подмножества и &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; время, необходимое, чтобы определить принадлежит ли множество &amp;lt;tex&amp;gt; \mathcal{I}_j&amp;lt;/tex&amp;gt; для каждого &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Более детальное объяснение алгоритма (но не время работы) можно найти в объяснении C. Greene и T.L. Magnanti&amp;lt;ref&amp;gt;C. Greene, T.L. Magnanti, Some abstract pivot algorithms, SIAM Journal on Applied Mathematics, p.530-539&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, {{---}} Springer, 2004, {{---}} стр.732&lt;br /&gt;
&lt;br /&gt;
[http://booksc.org/book/18618751/0b4420 C. Greene, T.L. Magnanti, Some abstract pivot algorithms, SIAM Journal on Applied Mathematics 29 (1975) 530-539]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68155</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68155"/>
				<updated>2019-01-04T18:09:20Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
'''Псевдокод'''&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Время работы'''&lt;br /&gt;
&lt;br /&gt;
Это подразумевает, что максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt; мы можем найти за полиномиальное время (жадно наращивать независимое множество в &amp;lt;tex&amp;gt;M = M_1 \cup \ldots \cup M_k&amp;lt;/tex&amp;gt;). Cunningham&amp;lt;ref&amp;gt;Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, стр.732&amp;lt;/ref&amp;gt; разработал алгоритм, которым за &amp;lt;tex&amp;gt;O((n^{(3/2)} + k)mQ + n^{(1/2)}km)&amp;lt;/tex&amp;gt; можно найти максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; максимальный размер множества в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; размер подмножества и &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; время, необходимое, чтобы определить принадлежит ли множество &amp;lt;tex&amp;gt; \mathcal{I}_j&amp;lt;/tex&amp;gt; для каждого &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Более детальное объяснение алгоритма (но не время работы) можно найти в объяснении C. Greene и T.L. Magnanti&amp;lt;ref&amp;gt;C. Greene, T.L. Magnanti, Some abstract pivot algorithms&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, {{---}} Springer, 2004, {{---}} стр.732&lt;br /&gt;
&lt;br /&gt;
[http://booksc.org/book/18618751/0b4420 C. Greene, T.L. Magnanti, Some abstract pivot algorithms, SIAM Journal on Applied Mathematics 29 (1975) 530-539]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68154</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68154"/>
				<updated>2019-01-04T18:08:08Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
'''Псевдокод'''&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Время работы'''&lt;br /&gt;
&lt;br /&gt;
Это подразумевает, что максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt; мы можем найти за полиномиальное время (жадно наращивать независимое множество в &amp;lt;tex&amp;gt;M = M_1 \cup \ldots \cup M_k&amp;lt;/tex&amp;gt;). Cunningham&amp;lt;ref&amp;gt;Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, стр.732&amp;lt;/ref&amp;gt; разработал алгоритм, которым за &amp;lt;tex&amp;gt;O((n^{(3/2)} + k)mQ + n^{(1/2)}km)&amp;lt;/tex&amp;gt; можно найти максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; максимальный размер множества в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; размер подмножества и &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; время, необходимое, чтобы определить принадлежит ли множество &amp;lt;tex&amp;gt; \mathcal{I}_j&amp;lt;/tex&amp;gt; для каждого &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Более детальное объяснение алгоритма можно в объяснении C. Greene и T.L. Magnanti&amp;lt;ref&amp;gt;C. Greene, T.L. Magnanti, Some abstract pivot algorithms&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, {{---}} Springer, 2004, {{---}} стр.732&lt;br /&gt;
&lt;br /&gt;
[http://booksc.org/book/18618751/0b4420 C. Greene, T.L. Magnanti, Some abstract pivot algorithms, SIAM Journal on Applied Mathematics 29 (1975) 530-539]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68153</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68153"/>
				<updated>2019-01-04T18:03:20Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
'''Псевдокод'''&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Время работы'''&lt;br /&gt;
&lt;br /&gt;
Это подразумевает, что максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt; мы можем найти за полиномиальное время (жадно наращивать независимое множество в &amp;lt;tex&amp;gt;M = M_1 \cup \ldots \cup M_k&amp;lt;/tex&amp;gt;). Cunningham&amp;lt;ref&amp;gt;Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, стр.732&amp;lt;/ref&amp;gt; разработал алгоритм, которым за &amp;lt;tex&amp;gt;O((n^{(3/2)} + k)mQ + n^{(1/2)}km)&amp;lt;/tex&amp;gt; можно найти максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; максимальный размер множества в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; размер подмножества и &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; время, необходимое, чтобы определить принадлежит ли множество &amp;lt;tex&amp;gt; \mathcal{I}_j&amp;lt;/tex&amp;gt; для каждого &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, {{---}} Springer, 2004, {{---}} стр.732&lt;br /&gt;
&lt;br /&gt;
[http://booksc.org/book/18618751/0b4420 C. Greene, T.L. Magnanti, Some abstract pivot algorithms, SIAM Journal on Applied Mathematics 29 (1975) 530-539]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68152</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68152"/>
				<updated>2019-01-04T15:40:16Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
'''Псевдокод'''&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Время работы'''&lt;br /&gt;
&lt;br /&gt;
Это подразумевает, что максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt; мы можем найти за полиномиальное время (жадно наращивать независимое множество в &amp;lt;tex&amp;gt;M = M_1 \cup \ldots \cup M_k&amp;lt;/tex&amp;gt;). Cunningham&amp;lt;ref&amp;gt;Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, стр.732&amp;lt;/ref&amp;gt; разработал алгоритм, которым за &amp;lt;tex&amp;gt;O((n^{(3/2)} + k)mQ + n^{(1/2)}km)&amp;lt;/tex&amp;gt; можно найти максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; максимальный размер множества в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; размер подмножества и &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; время, необходимое, чтобы определить принадлежит ли множество &amp;lt;tex&amp;gt; \mathcal{I}_j&amp;lt;/tex&amp;gt; для каждого &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, {{---}} Springer, 2004, {{---}} стр.732&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68151</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=68151"/>
				<updated>2019-01-04T15:39:10Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
'''Псевдокод'''&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Время работы'''&lt;br /&gt;
Это подразумевает, что максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt; мы можем найти за полиномиальное время (жадно наращивать независимое множество в &amp;lt;tex&amp;gt;M = M_1 \cup \ldots \cup M_k&amp;lt;/tex&amp;gt;). Cunningham&amp;lt;ref&amp;gt;Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, стр.732&amp;lt;/ref&amp;gt; разработал алгоритм, которым за &amp;lt;tex&amp;gt;O((n^{(3/2)} + k)mQ + n^{(1/2)}km)&amp;lt;/tex&amp;gt; можно найти максимальное независимое множество в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; максимальный размер множества в &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; размер подмножества и &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; время, необходимое, чтобы определить принадлежит ли множество &amp;lt;tex&amp;gt; \mathcal{I}_j&amp;lt;/tex&amp;gt; для каждого &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
Alexander Schrijver. Combinatorial Optimization. Polyhedra and Efficiency, Volume A-C, {{---}} Springer, 2004, {{---}} стр.732&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68150</id>
		<title>Вершинная, рёберная связность, связь между ними и минимальной степенью вершины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68150"/>
				<updated>2019-01-04T15:37:50Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Нахождение реберной связности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинной связностью''' &amp;lt;tex&amp;gt;\kappa&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''vertex-connectivity'') называется наименьшее число вершин, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Реберной связностью''' &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''edge-connectivity'') называется наименьшее количество ребер, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Связь между вершинной, реберной связностью и минимальной степенью вершины ==&lt;br /&gt;
Пускай минимальная степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; обозначается буквой &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;. Тогда:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; справедливо следующее неравенство: &amp;lt;tex&amp;gt;\kappa \leqslant \lambda \leqslant \delta &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Ver_ed_coh_1.png|thumb|right|150px|Полный граф. &amp;lt;tex&amp;gt; \lambda = \delta = \kappa = 4&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
# Проверим второе неравенство. Если в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; нет ребер, то &amp;lt;tex&amp;gt; \lambda = 0 &amp;lt;/tex&amp;gt;. Если ребра есть, то несвязный граф получаем из данного, удаляя все ребра, инцидентные вершине с наименьшей степенью. В любом случае &amp;lt;tex&amp;gt; \lambda \leqslant \delta &amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Чтобы проверить первое неравенство нужно рассмотреть несколько случаев. &lt;br /&gt;
##Если  &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} несвязный или тривиальный граф, то  &amp;lt;tex&amp;gt; \kappa = \lambda = 0 &amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; связен и имеет мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\lambda = 1 &amp;lt;/tex&amp;gt;. В последнем случае &amp;lt;tex&amp;gt; \kappa = 1 &amp;lt;/tex&amp;gt;, поскольку или граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет точку сочленения, инцидентную ребру &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, или же &amp;lt;tex&amp;gt;G=K_2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Наконец, предположим, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; содержит множество из &amp;lt;tex&amp;gt; \lambda \geqslant 2 &amp;lt;/tex&amp;gt; ребер, удаление которых делает его несвязным. Ясно, что удаляя &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер из этого множества получаем граф, имеющий мост &amp;lt;tex&amp;gt;x = uv&amp;lt;/tex&amp;gt;. Для каждого из этих &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер выберем какую-либо инцидентную с ним вершину отличную от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.  Удаление выбранных вершин приводит к удалению &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; (а возможно, и большего числа) ребер. Если получаемый после такого удаления граф не связен, то &amp;lt;tex&amp;gt;\kappa \lt \lambda&amp;lt;/tex&amp;gt;; если же он связен, то в нем есть мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, и поэтому удаление вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; приводит либо к несвязному, либо к тривиальному графу. В любом случае &amp;lt;tex&amp;gt; \kappa \leqslant \lambda&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
 Для любых натуральных чисел &amp;lt;tex&amp;gt;a, b, c&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a \leqslant b \leqslant c&amp;lt;/tex&amp;gt;, существует граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, у которого &amp;lt;tex&amp;gt;\kappa  = a, \lambda  = b&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\delta = c &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=[[Файл:Ver_ed_coh_2.png|thumb|right|335px|Граф, в котором &amp;lt;tex&amp;gt; \delta = 4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\lambda = 3&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\kappa = 2&amp;lt;/tex&amp;gt;.]]&lt;br /&gt;
Рассмотрим граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, являющийся объединением двух полных графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, содержащих &amp;lt;tex&amp;gt;c + 1&amp;lt;/tex&amp;gt; вершину. Отметим &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;. Добавим в граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; ребер так, чтобы каждое ребро было инцидентно помеченной вершине, лежащей в  подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и помеченной вершине, лежащей в подграфе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, причем не осталось ни одной помеченной вершины, у которой не появилось хотя бы одно новое ребро, инцидентное ей.&lt;br /&gt;
Тогда:&lt;br /&gt;
&lt;br /&gt;
# Поскольку &amp;lt;tex&amp;gt;b \leqslant c&amp;lt;/tex&amp;gt;, то было как минимум две непомеченные вершины, поэтому &amp;lt;tex&amp;gt; \delta = c&amp;lt;/tex&amp;gt;, так как минимальные степени вершин графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; были равны &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;, а степени их вершин не уменьшались.&lt;br /&gt;
# Заметим, что между двумя вершинами графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует не меньше &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершинно-непересекающихся простых цепей, следовательно по [[теорема Менгера|теореме Менгера]] &amp;lt;tex&amp;gt;\kappa \geqslant a&amp;lt;/tex&amp;gt;. Однако если удалить из графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; помеченные вершины его подграфа &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; потеряет связность. Значит, &amp;lt;tex&amp;gt;\kappa = a&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Аналогично рассуждению пункта 2, легко убедится, что &amp;lt;tex&amp;gt;\lambda = b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Нахождение реберной связности ==&lt;br /&gt;
&lt;br /&gt;
Для нахождения реберной связности нужно перебрать все пары вершин &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, найти количество непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; и выбрать минимум.&lt;br /&gt;
Пусть он равен &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;. По утверждению, граф является [[k-связность#def_2|&amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;-связным]], причем такое &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; {{---}} максимально (ведь мы явно нашли количество путей). А значит, по определению, реберная связность равна &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для нахождения количества непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и найдем максимальный [[Определение сети, потока #Определение потока |поток]] (например, [[Алгоритм Эдмондса-Карпа|алгоритм Эдмондса-Карпа]]).&lt;br /&gt;
Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, по которым поток неотрицателен и равен &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (т.к. пропускная способность всех ребер равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;). А значит, если поток равен &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;, то и количество путей равно &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Псевдокод алгоритма '''&lt;br /&gt;
  '''function''' disjoint_paths_count(): '''int'''&lt;br /&gt;
    ans = INF&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;s \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''for''' &amp;lt;tex&amp;gt;t \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
              flow = find_flow(s, t) &amp;lt;font color=darkgreen&amp;gt;// максимальный поток {{---}} количество путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; &amp;lt;/font&amp;gt;&lt;br /&gt;
              ans = min(ans, flow)&lt;br /&gt;
    '''return''' ans&lt;br /&gt;
&lt;br /&gt;
'''Оценка работы'''&lt;br /&gt;
&lt;br /&gt;
Время работы равно &amp;lt;tex&amp;gt;V^2 \times O(find\_flow)&amp;lt;/tex&amp;gt;. При использовании алгоритма Эдмондса-Карпа время равно &amp;lt;tex&amp;gt;V^2 \times O(V E^2)&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;O(V^3 E^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Нахождение вершинной связности ==&lt;br /&gt;
Используя аналогичные утверждения и определения для вершинной связности придем к такому же алгоритму с тем отличием, что понадобится искать вершинно-непересекающиеся пути.&lt;br /&gt;
Искать их можно тем же способом, если сопоставить каждой вершине пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для этого воспользуемся известным трюком:&lt;br /&gt;
&lt;br /&gt;
Разобьем каждую вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; графа на две вершины &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Все ребра, которые входили в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут входить в &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt;. Все ребра, которые выходили из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут выходить из &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Так же добавим ребро &amp;lt;tex&amp;gt;(v_1, v_2)&amp;lt;/tex&amp;gt; с пропускной способностью &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Vertex-2vertex.png|300px|left|thumb|Иллюстрация]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого для нахождения количества вершинно непересекающихся путей в исходном графе будем искать количество реберно непересекающихся в новом графе.&lt;br /&gt;
&lt;br /&gt;
Тем самым сведя задачу к нахождению реберной связности.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Теорема Менгера]]&lt;br /&gt;
*[[Алгоритм Эдмондса-Карпа]]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A0%D0%BE%D0%B1%D0%B1%D0%B8%D0%BD%D1%81%D0%B0 Википедия {{---}} Теорема Роббинса]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* [https://stugum.files.wordpress.com/2014/03/harary-graph-theory.pdf Харари Ф. Теория графов: Пер. с англ. / Предисл. В. П. Козырева; Под ред. Г.П.Гаврилова. Изд. 4-е. — М.: Книжный дом &amp;quot;ЛИБРОКОМ&amp;quot;, 2009. — 60 с.]&lt;br /&gt;
&lt;br /&gt;
* [http://alleng.org/d/comp/comp384.htm Дж. Клейнберг, Е. Тардос. Алгоритмы: разработка и применение. Классика Computers Science. 2016. - 383 c.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Связность в графах]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68149</id>
		<title>Вершинная, рёберная связность, связь между ними и минимальной степенью вершины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F,_%D1%80%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D0%BD%D0%BE%D1%81%D1%82%D1%8C,_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_%D0%BD%D0%B8%D0%BC%D0%B8_%D0%B8_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%B5%D0%BF%D0%B5%D0%BD%D1%8C%D1%8E_%D0%B2%D0%B5%D1%80%D1%88%D0%B8%D0%BD%D1%8B&amp;diff=68149"/>
				<updated>2019-01-04T15:37:07Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Нахождение реберной связности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинной связностью''' &amp;lt;tex&amp;gt;\kappa&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''vertex-connectivity'') называется наименьшее число вершин, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Реберной связностью''' &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; (англ. ''edge-connectivity'') называется наименьшее количество ребер, удаление которых приводит к несвязному или тривиальному графу.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Связь между вершинной, реберной связностью и минимальной степенью вершины ==&lt;br /&gt;
Пускай минимальная степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; обозначается буквой &amp;lt;tex&amp;gt;\delta&amp;lt;/tex&amp;gt;. Тогда:&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; справедливо следующее неравенство: &amp;lt;tex&amp;gt;\kappa \leqslant \lambda \leqslant \delta &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Ver_ed_coh_1.png|thumb|right|150px|Полный граф. &amp;lt;tex&amp;gt; \lambda = \delta = \kappa = 4&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
# Проверим второе неравенство. Если в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; нет ребер, то &amp;lt;tex&amp;gt; \lambda = 0 &amp;lt;/tex&amp;gt;. Если ребра есть, то несвязный граф получаем из данного, удаляя все ребра, инцидентные вершине с наименьшей степенью. В любом случае &amp;lt;tex&amp;gt; \lambda \leqslant \delta &amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Чтобы проверить первое неравенство нужно рассмотреть несколько случаев. &lt;br /&gt;
##Если  &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} несвязный или тривиальный граф, то  &amp;lt;tex&amp;gt; \kappa = \lambda = 0 &amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; связен и имеет мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\lambda = 1 &amp;lt;/tex&amp;gt;. В последнем случае &amp;lt;tex&amp;gt; \kappa = 1 &amp;lt;/tex&amp;gt;, поскольку или граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет точку сочленения, инцидентную ребру &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, или же &amp;lt;tex&amp;gt;G=K_2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
##Наконец, предположим, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; содержит множество из &amp;lt;tex&amp;gt; \lambda \geqslant 2 &amp;lt;/tex&amp;gt; ребер, удаление которых делает его несвязным. Ясно, что удаляя &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер из этого множества получаем граф, имеющий мост &amp;lt;tex&amp;gt;x = uv&amp;lt;/tex&amp;gt;. Для каждого из этих &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; ребер выберем какую-либо инцидентную с ним вершину отличную от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.  Удаление выбранных вершин приводит к удалению &amp;lt;tex&amp;gt;\lambda - 1 &amp;lt;/tex&amp;gt; (а возможно, и большего числа) ребер. Если получаемый после такого удаления граф не связен, то &amp;lt;tex&amp;gt;\kappa \lt \lambda&amp;lt;/tex&amp;gt;; если же он связен, то в нем есть мост &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, и поэтому удаление вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; приводит либо к несвязному, либо к тривиальному графу. В любом случае &amp;lt;tex&amp;gt; \kappa \leqslant \lambda&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
 Для любых натуральных чисел &amp;lt;tex&amp;gt;a, b, c&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a \leqslant b \leqslant c&amp;lt;/tex&amp;gt;, существует граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, у которого &amp;lt;tex&amp;gt;\kappa  = a, \lambda  = b&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\delta = c &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=[[Файл:Ver_ed_coh_2.png|thumb|right|335px|Граф, в котором &amp;lt;tex&amp;gt; \delta = 4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\lambda = 3&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\kappa = 2&amp;lt;/tex&amp;gt;.]]&lt;br /&gt;
Рассмотрим граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, являющийся объединением двух полных графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, содержащих &amp;lt;tex&amp;gt;c + 1&amp;lt;/tex&amp;gt; вершину. Отметим &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершин, принадлежащих подграфу &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;. Добавим в граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; ребер так, чтобы каждое ребро было инцидентно помеченной вершине, лежащей в  подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и помеченной вершине, лежащей в подграфе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, причем не осталось ни одной помеченной вершины, у которой не появилось хотя бы одно новое ребро, инцидентное ей.&lt;br /&gt;
Тогда:&lt;br /&gt;
&lt;br /&gt;
# Поскольку &amp;lt;tex&amp;gt;b \leqslant c&amp;lt;/tex&amp;gt;, то было как минимум две непомеченные вершины, поэтому &amp;lt;tex&amp;gt; \delta = c&amp;lt;/tex&amp;gt;, так как минимальные степени вершин графов &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; были равны &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;, а степени их вершин не уменьшались.&lt;br /&gt;
# Заметим, что между двумя вершинами графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует не меньше &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; вершинно-непересекающихся простых цепей, следовательно по [[теорема Менгера|теореме Менгера]] &amp;lt;tex&amp;gt;\kappa \geqslant a&amp;lt;/tex&amp;gt;. Однако если удалить из графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; помеченные вершины его подграфа &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; потеряет связность. Значит, &amp;lt;tex&amp;gt;\kappa = a&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Аналогично рассуждению пункта 2, легко убедится, что &amp;lt;tex&amp;gt;\lambda = b&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Нахождение реберной связности ==&lt;br /&gt;
&lt;br /&gt;
Для нахождения реберной связности нужно перебрать все пары вершин &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, найти количество непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; и выбрать минимум.&lt;br /&gt;
Пусть он равен &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;. По утверждению, граф является [[k-связность#def_2|&amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;-связным]], причем такое &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt; {{---}} максимально (ведь мы явно нашли количество путей). А значит, по определению, реберная связность равна &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для нахождения количества непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; воспользуемся алгоритмом нахождения максимального потока. Сопоставим каждому ребру пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и найдем максимальный [[Определение сети, потока #Определение потока |поток]] (например, [[Алгоритм Эдмондса-Карпа|алгоритм Эдмондса-Карпа]]).&lt;br /&gt;
Он и будет равен количеству путей. Действительно, если провести декомпозицию потока, то получим набор реберно непересекающихся путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;, по которым поток неотрицателен и равен &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; (т.к. пропускная способность всех ребер равна &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;). А значит, если поток равен &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;, то и количество путей равно &amp;lt;tex&amp;gt;flow&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
''' Псевдокод алгоритма '''&lt;br /&gt;
  '''function''' disjoint_paths_count(): '''int'''&lt;br /&gt;
    ans = INF&lt;br /&gt;
    '''for''' &amp;lt;tex&amp;gt;s \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''for''' &amp;lt;tex&amp;gt;t \in V:&amp;lt;/tex&amp;gt;&lt;br /&gt;
              flow = find_flow(s, t) &amp;lt;font color=darkgreen&amp;gt;// максимальный поток {{---}} количество путей из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; &amp;lt;/font&amp;gt;&lt;br /&gt;
              ans = min(ans, flow)&lt;br /&gt;
    '''return''' ans&lt;br /&gt;
&lt;br /&gt;
'''Оценка работы'''&lt;br /&gt;
&lt;br /&gt;
Время работы равно &amp;lt;tex&amp;gt;V^2 \times O(find\_flow)&amp;lt;/tex&amp;gt;. При использовании [[Алоритм Эдмондса-Карпа|алгоритма Эдмондса-Карпа]] время равно &amp;lt;tex&amp;gt;V^2 \times O(V E^2)&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;O(V^3 E^2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Нахождение вершинной связности ==&lt;br /&gt;
Используя аналогичные утверждения и определения для вершинной связности придем к такому же алгоритму с тем отличием, что понадобится искать вершинно-непересекающиеся пути.&lt;br /&gt;
Искать их можно тем же способом, если сопоставить каждой вершине пропускную способность, равную &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для этого воспользуемся известным трюком:&lt;br /&gt;
&lt;br /&gt;
Разобьем каждую вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; графа на две вершины &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Все ребра, которые входили в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут входить в &amp;lt;tex&amp;gt;v_1&amp;lt;/tex&amp;gt;. Все ребра, которые выходили из &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; будут выходить из &amp;lt;tex&amp;gt;v_2&amp;lt;/tex&amp;gt;. Так же добавим ребро &amp;lt;tex&amp;gt;(v_1, v_2)&amp;lt;/tex&amp;gt; с пропускной способностью &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Vertex-2vertex.png|300px|left|thumb|Иллюстрация]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого для нахождения количества вершинно непересекающихся путей в исходном графе будем искать количество реберно непересекающихся в новом графе.&lt;br /&gt;
&lt;br /&gt;
Тем самым сведя задачу к нахождению реберной связности.&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
&lt;br /&gt;
*[[Теорема Менгера]]&lt;br /&gt;
*[[Алгоритм Эдмондса-Карпа]]&lt;br /&gt;
*[https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%A0%D0%BE%D0%B1%D0%B1%D0%B8%D0%BD%D1%81%D0%B0 Википедия {{---}} Теорема Роббинса]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* [https://stugum.files.wordpress.com/2014/03/harary-graph-theory.pdf Харари Ф. Теория графов: Пер. с англ. / Предисл. В. П. Козырева; Под ред. Г.П.Гаврилова. Изд. 4-е. — М.: Книжный дом &amp;quot;ЛИБРОКОМ&amp;quot;, 2009. — 60 с.]&lt;br /&gt;
&lt;br /&gt;
* [http://alleng.org/d/comp/comp384.htm Дж. Клейнберг, Е. Тардос. Алгоритмы: разработка и применение. Классика Computers Science. 2016. - 383 c.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Связность в графах]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67834</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67834"/>
				<updated>2018-12-12T18:18:53Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I \cup s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67833</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67833"/>
				<updated>2018-12-12T18:17:44Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67832</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67832"/>
				<updated>2018-12-12T18:17:15Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup {{s}} \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67831</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67831"/>
				<updated>2018-12-12T18:16:42Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup {s} \in \mathcal{I} \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам графа &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67830</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67830"/>
				<updated>2018-12-12T18:15:31Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I \cup s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67829</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67829"/>
				<updated>2018-12-12T18:12:45Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt;,  &amp;lt;tex&amp;gt;F = F_1 \cup \ldots \cup F_k&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; \mathcal{I} = \mathcal{I}_1 \cup \ldots \cup  \mathcal{I}_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67828</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67828"/>
				<updated>2018-12-12T18:09:02Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt; которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ s \in S \setminus I_i : I_i + s \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67827</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67827"/>
				<updated>2018-12-12T18:03:00Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Псевдокод */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt; которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + s \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + s&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67826</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67826"/>
				<updated>2018-12-12T17:58:42Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество элементов &amp;lt;tex&amp;gt;s \notin I_i&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cup {s} \in \mathcal{I}_i&amp;lt;/tex&amp;gt;. Определим &amp;lt;tex&amp;gt;I = I_1 \cup \ldots \cup I_k&amp;lt;/tex&amp;gt; которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67825</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67825"/>
				<updated>2018-12-12T17:52:30Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Эта задача [[Объединение матроидов, проверка множества на независимость#Проверка множества на независимость| сводится к пересечению матроидов]], однако есть другой способ её решить. &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67824</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67824"/>
				<updated>2018-12-12T17:27:44Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Наивный жадный алгоритм не работает, потому что неясно, как проверять множество на независимость в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67823</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67823"/>
				<updated>2018-12-12T15:50:45Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; так, что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67822</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67822"/>
				<updated>2018-12-12T15:46:31Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = (S,\mathcal{I}) = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = (S,\mathcal{I}_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67821</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67821"/>
				<updated>2018-12-12T15:38:50Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = \langle S,\mathcal{I} \rangle = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = \langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67820</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67820"/>
				<updated>2018-12-12T15:37:50Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\ldots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = \langle S,\mathcal{I} \rangle = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = \langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67819</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67819"/>
				<updated>2018-12-12T15:37:26Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1\dots M_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = \langle S,\mathcal{I} \rangle = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = \langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67818</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67818"/>
				<updated>2018-12-12T15:36:38Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots ,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldots k&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \cap I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt; Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = \langle S,\mathcal{I} \rangle = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = \langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67817</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67817"/>
				<updated>2018-12-12T15:35:34Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = (S, \mathcal{I}_1), \ldots,(S, \mathcal{I}_k)&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1\ldotsk&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;I_i \ I_j = \emptyset&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;i \neq j&amp;lt;/tex&amp;gt; Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = \langle S,\mathcal{I} \rangle = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = \langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67815</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=67815"/>
				<updated>2018-12-11T19:37:07Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = \langle S, \mathcal{I}_1 \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \langle S, \mathcal{I}_2 \rangle&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = \langle S,\mathcal{I} \rangle = \bigcup\limits_{k=1}^{2}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = \langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%D1%85&amp;diff=67533</id>
		<title>Теорема о циклах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%D1%85&amp;diff=67533"/>
				<updated>2018-12-05T01:23:45Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Циклом''' (англ. ''circuit'') в матроиде называется множество, не являющееся независимым, каждое подмножество которого является независимым. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= &lt;br /&gt;
о циклах&lt;br /&gt;
|statement= &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} матроид и &amp;lt;tex&amp;gt;\mathfrak{C}&amp;lt;/tex&amp;gt; {{---}} семейство его циклов. Тогда:&lt;br /&gt;
# &amp;lt;tex&amp;gt;\varnothing \notin \mathfrak{C}&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;C_1, C_2 \in \mathfrak{C}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1 \ne C_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_1 \nsubseteq C_2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_2 \nsubseteq C_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;C_1, C_2 \in \mathfrak{C}, C_1 \ne C_2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p \in C_1 \cap C_2&amp;lt;/tex&amp;gt;, то существует &amp;lt;tex&amp;gt;C \in \mathfrak{C}&amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt;C \subseteq (C_1 \cup C_2) \setminus p.&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# Из [[Определение матроида|определения матроида]] (первой аксиомы) &amp;lt;tex&amp;gt;\varnothing \in I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; {{---}} семейство независимых множеств матроида &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Откуда &amp;lt;tex&amp;gt;\varnothing \notin \mathfrak{C}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# От противного. Из определения цикла: если &amp;lt;tex&amp;gt;C_1 \subset C_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_1 \in I&amp;lt;/tex&amp;gt;. Значит &amp;lt;tex&amp;gt;C_1 \notin \mathfrak{C}&amp;lt;/tex&amp;gt;. Противоречие. Аналогично &amp;lt;tex&amp;gt;C_2 \nsubseteq C_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# От противного. Пусть &amp;lt;tex&amp;gt;D = (C_1 \cup C_2) \setminus p&amp;lt;/tex&amp;gt; независимо.&lt;br /&gt;
#: Обозначим &amp;lt;tex&amp;gt;A = C_1 \cap C_2&amp;lt;/tex&amp;gt;. Покажем, что &amp;lt;tex&amp;gt;|A| &amp;lt; |D|&amp;lt;/tex&amp;gt;. Из предыдущего пункта очевидным образом следует, что &amp;lt;tex&amp;gt;|C_1 \setminus C_2| &amp;gt; 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|C_2 \setminus C_1| &amp;gt; 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#: &amp;lt;tex&amp;gt;|D| = |C_1 \setminus C_2| + |C_2 \setminus C_1| + |A| - 1 \geqslant |A| + 1 + 1 - 1 = |A| + 1 &amp;gt; |A|.&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: Отсюда путем многократного применения третьей аксиомы матроидов получим &amp;lt;tex&amp;gt;\exists B: A \subset B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|B| = |D|&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} независимо. &lt;br /&gt;
#: Поскольку &amp;lt;tex&amp;gt;C_1&amp;lt;/tex&amp;gt; {{---}} цикл, &amp;lt;tex&amp;gt;C_1 \nsubseteq B&amp;lt;/tex&amp;gt;. Значит, найдется хотя бы один элемент в &amp;lt;tex&amp;gt;C_1 \setminus A&amp;lt;/tex&amp;gt;, не лежащий в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.  Следовательно в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; лежит не более чем &amp;lt;tex&amp;gt;|C_1 \setminus A| - 1&amp;lt;/tex&amp;gt; элементов из этого множества. Аналогично в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; лежит не более чем &amp;lt;tex&amp;gt;|C_2 \setminus A| - 1&amp;lt;/tex&amp;gt; элементов из множества &amp;lt;tex&amp;gt;C_2 \setminus A&amp;lt;/tex&amp;gt; . &lt;br /&gt;
#: Получаем: &amp;lt;tex&amp;gt;|B| \leqslant |A| + |C_1 \setminus A| - 1 + |C_2 \setminus A| - 1 = |C_1 \cup C_2| - 2 = |D| - 1&amp;lt;/tex&amp;gt;  .  А поскольку &amp;lt;tex&amp;gt;|B| = |D|&amp;lt;/tex&amp;gt; получаем противоречие. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Определение матроида]]&lt;br /&gt;
* [[Примеры матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:en:Matroid#Bases_and_circuits | Wikipedia {{---}} Matroid]]&lt;br /&gt;
* [[wikipedia:ru:Матроид#Аксиоматическое определение | Википедия {{---}} Матроид]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Основные факты теории матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%D1%85&amp;diff=67532</id>
		<title>Теорема о циклах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%D1%85&amp;diff=67532"/>
				<updated>2018-12-05T01:23:04Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Циклом''' (англ. ''circuit'') в матроиде называется множество, не являющееся независимым, каждое подмножество которого является независимым. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= &lt;br /&gt;
о циклах&lt;br /&gt;
|statement= &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} матроид и &amp;lt;tex&amp;gt;\mathfrak{C}&amp;lt;/tex&amp;gt; {{---}} семейство его циклов. Тогда:&lt;br /&gt;
# &amp;lt;tex&amp;gt;\varnothing \notin \mathfrak{C}&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;C_1, C_2 \in \mathfrak{C}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1 \ne C_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_1 \nsubseteq C_2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_2 \nsubseteq C_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;C_1, C_2 \in \mathfrak{C}, C_1 \ne C_2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p \in C_1 \cap C_2&amp;lt;/tex&amp;gt;, то существует &amp;lt;tex&amp;gt;C \in \mathfrak{C}&amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt;C \subseteq (C_1 \cup C_2) \setminus p.&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# Из [[Определение матроида|определения матроида]] (первой аксиомы) &amp;lt;tex&amp;gt;\varnothing \in I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; {{---}} семейство независимых множеств матроида &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Откуда &amp;lt;tex&amp;gt;\varnothing \notin \mathfrak{C}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# От противного. Из определения цикла: если &amp;lt;tex&amp;gt;C_1 \subset C_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_1 \in I&amp;lt;/tex&amp;gt;. Значит &amp;lt;tex&amp;gt;C_1 \notin \mathfrak{C}&amp;lt;/tex&amp;gt;. Противоречие. Аналогично &amp;lt;tex&amp;gt;C_2 \nsubseteq C_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# От противного. Пусть &amp;lt;tex&amp;gt;D = (C_1 \cup C_2) \setminus p&amp;lt;/tex&amp;gt; независимо.&lt;br /&gt;
#: Обозначим &amp;lt;tex&amp;gt;A = C_1 \cap C_2&amp;lt;/tex&amp;gt;. Покажем, что &amp;lt;tex&amp;gt;|A| &amp;lt; |D|&amp;lt;/tex&amp;gt;. Из предыдущего пункта очевидным образом следует, что &amp;lt;tex&amp;gt;|C_1 \setminus C_2| &amp;gt; 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|C_2 \setminus C_1| &amp;gt; 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#: &amp;lt;tex&amp;gt;|D| = |C_1 \setminus C_2| + |C_2 \setminus C_1| + |A| - 1 \geqslant |A| + 1 + 1 - 1 = |A| + 1 &amp;gt; |A|.&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: Отсюда путем многократного применения третьей аксиомы матроидов получим &amp;lt;tex&amp;gt;\exists B: A \subset B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|B| = |D|&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} независимо. &lt;br /&gt;
#: Поскольку &amp;lt;tex&amp;gt;C_1&amp;lt;/tex&amp;gt; {{---}} цикл, &amp;lt;tex&amp;gt;C_1 \nsubseteq B&amp;lt;/tex&amp;gt;. Значит, найдется хотя бы один элемент в &amp;lt;tex&amp;gt;C_1 \setminus A&amp;lt;/tex&amp;gt;, не лежащий в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.  Следовательно в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; лежит не более чем &amp;lt;tex&amp;gt;|C_1 \setminus A| - 1&amp;lt;/tex&amp;gt; элементов из этого множества. Аналогично в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; лежит не более чем &amp;lt;tex&amp;gt;|C_2 \setminus A| - 1&amp;lt;/tex&amp;gt; элементов из множества &amp;lt;tex&amp;gt;C_2 \setminus A&amp;lt;/tex&amp;gt;. &lt;br /&gt;
#: Получаем: &amp;lt;tex&amp;gt;|B| \leqslant |A| + |C_1 \setminus A| - 1 + |C_2 \setminus A| - 1 = |C_1 \cup C_2| - 2 = |D| - 1&amp;lt;/tex&amp;gt; .  А поскольку &amp;lt;tex&amp;gt;|B| = |D|&amp;lt;/tex&amp;gt; получаем противоречие. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Определение матроида]]&lt;br /&gt;
* [[Примеры матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:en:Matroid#Bases_and_circuits | Wikipedia {{---}} Matroid]]&lt;br /&gt;
* [[wikipedia:ru:Матроид#Аксиоматическое определение | Википедия {{---}} Матроид]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Основные факты теории матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%D1%85&amp;diff=67531</id>
		<title>Теорема о циклах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%D1%85&amp;diff=67531"/>
				<updated>2018-12-05T01:22:39Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Циклом''' (англ. ''circuit'') в матроиде называется множество, не являющееся независимым, каждое подмножество которого является независимым. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= &lt;br /&gt;
о циклах&lt;br /&gt;
|statement= &lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; {{---}} матроид и &amp;lt;tex&amp;gt;\mathfrak{C}&amp;lt;/tex&amp;gt; {{---}} семейство его циклов. Тогда:&lt;br /&gt;
# &amp;lt;tex&amp;gt;\varnothing \notin \mathfrak{C}&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;C_1, C_2 \in \mathfrak{C}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1 \ne C_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_1 \nsubseteq C_2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_2 \nsubseteq C_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;C_1, C_2 \in \mathfrak{C}, C_1 \ne C_2&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;p \in C_1 \cap C_2&amp;lt;/tex&amp;gt;, то существует &amp;lt;tex&amp;gt;C \in \mathfrak{C}&amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt;C \subseteq (C_1 \cup C_2) \setminus p.&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
# Из [[Определение матроида|определения матроида]] (первой аксиомы) &amp;lt;tex&amp;gt;\varnothing \in I&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; {{---}} семейство независимых множеств матроида &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Откуда &amp;lt;tex&amp;gt;\varnothing \notin \mathfrak{C}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# От противного. Из определения цикла: если &amp;lt;tex&amp;gt;C_1 \subset C_2&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_1 \in I&amp;lt;/tex&amp;gt;. Значит &amp;lt;tex&amp;gt;C_1 \notin \mathfrak{C}&amp;lt;/tex&amp;gt;. Противоречие. Аналогично &amp;lt;tex&amp;gt;C_2 \nsubseteq C_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
# От противного. Пусть &amp;lt;tex&amp;gt;D = (C_1 \cup C_2) \setminus p&amp;lt;/tex&amp;gt; независимо.&lt;br /&gt;
#: Обозначим &amp;lt;tex&amp;gt;A = C_1 \cap C_2&amp;lt;/tex&amp;gt;. Покажем, что &amp;lt;tex&amp;gt;|A| &amp;lt; |D|&amp;lt;/tex&amp;gt;. Из предыдущего пункта очевидным образом следует, что &amp;lt;tex&amp;gt;|C_1 \setminus C_2| &amp;gt; 0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|C_2 \setminus C_1| &amp;gt; 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#: &amp;lt;tex&amp;gt;|D| = |C_1 \setminus C_2| + |C_2 \setminus C_1| + |A| - 1 \geqslant |A| + 1 + 1 - 1 = |A| + 1 &amp;gt; |A|.&amp;lt;/tex&amp;gt;&lt;br /&gt;
#: Отсюда путем многократного применения третьей аксиомы матроидов получим &amp;lt;tex&amp;gt;\exists B: A \subset B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|B| = |D|&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; {{---}} независимо. &lt;br /&gt;
#: Поскольку &amp;lt;tex&amp;gt;C_1&amp;lt;/tex&amp;gt; {{---}} цикл, &amp;lt;tex&amp;gt;C_1 \nsubseteq B&amp;lt;/tex&amp;gt;. Значит, найдется хотя бы один элемент в &amp;lt;tex&amp;gt;C_1 \setminus A&amp;lt;/tex&amp;gt;, не лежащий в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.  Следовательно в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; лежит не более чем &amp;lt;tex&amp;gt;|C_1 \setminus A| - 1&amp;lt;/tex&amp;gt; элементов из этого множества. Аналогично в &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; лежит не более чем &amp;lt;tex&amp;gt;|C_2 \setminus A| - 1&amp;lt;/tex&amp;gt; элементов из множества &amp;lt;tex&amp;gt;C_2 \setminus A&amp;lt;/tex&amp;gt;. &lt;br /&gt;
#: Получаем: &amp;lt;tex&amp;gt;|B| \leqslant |A| + |C_1 \setminus A| - 1 + |C_2 \setminus A| - 1 = |C_1 \cup C_2| - 2 = |D| - 1&amp;lt;/tex&amp;gt;.  А поскольку &amp;lt;tex&amp;gt;|B| = |D|&amp;lt;/tex&amp;gt; получаем противоречие. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Определение матроида]]&lt;br /&gt;
* [[Примеры матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:en:Matroid#Bases_and_circuits | Wikipedia {{---}} Matroid]]&lt;br /&gt;
* [[wikipedia:ru:Матроид#Аксиоматическое определение | Википедия {{---}} Матроид]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Основные факты теории матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66704</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66704"/>
				<updated>2018-11-09T09:49:14Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Реберное ядро в двудольном графе */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни несводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему 3 (Theorem 3)&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 519.&amp;lt;/ref&amp;gt; аналогичного результата для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
[[File:Bipartite_graph_1.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
[[File:Bipartite_graph_2.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=66701</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=66701"/>
				<updated>2018-11-09T08:56:23Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = \langle S, \mathcal{I}_1 \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \langle S, \mathcal{I}_2 \rangle&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M = \langle S,\mathcal{I} \rangle = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i = \langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; . Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt; . &amp;lt;tex&amp;gt;F = \bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; . Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \leqslant r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt; . Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \leqslant |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=66700</id>
		<title>Алгоритм построения базы в объединении матроидов</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&amp;diff=66700"/>
				<updated>2018-11-09T08:46:19Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition=&lt;br /&gt;
Даны [[Определение матроида|матроиды]] &amp;lt;tex&amp;gt;M_1 = \langle S, \mathcal{I}_1 \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \langle S, \mathcal{I}_2 \rangle&amp;lt;/tex&amp;gt;. Необходимо найти максимальное по мощности [[Определение матроида#def_matroid|независимое множество]] в объединении &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Объединение матроидов''' (англ. ''matroid union'') &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\langle S,\mathcal{I} \rangle&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\langle S,\mathcal{I}_i \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
&lt;br /&gt;
Определим [[Граф замен|граф замен]]: для каждого &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt; построим [[Основные определения теории графов#defBiparateGraph|двудольный ориентированный граф]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;I_i \in \mathcal{I}_i&amp;lt;/tex&amp;gt;, такой что в левой доле находятся вершины из &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt;, а в правой — вершины из &amp;lt;tex&amp;gt;S \setminus I_i&amp;lt;/tex&amp;gt;. Построим ориентированные ребра из &amp;lt;tex&amp;gt;y \in I_i&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x \in S \setminus I_i&amp;lt;/tex&amp;gt;, при условии, что &amp;lt;tex&amp;gt;(I_i \setminus y) \cup x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Объединим все &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; в один граф &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, который будет суперпозицией ребер из этих графов. Пусть для каждого &amp;lt;tex&amp;gt;i:&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt; {{---}} множество вершин из &amp;lt;tex&amp;gt;S_i \setminus I_i&amp;lt;/tex&amp;gt;, которые могут быть добавлены в &amp;lt;tex&amp;gt;I_i&amp;lt;/tex&amp;gt; таким образом, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; независимое множество в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;. Или формально:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\bigcup\limits_{k=1}^{n}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;F_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом [[Граф замен|графе замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Тогда нужно найти такой элемент &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; — снова независимо.&lt;br /&gt;
Все наши кандидаты находятся в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;. Если мы найдем путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt;, то элемент &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, которым путь закончился, можно будет добавить в &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
То есть шаг жадного алгоритма заключается в создании нового &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; и поиске такого пути.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
  &amp;lt;tex&amp;gt;J&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\emptyset&amp;lt;/tex&amp;gt;&lt;br /&gt;
  '''for''' &amp;lt;tex&amp;gt;i \leftarrow 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;n - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
      построить [[Граф замен|граф замен]] &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt;&lt;br /&gt;
      '''if''' &amp;lt;tex&amp;gt;I_i + x \in \mathcal{I}_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
          &amp;lt;tex&amp;gt;J \leftarrow I_i + x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th_1&lt;br /&gt;
|statement=&lt;br /&gt;
Для любого &amp;lt;tex&amp;gt;s \in S \setminus I&amp;lt;/tex&amp;gt; имеем &amp;lt;tex&amp;gt;I + s \in J  \Leftrightarrow &amp;lt;/tex&amp;gt; существует ориентированный путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть существует путь из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — самый короткий такой путь. Запишем его вершины как {&amp;lt;tex&amp;gt;s_0, s_1, \ldots s_p&amp;lt;/tex&amp;gt;}. &amp;lt;tex&amp;gt;s_0 \in F&amp;lt;/tex&amp;gt;, так что не умаляя общности можно сказать, что &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;. Для каждого &amp;lt;tex&amp;gt;j = 1\ldots k&amp;lt;/tex&amp;gt; определим множество вершин &amp;lt;tex&amp;gt;S_j =&amp;lt;/tex&amp;gt; {&amp;lt;tex&amp;gt;s_i, s_{i+1}:(s_i, s_{i+1}) \in D_{M_j}(I_j)&amp;lt;/tex&amp;gt;}, где &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; пробегает от &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;p - 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Положим, что &amp;lt;tex&amp;gt;I'_1 = (I_1 \oplus S_1) \cup \{s_0\}&amp;lt;/tex&amp;gt;, для всех &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; положим &amp;lt;tex&amp;gt;I'_j = (I_j \oplus S_j)&amp;lt;/tex&amp;gt;. Ясно, что &amp;lt;tex&amp;gt;\cup _j I'_j = I + s&amp;lt;/tex&amp;gt;. Для того, чтобы показать независимость &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; в объединении матроидов нужно показать, что &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;. Заметим, что так как мы выбирали путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; таким, что он будет наименьшим, для каждого &amp;lt;tex&amp;gt;j &amp;gt; 1&amp;lt;/tex&amp;gt; существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать &amp;lt;tex&amp;gt;I'_j = I_j \oplus S_j&amp;lt;/tex&amp;gt;. Так как паросочетание единственно, &amp;lt;tex&amp;gt;I'_j \in J_j&amp;lt;/tex&amp;gt;. Аналогично &amp;lt;tex&amp;gt;s_0 \in F_1&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;I'_1 \in J_1&amp;lt;/tex&amp;gt;. Следовательно &amp;lt;tex&amp;gt;I + s&amp;lt;/tex&amp;gt; независимо в объединении матроидов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть нет пути из &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; по ребрам &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;. Тогда пусть существует множество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, состоящее из вершин &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;, из которого мы можем достичь &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; : &amp;lt;tex&amp;gt;T = \{x, \exists x \leadsto s\}&amp;lt;/tex&amp;gt; по допущению &amp;lt;tex&amp;gt;F\cap T = \varnothing&amp;lt;/tex&amp;gt;. Утверждается, что для всех &amp;lt;tex&amp;gt;i : |I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;(что означает, что &amp;lt;tex&amp;gt;I_i \cap T&amp;lt;/tex&amp;gt; — максимальное подмножество &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, независимое в &amp;lt;tex&amp;gt;M_i&amp;lt;/tex&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
Предположим, что это не так. &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(I_i\cap T) \le r_i(T)&amp;lt;/tex&amp;gt;, это возможно только если &amp;lt;tex&amp;gt;|I_i \cap T| &amp;lt; r_i(T)&amp;lt;/tex&amp;gt;. Значит существует такой &amp;lt;tex&amp;gt;x \in T \cap (S \setminus I_i)&amp;lt;/tex&amp;gt;, для которого &amp;lt;tex&amp;gt;(I_i \cap T) + x \in J_i&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;x \notin F&amp;lt;/tex&amp;gt; (по предположению вначале доказательства), значит &amp;lt;tex&amp;gt;I_i + x \notin J_i&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;I_i + x&amp;lt;/tex&amp;gt; содержит единственный цикл. Значит существует &amp;lt;tex&amp;gt;y \in I_i - T&amp;lt;/tex&amp;gt;, такой что &amp;lt;tex&amp;gt;I_i + x - y \in J_i&amp;lt;/tex&amp;gt;. Получается, что &amp;lt;tex&amp;gt;(y, x)&amp;lt;/tex&amp;gt; — ребро в &amp;lt;tex&amp;gt;D_{M_i}(I_i)&amp;lt;/tex&amp;gt; и оно содержит этот &amp;lt;tex&amp;gt;y \in T&amp;lt;/tex&amp;gt;, что противоречит тому как был выбран &amp;lt;tex&amp;gt;y \in I_i \setminus T&amp;lt;/tex&amp;gt;. Следовательно для всех &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; нам известно : &amp;lt;tex&amp;gt;|I_i \cap T| = r_i(T)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
У нас есть &amp;lt;tex&amp;gt;s \in T&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(I + s) \cap T = (\cup I_i + s)\cap T = \cup(I_i \cap T) + s&amp;lt;/tex&amp;gt;. Из определния функции [[Определение матроида#def_rank_of_matroid|ранга]] объединения матроидов имеем : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \le (|(I + s)\setminus T| + \sum\limits_{k=1}^{n}r_i(T))&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r_M(I + s) \le |(I + s)\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I\setminus T| + \sum\limits_{k=1}^{n} |I_i \cap T| = |I| &amp;lt; |I + s|&amp;lt;/tex&amp;gt; &lt;br /&gt;
и значит &amp;lt;tex&amp;gt;(I + s) \notin J&amp;lt;/tex&amp;gt; — противоречие.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== См. также==&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
[https://math.mit.edu/~goemans/18438F09/lec13.pdf Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Объединение матроидов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66699</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66699"/>
				<updated>2018-11-09T08:35:15Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Реберное ядро в двудольном графе */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни несводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
[[File:Bipartite_graph_1.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
[[File:Bipartite_graph_2.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66640</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66640"/>
				<updated>2018-11-03T06:10:52Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
[[File:Bipartite_graph_1.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
[[File:Bipartite_graph_2.png|thumb|130px|Двудольный граф &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66639</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66639"/>
				<updated>2018-11-03T06:10:30Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
[[File:Bipartite_graph_1.png|thumb|170px|Двудольный граф &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
[[File:Bipartite_graph_2.png|thumb|170px|Двудольный граф &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66638</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66638"/>
				<updated>2018-11-03T05:30:29Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tleft&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[File:Bipartite_graph_1.png|thumb|170px|Двудольный граф &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tleft&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[File:Bipartite_graph_2.png|thumb|170px|Двудольный граф &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66637</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66637"/>
				<updated>2018-11-03T05:29:50Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;tleft&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[File:Bipartite_graph_1.png|thumb|170px|Двудольный граф &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;tleft&amp;quot; style=&amp;quot;clear:none&amp;quot;&amp;gt;[[File:Bipartite_graph_2.png|thumb|170px|Двудольный граф &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_2.png&amp;diff=66636</id>
		<title>Файл:Bipartite graph 2.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_2.png&amp;diff=66636"/>
				<updated>2018-11-03T05:18:25Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_1.png&amp;diff=66635</id>
		<title>Файл:Bipartite graph 1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_1.png&amp;diff=66635"/>
				<updated>2018-11-03T05:13:02Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: Vsklamm загрузил новую версию Файл:Bipartite graph 1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Двудольный граф G_1&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_1.png&amp;diff=66634</id>
		<title>Файл:Bipartite graph 1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_1.png&amp;diff=66634"/>
				<updated>2018-11-03T05:08:42Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: Vsklamm загрузил новую версию Файл:Bipartite graph 1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Двудольный граф G_1&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_1.png&amp;diff=66633</id>
		<title>Файл:Bipartite graph 1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bipartite_graph_1.png&amp;diff=66633"/>
				<updated>2018-11-03T05:05:15Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: Двудольный граф G_1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Двудольный граф G_1&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66632</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66632"/>
				<updated>2018-11-03T04:58:39Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{---}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66631</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66631"/>
				<updated>2018-11-03T04:52:22Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунках 1 и 2. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 \cap T_1 = \varnothing&amp;lt;/tex&amp;gt;, он полунесводимый; следовательно, он совпадает со своим рёберным ядром. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_2 = \{u_2, u_3, u_6\}&amp;lt;/tex&amp;gt;. В нём два наименьших вершинных покрытия, именно &amp;lt;tex&amp;gt;M_2 = \{u_1,u_4, u_5\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 = \{u_2, u_3, u_6\}. Так как &amp;lt;tex&amp;gt;M_2 \cap T_2 = \varnothing&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;N_2 \cap S_2 = \varnothing&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; {{{---}}} несводимый граф и, значит, совпадает со своим рёберным ядром.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66623</id>
		<title>Рёберное ядро</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D1%91%D0%B1%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D1%8F%D0%B4%D1%80%D0%BE&amp;diff=66623"/>
				<updated>2018-10-30T11:33:14Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Реберное ядро в двудольном графе */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Рёберное ядро''' (англ. ''core'') &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} это подграф [[Основные определения теории графов#finite graph|графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, порожденный объединением таких независимых множеств &amp;lt;tex&amp;gt;Y \subset E(G)&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;|Y| = \alpha_{0}(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha_{0}(G)&amp;lt;/tex&amp;gt; {{---}} число вершинного покрытия.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
Множество [[Основные определения теории графов#def_graph_edge_1|ребер]] (вершин) называется '''независимым''' (англ. ''independent''), если никакие его два элемента не смежны.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def_3&lt;br /&gt;
|definition=&lt;br /&gt;
'''Вершинным покрытием''' (англ. ''vertex cover'') графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется такое множество &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; его вершин, что у любого ребра в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; хотя бы одна из вершин лежит в &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
'''Числом вершинного покрытия''' (англ. ''point-covering number'') называется число вершин в наименьшем вершинном покрытии графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Критерий существования реберного ядра==&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
Наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с множеством вершин &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; называется '''внешним''' (англ. ''external vertex cover''), если для любого подмножества &amp;lt;tex&amp;gt;M' \subseteq M&amp;lt;/tex&amp;gt; выполняется неравенство &amp;lt;tex&amp;gt;|M'| \leqslant |U(M')|&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;U(M') = \{v \mid \:v \in V(G) \setminus  M,  \: vu \in E(G), \: u \in M'\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
}}&lt;br /&gt;
{{Теорема|&lt;br /&gt;
statement=&lt;br /&gt;
Для произвольного графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; следующие утверждения эквивалентны:&lt;br /&gt;
(1) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет не пустое рёберное ядро. &amp;lt;br&amp;gt;&lt;br /&gt;
(2) &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет внешнее наименьшее вершинное покрытие.&lt;br /&gt;
(3) каждое наименьшее вершинное покрытие для &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является внешним.&lt;br /&gt;
|proof=&lt;br /&gt;
Обозначим минимальное вершинное покрытие &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;U = V(G) \setminus M&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(1) \Rightarrow (3)&amp;lt;/tex&amp;gt;. Предположим, что в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, которое не является внешним.&lt;br /&gt;
Это значит что &amp;lt;tex&amp;gt;\exists M' : \:  M' = \{u_1, \dots,   u_r \}, &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;r \leqslant \alpha_0(G)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
такое что &amp;lt;tex&amp;gt;|M'| &amp;gt; |U(M')|.&amp;lt;/tex&amp;gt; Пусть &amp;lt;tex&amp;gt;U(M') = \{u_1, \dots, u_t\}, \: t &amp;lt; r&amp;lt;/tex&amp;gt;. Так же, пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; {{---}} максимальное независимое множество ребер в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Поскольку никакие две вершины &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; не смежны, каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено, по крайней мере, с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Если какое-нибудь ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; соединено более чем с одной ввершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|X| &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C_1(G) = \varnothing &amp;lt;/tex&amp;gt;. Так что будем считать, что каждое ребро из &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; смежно ровно с одной вершиной из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Из этого сдедует, что &amp;lt;tex&amp;gt;|X| \leqslant t - r + \alpha_0(g) &amp;lt; \alpha_0(G)&amp;lt;/tex&amp;gt;. И снова &amp;lt;tex&amp;gt;C_1(G) = \varnothing&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Следствие &amp;lt;tex&amp;gt;(3) \Rightarrow (2)&amp;lt;/tex&amp;gt; {{---}} очевидно. &amp;lt;br&amp;gt;&lt;br /&gt;
Докажем &amp;lt;tex&amp;gt;(2) \Rightarrow (1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M = \{v_1, \dots, v_s\}&amp;lt;/tex&amp;gt; {{---}} наименьшее внешнее вершинное покрытие. Пусть &amp;lt;tex&amp;gt;Y_i = \{u \mid u \in U, uv_i \in E(G) \}&amp;lt;/tex&amp;gt;. Тогда для любого &amp;lt;tex&amp;gt;k: \:\: 1 \leqslant k \leqslant s&amp;lt;/tex&amp;gt;, объединение любых &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; различных множеств &amp;lt;tex&amp;gt;Y_i&amp;lt;/tex&amp;gt; содержит, по меньшей мере &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; вершин. &lt;br /&gt;
Следовательно, по теореме Холла&amp;lt;ref&amp;gt;Hall, 1935, pp. 26-30.&amp;lt;/ref&amp;gt;, существует множество &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; различных вершин &amp;lt;tex&amp;gt;\{y_1, \dots, y_s\}, \: y_j \in Y_j&amp;lt;/tex&amp;gt;. Следовательно существует набор независимых ребер &amp;lt;tex&amp;gt;y_1v_1, \dots, y_sv_s&amp;lt;/tex&amp;gt;. А значит &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; не может быть пустым.&lt;br /&gt;
}}&lt;br /&gt;
[[Файл:EdgeCore.png|thumb|500px|рис. 1. a) граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt;, б) реберное ядро графа &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; ]]&lt;br /&gt;
В качестве примера рассмотрим граф &amp;lt;tex&amp;gt;H&amp;lt;/tex&amp;gt; изображенный на рис. 1 а). Этот граф имеет два наименьших вершинных покрытия: &amp;lt;tex&amp;gt;M_1 = \{B, E, F\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2 = \{B, E, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;M_1' = M_1&amp;lt;/tex&amp;gt; то &amp;lt;tex&amp;gt;U(M_1') = \{A, C, D, G\}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;M_1'' = \{E, F\}&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;U(M_1'')  =\{C, D, G\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Отсюда &amp;lt;tex&amp;gt;|M_1'| \leqslant |U(M_1')|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|M_1''| \leqslant |U(M_1'')|&amp;lt;/tex&amp;gt;. И это верно для любого подмножества &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие. Значит и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt; {{---}} внешнее покрытие.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Реберное ядро в двудольном графе==&lt;br /&gt;
Здесь и далее будем рассматривать [[Двудольные графы|двудольный граф]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, в котором обозначим &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} множество вершин левой доли, &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество вершин правой доли.&lt;br /&gt;
{{Определение |&lt;br /&gt;
definition= &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''полунесводимый граф''' (англ. ''semi-irreducible graph''), если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет ровно одно вершинное покрытие &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, такое что или &amp;lt;tex&amp;gt;M \cap S&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;M \cap T&amp;lt;/tex&amp;gt; {{---}} пусто&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition= &lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''несводимый''' граф (англ. ''irreducible graph''), если он имеет ровно два наименьших вершинных покрытия &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M_2&amp;lt;/tex&amp;gt;, таких что либо &amp;lt;tex&amp;gt;M_1 \cap S \cup M_2 \cap T = \varnothing &amp;lt;/tex&amp;gt;, либо &amp;lt;tex&amp;gt;M_2 \cap S \cup M_1 \cap T = \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение|&lt;br /&gt;
definition=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} '''сводимый граф''' (англ. ''reducible graph'') если он не является ни полунесводимым, ни сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th2|&lt;br /&gt;
statement=&lt;br /&gt;
Если оба конца ребра &amp;lt;tex&amp;gt;w \in E(G)&amp;lt;/tex&amp;gt; покрыто некоторым минимальным вершинным покрытием, то &amp;lt;tex&amp;gt;w \notin C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Сошлемся на теорему &amp;lt;tex&amp;gt;(3)&amp;lt;/tex&amp;gt; аналогичного результата&amp;lt;ref&amp;gt;A. L. Dulmage and N. S. Mendelsohn, 1958, pp. 517-534.&amp;lt;/ref&amp;gt; для двудольных графов. То же самое доказательство можно перенести на произвольный граф.&lt;br /&gt;
}}&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 1&lt;br /&gt;
|statement=Eсли &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет минимальное вершинное покрытие, которое не является независимым, то  &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ Утверждение&lt;br /&gt;
|about=Следствие 2&lt;br /&gt;
|id=proposal2&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} сводимый связный двудольный граф, то &amp;lt;tex&amp;gt;G \neq C_1(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Теорема|&lt;br /&gt;
id=th3|&lt;br /&gt;
statement=&lt;br /&gt;
Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; имеет непустое реберное ядро, то &amp;lt;tex&amp;gt;C_1(G) \supset G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_1(C_1(G)) = C_1(G)&amp;lt;/tex&amp;gt;, а компоненты &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; являются несводимыми или полунесводимыми двудольными подграфами &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=th4&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; и его реберное ядро &amp;lt;tex&amp;gt;C_1(G)&amp;lt;/tex&amp;gt; совпадают тогда и только тогда, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является двудольным и не является сводимым.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
Рассмотрим двудольные графы &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, изображенные на рисунке. В графе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;T_1 = \{v_1, v_2, v_4, v_5, v_7 \}&amp;lt;/tex&amp;gt;. Этот граф имеет единственное наименьшее вершинное покрытие &amp;lt;tex&amp;gt;M_1 = \{v_3, v_6\}&amp;lt;/tex&amp;gt; и, поскольку &amp;lt;tex&amp;gt;M_1 об T_1 = пуст&amp;lt;/tex&amp;gt;, он полунесводимый; сдеовательно, он совпадает со своим рёберным графом. В графе &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; пусть &amp;lt;tex&amp;gt;S_2 = \{u_1, u_4, u_5\}&amp;lt;/tex&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[NP-полнота задачи о независимом множестве]]&lt;br /&gt;
* [[Теория Рамсея]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://math.dartmouth.edu/archive/m38s12/public_html/sources/Hall1935.pdf P. Hall, On representatives of subsets, Journal of the London Mathematical Society 10 (1935) pp. 26-30.]&lt;br /&gt;
&lt;br /&gt;
* [https://cms.math.ca/openaccess/cjm/v10/cjm1958v10.0517-0534.pdf A. L. Dulmage and N. S. Mendelsohn: Coverings of bipartite graphs, Canad J. Math., (1958), 517-534.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=66617</id>
		<title>Префикс-функция</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B5%D1%84%D0%B8%D0%BA%D1%81-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F&amp;diff=66617"/>
				<updated>2018-10-29T00:13:08Z</updated>
		
		<summary type="html">&lt;p&gt;Vsklamm: /* Эффективный алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition = '''Префикс-функция''' ''(англ. prefix-function)'' от строки {{---}} массив длин наибольших [[Период_и_бордер,_их_связь#Определения|бордеров]] для каждой позиции этой строки}}&lt;br /&gt;
Здесь и далее считаем, что символы в строках нумеруются с &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Определим префикс-функцию от строки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в позиции &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; следующим образом: &amp;lt;tex&amp;gt;\pi(s, i) = \max\limits_{k = 0 \ldots i - 1} \{k : &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;s[0 \ldots k] = s[i - k \ldots i] \}&amp;lt;/tex&amp;gt;. Если мы не нашли такого &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\pi(s, i)=0&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
==Наивный алгоритм==&lt;br /&gt;
Наивный алгоритм вычисляет префикс-функцию непосредственно по определению, сравнивая префиксы и суффиксы строк. Обозначим длину строки за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Будем считать, что префикс-функция хранится в массиве &amp;lt;tex&amp;gt; p &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
 '''int'''[] prefixFunction('''string''' s):&lt;br /&gt;
      '''int'''[] p = '''int'''[s.length]&lt;br /&gt;
      fill(p, 0)&lt;br /&gt;
      '''for''' i = 0 '''to''' s.length - 1&lt;br /&gt;
          '''for''' k = 0 '''to''' i - 1&lt;br /&gt;
              '''if''' s[0..k] == s[i - k..i]&lt;br /&gt;
                  p[i] = k&lt;br /&gt;
      '''return''' p&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
Рассмотрим строку &amp;lt;tex&amp;gt;abcabcd&amp;lt;/tex&amp;gt;, для которой значение префикс-функции равно &amp;lt;tex&amp;gt;[0,0,0,1,2,3,0]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Шаг || Строка || Значение функции&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; || a || 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt; || ab || 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tex&amp;gt;3&amp;lt;/tex&amp;gt; || abc || 0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tex&amp;gt;4&amp;lt;/tex&amp;gt; || abca || 1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tex&amp;gt;5&amp;lt;/tex&amp;gt; || abcab || 2&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tex&amp;gt;6&amp;lt;/tex&amp;gt; || abcabc || 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tex&amp;gt;7&amp;lt;/tex&amp;gt; || abcabcd || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Время работы===&lt;br /&gt;
Всего &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt; итераций цикла, на каждой из который происходит сравнение строк за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, что дает в итоге &amp;lt;tex&amp;gt;O(n^3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Эффективный алгоритм==&lt;br /&gt;
Вносятся несколько важных замечаний:&lt;br /&gt;
* Заметим, что &amp;lt;tex&amp;gt;p[i + 1] \leqslant p[i] + 1&amp;lt;/tex&amp;gt;. Чтобы показать это, рассмотрим суффикс,оканчивающийся на позиции &amp;lt;tex&amp;gt;i + 1&amp;lt;/tex&amp;gt; и имеющий длину &amp;lt;tex&amp;gt;p[i + 1]&amp;lt;/tex&amp;gt;, удалив из него последний символ, мы получим суффикс, оканчивающийся на позиции &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и имеющий длину &amp;lt;tex&amp;gt;p[i + 1] - 1&amp;lt;/tex&amp;gt;, следовательно неравенство &amp;lt;tex&amp;gt;p[i + 1] &amp;gt; p[i] + 1&amp;lt;/tex&amp;gt; неверно.&lt;br /&gt;
* Избавимся от явных сравнений строк. Пусть мы вычислили &amp;lt;tex&amp;gt;p[i]&amp;lt;/tex&amp;gt;, тогда, если &amp;lt;tex&amp;gt;s[i + 1] = s[p[i]]&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;p[i + 1] = p[i] + 1&amp;lt;/tex&amp;gt;. Если окажется, что &amp;lt;tex&amp;gt;s[i + 1] \ne s[p[i]]&amp;lt;/tex&amp;gt;, то нужно попытаться попробовать подстроку меньшей длины. Хотелось бы сразу перейти к такому [[Период_и_бордер,_их_связь#Определения|бордеру]] наибольшей длины, для этого подберем такое &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;k = p[i] - 1&amp;lt;/tex&amp;gt;. Делаем это следующим образом. За исходное &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; необходимо взять &amp;lt;tex&amp;gt;p[i - 1]&amp;lt;/tex&amp;gt;, что следует из первого пункта. В случае, когда символы &amp;lt;tex&amp;gt;s[k+1]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;s[i]&amp;lt;/tex&amp;gt; не совпадают, &amp;lt;tex&amp;gt;p[k]&amp;lt;/tex&amp;gt; {{---}} следующее потенциальное наибольшее значение &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что видно из рисунка. Последнее утверждение верно, пока &amp;lt;tex&amp;gt;k&amp;gt;0&amp;lt;/tex&amp;gt;, что позволит всегда найти его следующее значение. Если &amp;lt;tex&amp;gt;k=0&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;p[i]=1&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;s[i] = s[1]&amp;lt;/tex&amp;gt; , иначе &amp;lt;tex&amp;gt;p[i]=0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:mprfx.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
 '''int'''[] prefixFunction('''string''' s):&lt;br /&gt;
   p[0] = 0&lt;br /&gt;
   '''for''' i = 1 '''to''' s.length - 1&lt;br /&gt;
       k = p[i - 1]&lt;br /&gt;
       '''while''' k &amp;gt; 0 '''and''' s[i] != s[k]&lt;br /&gt;
           k = p[k - 1]&lt;br /&gt;
       '''if''' s[i] == s[k]&lt;br /&gt;
           k++&lt;br /&gt;
       p[i] = k&lt;br /&gt;
   '''return''' p&lt;br /&gt;
&lt;br /&gt;
===Время работы===&lt;br /&gt;
Время работы алгоритма составит &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. Для доказательства этого нужно заметить, что итоговое количество итераций цикла &amp;lt;tex&amp;gt;\mathrm{while}&amp;lt;/tex&amp;gt; определяет асимптотику алгоритма. Теперь стоит отметить, что &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; увеличивается на каждом шаге не более чем на единицу, значит максимально возможное значение &amp;lt;tex&amp;gt;k = n - 1&amp;lt;/tex&amp;gt;. Поскольку внутри цикла &amp;lt;tex&amp;gt;\mathrm{while}&amp;lt;/tex&amp;gt; значение &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; лишь уменьшается, получается, что &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; не может суммарно уменьшиться больше, чем &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; раз. Значит цикл &amp;lt;tex&amp;gt;\mathrm{while}&amp;lt;/tex&amp;gt; в итоге выполнится не более &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; раз, что дает итоговую оценку времени алгоритма &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Построение префикс-функции по Z-функции==&lt;br /&gt;
=== Постановка задачи ===&lt;br /&gt;
Дан массив с корректной [[Z-функция | Z-функцией]] для строки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, получить за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; массив с префикс-функцией для строки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Описание алгоритма ===&lt;br /&gt;
Пусть Z-функция хранится в массиве &amp;lt;tex&amp;gt;z[0 \ldots n-1]&amp;lt;/tex&amp;gt;. Префикс-функцию будем записывать в массив &amp;lt;tex&amp;gt;p[0 \ldots n-1]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Заметим, что если &amp;lt;tex&amp;gt;z[i] &amp;gt; 0, &amp;lt;/tex&amp;gt; то для всех элементов с индексом &amp;lt;tex&amp;gt;i + j&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;0 \leqslant j &amp;lt; z[i] &amp;lt;/tex&amp;gt;,  значение &amp;lt;tex&amp;gt;p[i + j] &amp;lt;/tex&amp;gt; будет не меньше, чем длина подстроки с &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt; по &amp;lt;tex&amp;gt; i + j&amp;lt;/tex&amp;gt;, что равно &amp;lt;tex&amp;gt;j + 1&amp;lt;/tex&amp;gt; (как изображено на рисунке). &lt;br /&gt;
&lt;br /&gt;
Также заметим, что если мы уже установили в какую-то позицию значение &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt; с позиции &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt;, а потом пытаемся установить значение &amp;lt;tex&amp;gt; j' &amp;lt;/tex&amp;gt; c позиции &amp;lt;tex&amp;gt; i' &amp;lt;/tex&amp;gt;, причём &amp;lt;tex&amp;gt; i &amp;lt; i' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; i + j = i' + j' &amp;lt;/tex&amp;gt;, то изменение с позиции &amp;lt;tex&amp;gt; i' &amp;lt;/tex&amp;gt; только уменьшит значение &amp;lt;tex&amp;gt; p[i + j]&amp;lt;/tex&amp;gt;. Действительно, значение после первого присвоения &amp;lt;tex&amp;gt;p[i + j] = j &amp;gt; j' = p[i' + j']&amp;lt;/tex&amp;gt;. В итоге получаем алгоритм: идем слева направо по массиву &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; и, находясь на позиции &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, пытаемся записать в &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; от позиции &amp;lt;tex&amp;gt;i + z[i] - 1 &amp;lt;/tex&amp;gt; до  &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; значение &amp;lt;tex&amp;gt; j + 1,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; пробегает все значения &amp;lt;tex&amp;gt; 0 \dots z[i] - 1&amp;lt;/tex&amp;gt;, пока не наткнемся на уже инициализированный элемент. Слева от него все значения тоже нет смысла обновлять, поэтому прерываем эту итерацию. &lt;br /&gt;
&lt;br /&gt;
Убедимся, что алгоритм работает за линейное время (см. псевдокод). Каждый элемент устанавливается ровно один раз. Дальше на нем может случиться только &amp;lt;tex&amp;gt;\mathrm{break}&amp;lt;/tex&amp;gt;. Поэтому в итоге внутренний цикл суммарно отработает за количество установленных значений и количество &amp;lt;tex&amp;gt;\mathrm{break}&amp;lt;/tex&amp;gt;. Количество установленных значений {{---}} &amp;lt;tex&amp;gt; n&amp;lt;/tex&amp;gt;. А число &amp;lt;tex&amp;gt;\mathrm{break}&amp;lt;/tex&amp;gt; тоже будет не больше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, так как каждый &amp;lt;tex&amp;gt;\mathrm{break}&amp;lt;/tex&amp;gt; переводит внешний цикл на следующую итерацию, откуда получаем итоговую асимптотику &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
[[Файл:ZP4.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
 '''int'''[] buildPrefixFunctionFromZFunction('''int'''[] z):&lt;br /&gt;
   '''int'''[] p = '''int'''[z.length]&lt;br /&gt;
   fill(p, 0)&lt;br /&gt;
   '''for''' i = 1 '''to''' z.length - 1&lt;br /&gt;
     '''for''' j = z[i] - 1 '''downto''' 0&lt;br /&gt;
       '''if''' p[i + j] &amp;gt; 0 &lt;br /&gt;
         '''break'''&lt;br /&gt;
       '''else'''&lt;br /&gt;
         p[i + j] = j + 1&lt;br /&gt;
   '''return''' p&lt;br /&gt;
&lt;br /&gt;
==Построение строки по префикс-функции==&lt;br /&gt;
===Постановка задачи=== &lt;br /&gt;
Восстановить строку по префикс-функции за &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, считая алфавит неограниченным.&lt;br /&gt;
&lt;br /&gt;
===Описание алгоритма===&lt;br /&gt;
Пусть в массиве &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; хранятся значения префикс-функции, в &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; будет записан ответ. Пойдем по массиву &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; слева направо.&lt;br /&gt;
&lt;br /&gt;
Пусть мы хотим узнать значение &amp;lt;tex&amp;gt;s[i]&amp;lt;/tex&amp;gt;. Для этого посмотрим на значение &amp;lt;tex&amp;gt;p[i]&amp;lt;/tex&amp;gt;: если &amp;lt;tex&amp;gt;p[i] =0&amp;lt;/tex&amp;gt;, тогда в &amp;lt;tex&amp;gt;s[i]&amp;lt;/tex&amp;gt; запишем новый символ, иначе &amp;lt;tex&amp;gt;s[i] = s[p[i] - 1]&amp;lt;/tex&amp;gt;. Обратим внимание, что  &amp;lt;tex&amp;gt;s[p[i] - 1]&amp;lt;/tex&amp;gt; нам уже известно, так как &amp;lt;tex&amp;gt;p[i] - 1 &amp;lt; i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Реализация ===&lt;br /&gt;
 '''string''' buildFromPrefix('''int'''[] p):&lt;br /&gt;
   s = &amp;quot;&amp;quot; &lt;br /&gt;
   '''for''' i = 0 '''to''' p.length - 1&lt;br /&gt;
       '''if''' p[i] == 0     &lt;br /&gt;
           s += new character&lt;br /&gt;
       '''else'''&lt;br /&gt;
           s += s[p[i] - 1]&lt;br /&gt;
   '''return''' s&lt;br /&gt;
&lt;br /&gt;
===Доказательство корректности алгоритма===&lt;br /&gt;
Докажем, что если нам дали корректную префикс-функцию, то наш алгоритм построит строку с такой же префикс-функцией. Также заметим, что строк с такой префикс-функцией может быть много, и алгоритм строит только одну из них.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} данная префикс-функция, строку &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; построил наш алгоритм, &amp;lt;tex&amp;gt; q &amp;lt;/tex&amp;gt; {{---}} массив значений префикс-функции для &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем корректность индукцией по длине массива префикс-функции полученной строки. Для начала заметим, что на предыдущие значения массива &amp;lt;tex&amp;gt; q &amp;lt;/tex&amp;gt; прибавление нового символа не влияет, так как при подсчёте префикс-функции на &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt;-ой позиции рассматриваются символы на позициях не больше &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt;. Поэтому достаточно показать, что очередное значение префикс-функции будет вычислено правильно.&lt;br /&gt;
* База очевидна для строки длины &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Переход: пусть до &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ой позиции мы построили строку, что &amp;lt;tex&amp;gt;p[0 \ldots n - 1] = q[0 \ldots n - 1]&amp;lt;/tex&amp;gt;. Возможны два случая:&lt;br /&gt;
**  &amp;lt;tex&amp;gt;p[n] = 0&amp;lt;/tex&amp;gt;. Тогда мы добавляем новый символ, поэтому &amp;lt;tex&amp;gt;q[n]&amp;lt;/tex&amp;gt; тоже будет равно &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;. &lt;br /&gt;
** &amp;lt;tex&amp;gt;p[n] &amp;gt; 0&amp;lt;/tex&amp;gt;. Бордер строки &amp;lt;tex&amp;gt; s[0 \ldots n - 1] &amp;lt;/tex&amp;gt; имеет длину &amp;lt;tex&amp;gt; p[n-1] = q[n-1] &amp;lt;/tex&amp;gt;. Поэтому если дописать к строке &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; символ &amp;lt;tex&amp;gt; s[q[n] - 1] &amp;lt;/tex&amp;gt;, то бордер нашей новой строки &amp;lt;tex&amp;gt; s[0 \ldots n] &amp;lt;/tex&amp;gt; станет равен &amp;lt;tex&amp;gt; p[n] &amp;lt;/tex&amp;gt;, как можно увидеть на [[Префикс-функция#Эффективный алгоритм | рисунке]].&lt;br /&gt;
&lt;br /&gt;
== Критерий корректности значений префикс-функции ==&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = Дан массив значений префикс-функции некоторой строки &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, необходимо проверить, корректен ли он за &amp;lt;tex&amp;gt;O(|s|)&amp;lt;/tex&amp;gt;. Так же узнать размер минимального алфавита, при котором он корректен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Решение ===&lt;br /&gt;
Если выполняется неравенство &amp;lt;tex&amp;gt;0 \leqslant p[i + 1] \leqslant p[i] + 1&amp;lt;/tex&amp;gt;, то мы можем построить строку из алгоритма выше, значит префикс-функция корректна.&lt;br /&gt;
&lt;br /&gt;
Найдем минимальный алфавит, при котором префикс-функция корректна. Если значение префикс-функции в текущей ячейке больше нуля, буква известна и алфавит не нуждается в добавлении новой буквы. Иначе, необходимо исключить все ранее известные буквы, возвращаясь и проверяя для меньших префиксов. Если все уже известные буквы использованы, понятно что, необходимо добавить новую букву.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
Докажем, что найденнный выше алфавит минимален от противного. Допустим, существует строка, использующая алфавит меньшей мощности. Рассмотрим первое вхождение буквы, которая есть в нашем алфавите, а в их отсутствует. Понятно, что для этого символа префикс-функция равна 0, т.к. мы добавили новую букву. Пройдемся циклом &amp;lt;tex&amp;gt;\mathrm{while}&amp;lt;/tex&amp;gt; по подпрефиксам. Т.к. в меньшем решении буква не новая, то она увеличит подпрефикс и префикс-функция в новой строке будет отличаться от нуля в этом символе, а должна равняться нулю. Противоречие, следовательно не существует алфаивта меньшей мощности, чем найденный алгоритмом выше.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
 '''bool''' is_correct('''int'''[] p):&lt;br /&gt;
   '''for''' i = 0 '''to''' p.length - 1&lt;br /&gt;
       '''if''' i &amp;gt; 0 &amp;amp;&amp;amp; p[i] &amp;gt; p[i - 1] + 1 || p[i] &amp;lt; 0&lt;br /&gt;
           '''return''' '''false'''           &lt;br /&gt;
   '''return''' '''true'''&lt;br /&gt;
&lt;br /&gt;
 '''int''' minimal_alphabet('''int'''[] p):&lt;br /&gt;
   c = 1&lt;br /&gt;
   s[0] = 0&lt;br /&gt;
   '''for''' i = 1 '''to''' p.length - 1&lt;br /&gt;
        '''if''' p[i] == 0&lt;br /&gt;
           '''fill'''(used, false)&lt;br /&gt;
           k = p[i - 1]              &lt;br /&gt;
           '''while''' k &amp;gt; 0&lt;br /&gt;
               used[s[k]] = '''true'''&lt;br /&gt;
               k = p[k - 1]&lt;br /&gt;
           s[i] = -1&lt;br /&gt;
           '''for''' j = 1 '''to''' c&lt;br /&gt;
               '''if''' !used[j]&lt;br /&gt;
                   s[i] = j;&lt;br /&gt;
                   '''break'''&lt;br /&gt;
           '''if''' s[i] == -1&lt;br /&gt;
               s[i] = c++  &lt;br /&gt;
        '''else'''&lt;br /&gt;
           s[i] = s[p[i] - 1]                    &lt;br /&gt;
   '''return''' c&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
*[[Z-функция|Z-функция]]&lt;br /&gt;
*[[Алгоритм Кнута-Морриса-Пратта|Алгоритм Кнута-Морриса-Пратта]]&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
*[[wikipedia:ru:Префикс-функция | Википедия {{---}} Префикс-функция]]&lt;br /&gt;
*[http://e-maxx.ru/algo/prefix_function MAXimal :: algo :: Префикс-функция]&lt;br /&gt;
* Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и анализ. {{---}} 2-е изд. {{---}} М.: Издательский дом «Вильямс», 2007. {{---}} С. 1296 ISBN 978-5-8459-0857-5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Поиск подстроки в строке]]&lt;br /&gt;
[[Категория:Точный поиск]]&lt;/div&gt;</summary>
		<author><name>Vsklamm</name></author>	</entry>

	</feed>