<?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=188.227.78.144&amp;*</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=188.227.78.144&amp;*"/>
		<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/188.227.78.144"/>
		<updated>2026-06-11T17:50:27Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69413</id>
		<title>Логистическая регрессия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69413"/>
				<updated>2019-01-26T12:29:29Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Обоснование */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.&lt;br /&gt;
== Описание ==&lt;br /&gt;
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных &amp;lt;tex&amp;gt;x_1, ... x_n&amp;lt;/tex&amp;gt; на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.&lt;br /&gt;
&lt;br /&gt;
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left&amp;lt;x, w\right&amp;gt;&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left&amp;lt;x, w\right&amp;gt;$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.&lt;br /&gt;
&lt;br /&gt;
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\sigma(z) = \frac1{1+e^{-z}}$ — сигмоидная функция.&lt;br /&gt;
&lt;br /&gt;
== Обоснование ==&lt;br /&gt;
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]&amp;lt;sup&amp;gt;[на 25.01.19 не создан]&amp;lt;/sup&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть&lt;br /&gt;
*выборка прецедентов $\mathrm{X}^l=\{\left(x_1, y_1\right), ... ,\left(x_l, y_l\right)\}$  получена согласно вероятностному распределению с плотностью &lt;br /&gt;
&amp;lt;tex&amp;gt;p\left(x, y\right)=\mathrm{P}_yp_y\left(x\right)=\mathrm{P}\left(y|x\right)p\left(x\right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
где $\mathrm{P}_y$ $-$ ''априорные вероятности'',&lt;br /&gt;
$p_y(x)$ $-$ ''функции правдоподобия'', принадлежащие экспонентному семейству плотностей (т.е. $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ $-$ произвольные функции)&lt;br /&gt;
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$&lt;br /&gt;
*среди признаков есть константа, скажем, $f_0(x) = -1$&lt;br /&gt;
Тогда &lt;br /&gt;
*линейный классификатор является оптимальным байесовским классификатором&lt;br /&gt;
*апостериорные вероятности классов оценивается по формуле &amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Напомним, что оптимальный байесовский классификатор для двух классов выглядит следущим образом:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a\left(x\right)=&lt;br /&gt;
\mathrm{sign}\left(\lambda_+\mathrm{P}\left(+1|x\right)-\lambda_-\mathrm{P}\left(-1|x\right)\right)=&lt;br /&gt;
\mathrm{sign}\left(\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)}-\frac{\lambda_-}{\lambda_+}\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим отношение апостериорных вероятностей классов  &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
и распишем функции правдоподобия, используя экспонентную формулу с параметрами $\theta_y$ и $\delta$:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим получившуюся под экспонентой сумму: &lt;br /&gt;
*$\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle = \langle w, x\rangle$. Вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов(весов) при константных признаках&lt;br /&gt;
*$b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-} = \mathrm{const}\left(x\right)$. Можно считать данные слагаемые аддитивной добавкой к коэффициенту при признаке. Но так как свободные коэффициенты настраиваются по обучающей выборке, вычислять эту добавку не имеет смысла и ее можно включить в $\langle w, x\rangle$.&lt;br /&gt;
&lt;br /&gt;
Таким образом, &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \mathrm{e}^{\langle w, x\rangle}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделяющая поверхность в байесовском решающем правиле определяется уравнением &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
которое равносильно &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Следовательно, разделяющая поверхность линейна и первый пункт теоремы доказан.&lt;br /&gt;
&lt;br /&gt;
Используя [[Формула полной вероятности|формулу полной вероятности]] получаем следующее равенство&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = \sigma\left(+\langle w ,x\rangle\right) + \sigma\left(-\langle w ,x\rangle\right) = 1&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Откуда следует&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right), y = \{-1, +1\}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Таким образом, второй пункт теоремы доказан.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== scikit-learn ====&lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например:&lt;br /&gt;
* '''solver''' $-$ алгоритм, использующийся для оптимизации&lt;br /&gt;
* '''multi_class''' $-$ классификация на 2 или много классов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' LogisticRegression&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение&lt;br /&gt;
 clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
==== [[Примеры кода на Scala#Логистическая регрессия|Пример кода на Scala]] ====&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Вариации регрессии]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Логистическая регрессия] $-$ курс лекций Воронцова&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Logistic_regression Logistic regression] $-$ Wikipedia&lt;br /&gt;
#[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69350</id>
		<title>Логистическая регрессия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69350"/>
				<updated>2019-01-25T05:46:06Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Пример кода на Scala */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.&lt;br /&gt;
== Описание ==&lt;br /&gt;
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных &amp;lt;tex&amp;gt;x_1, ... x_n&amp;lt;/tex&amp;gt; на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.&lt;br /&gt;
&lt;br /&gt;
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left&amp;lt;x, w\right&amp;gt;&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left&amp;lt;x, w\right&amp;gt;$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.&lt;br /&gt;
&lt;br /&gt;
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\sigma(z) = \frac1{1+e^{-z}}$ — сигмоидная функция.&lt;br /&gt;
&lt;br /&gt;
== Обоснование ==&lt;br /&gt;
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]&amp;lt;sup&amp;gt;[на 25.01.19 не создан]&amp;lt;/sup&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть&lt;br /&gt;
* функции правдоподобия (плотности распределения) классов $p_y(x)$ принадлежат экспонентному семейству плотностей $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ — произвольные функции&lt;br /&gt;
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$&lt;br /&gt;
*среди признаков есть константа, скажем, $f_0(x) = -1$&lt;br /&gt;
Тогда &lt;br /&gt;
*линейный классификатор является оптимальным байесовским классификатором&lt;br /&gt;
*апостериорные вероятности классов оценивается по формуле &amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $p_y(x)$ — экспонентные плотности с параметрами $\theta_y$ и $\delta$:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\mathrm{P}_+$ $-$ ''априорные вероятности'', $p_+(x)$ $-$ ''функции правдоподобия''&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
$w=c_+(\delta)\theta_+-c_-(\delta)\theta_- = const(x)$&lt;br /&gt;
&lt;br /&gt;
Здесь вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов при признаках. Все слагаемые под экспонентой, не зависящие от $x$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, x\rangle$.&lt;br /&gt;
&lt;br /&gt;
Следовательно, &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \exp\left(\langle w, x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используя [[Формула полной вероятности|формулу полной вероятности]] &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = 1&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
выразим апостериорные вероятности &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) , \mathrm{P}\left(-1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt; через $\langle w, x\rangle$&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) = \sigma\left(+\langle w ,x\rangle\right) , \mathrm{P}\left(-1|x\right) = \sigma\left(-\langle w ,x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединяя эти два равенства в одно, получаем требуемое: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделяющая поверхность в байесовском решающем правиле определяется уравнением &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
которое равносильно &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Следовательно, разделяющая поверхность линейна.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== scikit-learn ====&lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например:&lt;br /&gt;
* '''solver''' $-$ алгоритм, использующийся для оптимизации&lt;br /&gt;
* '''multi_class''' $-$ классификация на 2 или много классов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' LogisticRegression&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение&lt;br /&gt;
 clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
==== [[Примеры кода на Scala#Логистическая регрессия|Пример кода на Scala]] ====&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Вариации регрессии]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Логистическая регрессия] $-$ курс лекций Воронцова&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Logistic_regression Logistic regression] $-$ Wikipedia&lt;br /&gt;
#[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69349</id>
		<title>Логистическая регрессия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69349"/>
				<updated>2019-01-25T05:45:09Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Пример кода для scikit-learn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.&lt;br /&gt;
== Описание ==&lt;br /&gt;
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных &amp;lt;tex&amp;gt;x_1, ... x_n&amp;lt;/tex&amp;gt; на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.&lt;br /&gt;
&lt;br /&gt;
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left&amp;lt;x, w\right&amp;gt;&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left&amp;lt;x, w\right&amp;gt;$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.&lt;br /&gt;
&lt;br /&gt;
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\sigma(z) = \frac1{1+e^{-z}}$ — сигмоидная функция.&lt;br /&gt;
&lt;br /&gt;
== Обоснование ==&lt;br /&gt;
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]&amp;lt;sup&amp;gt;[на 25.01.19 не создан]&amp;lt;/sup&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть&lt;br /&gt;
* функции правдоподобия (плотности распределения) классов $p_y(x)$ принадлежат экспонентному семейству плотностей $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ — произвольные функции&lt;br /&gt;
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$&lt;br /&gt;
*среди признаков есть константа, скажем, $f_0(x) = -1$&lt;br /&gt;
Тогда &lt;br /&gt;
*линейный классификатор является оптимальным байесовским классификатором&lt;br /&gt;
*апостериорные вероятности классов оценивается по формуле &amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $p_y(x)$ — экспонентные плотности с параметрами $\theta_y$ и $\delta$:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\mathrm{P}_+$ $-$ ''априорные вероятности'', $p_+(x)$ $-$ ''функции правдоподобия''&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
$w=c_+(\delta)\theta_+-c_-(\delta)\theta_- = const(x)$&lt;br /&gt;
&lt;br /&gt;
Здесь вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов при признаках. Все слагаемые под экспонентой, не зависящие от $x$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, x\rangle$.&lt;br /&gt;
&lt;br /&gt;
Следовательно, &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \exp\left(\langle w, x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используя [[Формула полной вероятности|формулу полной вероятности]] &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = 1&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
выразим апостериорные вероятности &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) , \mathrm{P}\left(-1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt; через $\langle w, x\rangle$&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) = \sigma\left(+\langle w ,x\rangle\right) , \mathrm{P}\left(-1|x\right) = \sigma\left(-\langle w ,x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединяя эти два равенства в одно, получаем требуемое: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделяющая поверхность в байесовском решающем правиле определяется уравнением &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
которое равносильно &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Следовательно, разделяющая поверхность линейна.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры кода ==&lt;br /&gt;
==== scikit-learn ====&lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например:&lt;br /&gt;
* '''solver''' $-$ алгоритм, использующийся для оптимизации&lt;br /&gt;
* '''multi_class''' $-$ классификация на 2 или много классов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' LogisticRegression&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение&lt;br /&gt;
 clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
==== [[Примеры кода на Scala # Логистическая регрессия|Пример кода на Scala]] ====&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Вариации регрессии]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Логистическая регрессия] $-$ курс лекций Воронцова&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Logistic_regression Logistic regression] $-$ Wikipedia&lt;br /&gt;
#[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69348</id>
		<title>Логистическая регрессия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69348"/>
				<updated>2019-01-25T05:31:55Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Обоснование */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.&lt;br /&gt;
== Описание ==&lt;br /&gt;
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных &amp;lt;tex&amp;gt;x_1, ... x_n&amp;lt;/tex&amp;gt; на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.&lt;br /&gt;
&lt;br /&gt;
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left&amp;lt;x, w\right&amp;gt;&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left&amp;lt;x, w\right&amp;gt;$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.&lt;br /&gt;
&lt;br /&gt;
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\sigma(z) = \frac1{1+e^{-z}}$ — сигмоидная функция.&lt;br /&gt;
&lt;br /&gt;
== Обоснование ==&lt;br /&gt;
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]&amp;lt;sup&amp;gt;[на 25.01.19 не создан]&amp;lt;/sup&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть&lt;br /&gt;
* функции правдоподобия (плотности распределения) классов $p_y(x)$ принадлежат экспонентному семейству плотностей $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ — произвольные функции&lt;br /&gt;
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$&lt;br /&gt;
*среди признаков есть константа, скажем, $f_0(x) = -1$&lt;br /&gt;
Тогда &lt;br /&gt;
*линейный классификатор является оптимальным байесовским классификатором&lt;br /&gt;
*апостериорные вероятности классов оценивается по формуле &amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $p_y(x)$ — экспонентные плотности с параметрами $\theta_y$ и $\delta$:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\mathrm{P}_+$ $-$ ''априорные вероятности'', $p_+(x)$ $-$ ''функции правдоподобия''&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
$w=c_+(\delta)\theta_+-c_-(\delta)\theta_- = const(x)$&lt;br /&gt;
&lt;br /&gt;
Здесь вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов при признаках. Все слагаемые под экспонентой, не зависящие от $x$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, x\rangle$.&lt;br /&gt;
&lt;br /&gt;
Следовательно, &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \exp\left(\langle w, x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используя [[Формула полной вероятности|формулу полной вероятности]] &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = 1&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
выразим апостериорные вероятности &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) , \mathrm{P}\left(-1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt; через $\langle w, x\rangle$&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) = \sigma\left(+\langle w ,x\rangle\right) , \mathrm{P}\left(-1|x\right) = \sigma\left(-\langle w ,x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединяя эти два равенства в одно, получаем требуемое: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделяющая поверхность в байесовском решающем правиле определяется уравнением &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
которое равносильно &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Следовательно, разделяющая поверхность линейна.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример кода для scikit-learn ==&lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например:&lt;br /&gt;
* '''solver''' $-$ алгоритм, использующийся для оптимизации&lt;br /&gt;
* '''multi_class''' $-$ классификация на 2 или много классов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' LogisticRegression&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение&lt;br /&gt;
 clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Вариации регрессии]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Логистическая регрессия] $-$ курс лекций Воронцова&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Logistic_regression Logistic regression] $-$ Wikipedia&lt;br /&gt;
#[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69347</id>
		<title>Логистическая регрессия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69347"/>
				<updated>2019-01-25T05:30:47Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Обоснование */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.&lt;br /&gt;
== Описание ==&lt;br /&gt;
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных &amp;lt;tex&amp;gt;x_1, ... x_n&amp;lt;/tex&amp;gt; на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.&lt;br /&gt;
&lt;br /&gt;
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left&amp;lt;x, w\right&amp;gt;&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left&amp;lt;x, w\right&amp;gt;$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.&lt;br /&gt;
&lt;br /&gt;
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\sigma(z) = \frac1{1+e^{-z}}$ — сигмоидная функция.&lt;br /&gt;
&lt;br /&gt;
== Обоснование ==&lt;br /&gt;
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]&amp;lt;sup&amp;gt;На 25.01.2019 статья не создана&amp;lt;/sup&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть&lt;br /&gt;
* функции правдоподобия (плотности распределения) классов $p_y(x)$ принадлежат экспонентному семейству плотностей $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ — произвольные функции&lt;br /&gt;
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$&lt;br /&gt;
*среди признаков есть константа, скажем, $f_0(x) = -1$&lt;br /&gt;
Тогда &lt;br /&gt;
*линейный классификатор является оптимальным байесовским классификатором&lt;br /&gt;
*апостериорные вероятности классов оценивается по формуле &amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $p_y(x)$ — экспонентные плотности с параметрами $\theta_y$ и $\delta$:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\mathrm{P}_+$ $-$ ''априорные вероятности'', $p_+(x)$ $-$ ''функции правдоподобия''&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
$w=c_+(\delta)\theta_+-c_-(\delta)\theta_- = const(x)$&lt;br /&gt;
&lt;br /&gt;
Здесь вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов при признаках. Все слагаемые под экспонентой, не зависящие от $x$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, x\rangle$.&lt;br /&gt;
&lt;br /&gt;
Следовательно, &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \exp\left(\langle w, x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используя [[Формула полной вероятности|формулу полной вероятности]] &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = 1&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
выразим апостериорные вероятности &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) , \mathrm{P}\left(-1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt; через $\langle w, x\rangle$&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) = \sigma\left(+\langle w ,x\rangle\right) , \mathrm{P}\left(-1|x\right) = \sigma\left(-\langle w ,x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединяя эти два равенства в одно, получаем требуемое: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделяющая поверхность в байесовском решающем правиле определяется уравнением &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
которое равносильно &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Следовательно, разделяющая поверхность линейна.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример кода для scikit-learn ==&lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например:&lt;br /&gt;
* '''solver''' $-$ алгоритм, использующийся для оптимизации&lt;br /&gt;
* '''multi_class''' $-$ классификация на 2 или много классов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' LogisticRegression&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение&lt;br /&gt;
 clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Вариации регрессии]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Логистическая регрессия] $-$ курс лекций Воронцова&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Logistic_regression Logistic regression] $-$ Wikipedia&lt;br /&gt;
#[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69208</id>
		<title>Логистическая регрессия</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F&amp;diff=69208"/>
				<updated>2019-01-24T15:46:01Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
'''Логистическая регрессия''' (англ. ''logistic regression'') — метод построения линейного классификатора, позволяющий оценивать апостериорные вероятности принадлежности объектов классам.&lt;br /&gt;
== Описание ==&lt;br /&gt;
Логистическая регрессия применяется для прогнозирования вероятности возникновения некоторого события по значениям множества признаков. Для этого вводится зависимая переменная $y$, принимающая значения $0$ и $1$ и множество [[Независимые случайные величины|независимых]] переменных &amp;lt;tex&amp;gt;x_1, ... x_n&amp;lt;/tex&amp;gt; на основе значений которых требуется вычислить вероятность принятия того или иного значения зависимой переменной.&lt;br /&gt;
&lt;br /&gt;
Итак, пусть объекты задаются $n$ числовыми признаками $f_j : X \to R, j = 1 ... n$ и пространство признаковых описаний в таком случае $X = R^n$. Пусть $Y$ $-$ конечное множество меток классов и задана обучающая выборка пар «объект-ответ» &amp;lt;tex&amp;gt;X^m = \{(x_1,y_1),\dots,(x_m,y_m)\}.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случай двух классов: $Y = \{-1, +1\}$. В логистической регрессии строится линейный алгоритм классификации $a: X \to Y$ вида &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;a(x, w) = \mathrm{sign}\left(\sum\limits_{j=1}^n w_j f_j(x) - w_0 \right)=\mathrm{sign}\left&amp;lt;x, w\right&amp;gt;&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $w_j$ $-$ вес $j$-го признака, $w_0$ $-$ порог принятия решения, $w=\left(w_0, ..., w_n\right)$ $-$ вектор весов, $\left&amp;lt;x, w\right&amp;gt;$ $-$ скалярное произведение признакового описания объекта на вектор весов. Предполагается, что искусственно введён нулевой признак: $f_{0}(x)=-1$.&lt;br /&gt;
&lt;br /&gt;
Задача обучения линейного классификатора заключается в том, чтобы по выборке  $X^m$ настроить вектор весов $w$. В логистической регрессии для этого решается задача минимизации эмпирического риска с функцией потерь специального вида: &amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;Q(w) = \sum\limits_{i=1}^m \ln\left( 1 + \exp( -y_i \langle x_i,w \rangle ) \right) \to \min_{w}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После того, как решение $w$ найдено, становится возможным не только вычислять классификацию $a(x) = \mathrm{sign}\langle x,w \rangle$ для произвольного объекта $x$, но и оценивать апостериорные вероятности его принадлежности классам:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\sigma(z) = \frac1{1+e^{-z}}$ — сигмоидная функция.&lt;br /&gt;
&lt;br /&gt;
== Обоснование ==&lt;br /&gt;
'''С точки зрения [[Байесовский классификатор|байесовского классификатора]]'''&lt;br /&gt;
&lt;br /&gt;
Наиболее строгое обоснование логистической регрессии опирается на следующую теорему&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть&lt;br /&gt;
* функции правдоподобия (плотности распределения) классов $p_y(x)$ принадлежат экспонентному семейству плотностей $p_y(x) = \exp \left( \langle\theta,x\rangle \cdot a(\delta) + b(\delta,\theta) + d(x,\delta) \right)$, где $a, b, d$ — произвольные функции&lt;br /&gt;
*функции правдоподобия имеют равные знаения параметра разброса $\delta$ и отличаются только значениями параметра сдвига $\theta_y$&lt;br /&gt;
*среди признаков есть константа, скажем, $f_0(x) = -1$&lt;br /&gt;
Тогда &lt;br /&gt;
*линейный классификатор является оптимальным байесовским классификатором&lt;br /&gt;
*апостериорные вероятности классов оценивается по формуле &amp;lt;tex&amp;gt;\mathbb{P}\{y|x\} = \sigma\left( y \langle x,w \rangle\right),\;\; y\in Y&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим отношение апостериорных вероятностей классов и воспользуемся тем, что $p_y(x)$ — экспонентные плотности с параметрами $\theta_y$ и $\delta$:&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)}&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
где $\mathrm{P}_+$ $-$ ''априорные вероятности'', $p_+(x)$ $-$ ''функции правдоподобия''&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P_+}p_+(x)}{\mathrm{P}_-p_-(x)} = \exp\left(\langle\left(c_+(\delta)\theta_+-c_-(\delta)\theta_-\right), x\rangle+b_+(\delta, \theta_+)-b_-(\delta, \theta_-) + \ln\frac{\mathrm{P}_+}{\mathrm{P}_-}\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
$w=c_+(\delta)\theta_+-c_-(\delta)\theta_- = const(x)$&lt;br /&gt;
&lt;br /&gt;
Здесь вектор $w$ не зависит от $x$ и является вектором свободных коэффициентов при признаках. Все слагаемые под экспонентой, не зависящие от $x$, можно считать аддитивной добавкой к коэффициенту при константном признаке. Поскольку свободные коэффициенты настраиваются по обучающей выборке, вычислять эту аддитивную добавку нет никакого смысла, и её можно включить в $\langle w, x\rangle$.&lt;br /&gt;
&lt;br /&gt;
Следовательно, &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\frac{\mathrm{P}\left(+1|x\right)}{\mathrm{P}\left(-1|x\right)} = \exp\left(\langle w, x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используя [[Формула полной вероятности|формулу полной вероятности]] &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) + \mathrm{P}\left(-1|x\right) = 1&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
выразим апостериорные вероятности &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) , \mathrm{P}\left(-1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt; через $\langle w, x\rangle$&lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(+1|x\right) = \sigma\left(+\langle w ,x\rangle\right) , \mathrm{P}\left(-1|x\right) = \sigma\left(-\langle w ,x\rangle\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединяя эти два равенства в одно, получаем требуемое: &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\mathrm{P}\left(y|x\right)=\sigma\left(\langle w, x\rangle y\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разделяющая поверхность в байесовском решающем правиле определяется уравнением &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\lambda_- \mathrm{P}\left(-1|x\right) = \lambda_+ \mathrm{P}\left(+1|x\right)&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
которое равносильно &lt;br /&gt;
&amp;lt;center&amp;gt;&amp;lt;tex&amp;gt;\langle w, x\rangle - \ln\frac{\lambda_-}{\lambda_+} = 0&amp;lt;/tex&amp;gt;&amp;lt;/center&amp;gt;&lt;br /&gt;
Следовательно, разделяющая поверхность линейна.&lt;br /&gt;
}}&lt;br /&gt;
== Пример кода для scikit-learn ==&lt;br /&gt;
Классификатор [https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.'''LogisticRegression'''] имеет несколько параметров, например:&lt;br /&gt;
* '''solver''' $-$ алгоритм, использующийся для оптимизации&lt;br /&gt;
* '''multi_class''' $-$ классификация на 2 или много классов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Импортируем нужные библиотеки&lt;br /&gt;
 '''from''' sklearn.linear_model '''import''' LogisticRegression&lt;br /&gt;
 '''from''' sklearn '''import''' datasets&lt;br /&gt;
 '''from''' sklearn.model_selection '''import''' train_test_split&lt;br /&gt;
&lt;br /&gt;
* Выберем тренировочное и тестовое множества&lt;br /&gt;
 iris = datasets.'''load_iris()'''&lt;br /&gt;
 &lt;br /&gt;
 X = iris.data&lt;br /&gt;
 y = iris.target&lt;br /&gt;
 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size='''0.3''')&lt;br /&gt;
&lt;br /&gt;
* Обучение&lt;br /&gt;
 clf = LogisticRegression(random_state='''0''', solver='lbfgs', multi_class='multinomial')&lt;br /&gt;
 model = clf.'''fit'''(X_train, y_train)&lt;br /&gt;
&lt;br /&gt;
* Предсказание&lt;br /&gt;
 y_pred = model.'''predict'''(X_test)&lt;br /&gt;
 model.'''score'''(X_test, y_test)&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Байесовская классификация]]&lt;br /&gt;
* [[Линейная регрессия]]&lt;br /&gt;
* [[Вариации регрессии]]&lt;br /&gt;
* [[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
* [[Общие понятия]]&lt;br /&gt;
* [[Уменьшение размерности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%BE%D0%B3%D0%B8%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D1%80%D0%B5%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D1%8F Логистическая регрессия] $-$ курс лекций Воронцова&lt;br /&gt;
#[https://en.wikipedia.org/wiki/Logistic_regression Logistic regression] $-$ Wikipedia&lt;br /&gt;
#[https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html sklearn.linear_model.LogisticRegression] $-$ реализация алгоритма на scikit-learn.org&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A5%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%87%D0%BB%D0%B5%D0%BD&amp;diff=62133</id>
		<title>Хроматический многочлен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A5%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%87%D0%BB%D0%B5%D0%BD&amp;diff=62133"/>
				<updated>2017-11-02T21:54:47Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Хроматический многочлен колеса */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Пусть дан фиксированный граф &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;x&amp;lt;/tex&amp;gt; — [[Раскраска графа|раскраски графа]] &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; называется '''хроматическим многочленом''' (англ. ''chromatic polynomial''). Обозначение: &amp;lt;tex&amp;gt;P(G,x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Рекуррентные формулы для хроматических многочленов ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Стягивание ребра''' (англ. ''edge contraction'') — замена концов ребра одной вершиной, соседями новой вершины становятся соседи этих концов. Будем обозначать за &amp;lt;tex&amp;gt;G/uv&amp;lt;/tex&amp;gt; граф, полученный из графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; стягиванием ребра &amp;lt;tex&amp;gt;uv&amp;lt;/tex&amp;gt;.}}&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&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;G&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;G_1=G\cup uv&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;G_2=G/uv&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;P(G,x)=P(G_1,x)+P(G_2,x)&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;u&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;uv&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;G&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;.&lt;br /&gt;
}}&lt;br /&gt;
'''Замечание:'''&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;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&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;G&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;G_1=G\backslash uv&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2=G/uv&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;P(G,x)=P(G_1,x)-P(G_2,x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Следует из предыдущей теоремы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Примеры хроматических многочленов ==&lt;br /&gt;
=== Хроматический многочлен полного графа ===&lt;br /&gt;
&amp;lt;tex&amp;gt;P(K_{n},x)=x(x-1)...(x-n+1)=x^{\underline{n}}&amp;lt;/tex&amp;gt;, так как первую вершину полного графа &amp;lt;tex&amp;gt;K_{n}&amp;lt;/tex&amp;gt; можно окрасить в любой из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; цветов, вторую — в любой из оставшихся &amp;lt;tex&amp;gt;x-1&amp;lt;/tex&amp;gt; цветов и т. д. Очевидно, что если &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, то и многочлен равен &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, так как один из его множителей &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Хроматический многочлен нуль-графа ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Нуль-граф''' (пустой граф, вполне несвязный граф; англ. ''null graph'', ''empty graph'', ''edgeless graph'') — регулярный граф степени &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;, т.е. граф без рёбер.}}&lt;br /&gt;
&amp;lt;tex&amp;gt;P(O_{n},x)=x^{n}&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; можно независимо окрасить в любой из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; цветов.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Примечание:''' Нулевой граф &amp;lt;tex&amp;gt;O_{n}&amp;lt;/tex&amp;gt; также можно обозначать &amp;lt;tex&amp;gt;\overline{K_{n}}&amp;lt;/tex&amp;gt; (дополнительный граф для полного графа &amp;lt;tex&amp;gt;K_{n}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Хроматический многочлен простой цепи ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;T_n&amp;lt;/tex&amp;gt; — простая цепь, состоящая из &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершин. Рассмотрим процесс раскраски простой цепи: первую вершину можно покрасить в один из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; цветов, вторую и последующие в один из &amp;lt;tex&amp;gt;x - 1&amp;lt;/tex&amp;gt; цветов (т.е. так, чтобы цвет не совпадал с предыдущей вершиной). Тогда &amp;lt;tex&amp;gt;P(T_n, x) = x(x - 1) ^ {n - 1}&amp;lt;/tex&amp;gt;.&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;C_n&amp;lt;/tex&amp;gt; — цикл длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Тогда хроматичсекий многочлен цикла &amp;lt;tex&amp;gt;P(C_n, x) = (x - 1)^n + (-1)^n(x - 1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Докажем по индукции по количеству вершин.&amp;lt;br&amp;gt;&lt;br /&gt;
'''База индукции''': рассмотрим случай &amp;lt;tex&amp;gt;n = 3&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;P(C_3, x) = x(x - 1)(x - 2) = (x^3 - 3x^2 + 3x - 1) - (x - 1) = (x - 1)^3 + (-1)^3(x - 1)&amp;lt;/tex&amp;gt;, что удовлетворяет формулировке теоремы.&amp;lt;br&amp;gt;&lt;br /&gt;
'''Индукционный переход''': пусть &amp;lt;tex&amp;gt;P(C_k, x) = (x - 1)^k + (-1)^k(x - 1)&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим случай &amp;lt;tex&amp;gt;n = k + 1&amp;lt;/tex&amp;gt;. По теореме о [[#Рекуррентные_формулы_для_хроматических_многочленов|рекурентной формуле для хроматических многочленов]]: &amp;lt;tex&amp;gt;P(C_{k + 1}, x ) = P(C_{k + 1} \setminus e, x) - P(C_{k + 1} / e, x)&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; — любое ребро &amp;lt;tex&amp;gt;C_{k + 1}&amp;lt;/tex&amp;gt;).&lt;br /&gt;
Заметим, что граф &amp;lt;tex&amp;gt;C_{k + 1} / e&amp;lt;/tex&amp;gt; изоморфен &amp;lt;tex&amp;gt;C_k&amp;lt;/tex&amp;gt;, а граф &amp;lt;tex&amp;gt;C_{k + 1} \setminus e&amp;lt;/tex&amp;gt; является [[#Хроматический_многочлен_простой_цепи|простой цепью]].&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;P(C_{k + 1}, x)=P(T_{k + 1}, x)-P(C_k, x)=x(x-1)^k-(x-1)^k-(-1)^k(x-1)=&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(x-1)^{k+1}+(-1)^{k+1}(x-1)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Хроматический многочлен колеса ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;W_n&amp;lt;/tex&amp;gt; — [[Двойственный_граф_планарного_графа|колесо]] с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами. Выбрав и зафиксировав один из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; цветов на вершине, связнной со всеми остальными, имеем &amp;lt;tex&amp;gt; P(C_{n - 1}, x - 1) &amp;lt;/tex&amp;gt; вариантов раскраски оставшегося графа. Тогда хроматический многочлен колеса &amp;lt;tex&amp;gt;P_{W_n}(x) = x \cdot P_{C_{n - 1}}(x - 1) = x((x - 2)^{(n - 1)} - (-1)^n(x - 2))&amp;lt;/tex&amp;gt;.&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;G&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами является деревом тогда и только тогда, когда &amp;lt;tex&amp;gt;P(G,x)=x(x-1)^{n-1}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Сначала покажем, что хроматический многочлен любого дерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами есть &amp;lt;tex&amp;gt;x(x-1)^{n-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;n=1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n=2&amp;lt;/tex&amp;gt; результат очевиден. Предположим, что &amp;lt;tex&amp;gt;P(T',x)=x(x-1)^{n-2}&amp;lt;/tex&amp;gt; для любого дерева &amp;lt;tex&amp;gt;T'&amp;lt;/tex&amp;gt; с количеством вершин равным &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;uv&amp;lt;/tex&amp;gt; — ребро дерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;, такое что &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; является висячей вершиной. Хроматический многочлен дерева &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; без ребра &amp;lt;tex&amp;gt;uv&amp;lt;/tex&amp;gt; равен &amp;lt;tex&amp;gt;P(T/uv,x)=x(x-1)^{n-2}&amp;lt;/tex&amp;gt; по нашему предположению. Вершину &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; можно окрасить &amp;lt;tex&amp;gt;x-1&amp;lt;/tex&amp;gt; способом, так как её цвет должен только лишь отличаться от цвета вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Итого: &amp;lt;tex&amp;gt;P(T,x)=(x-1)P(T/uv,x)=x(x-1)^{n-1}&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Обратно, пусть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; — граф, у которого &amp;lt;tex&amp;gt;P(G,x)=x(x-1)^{n-1}&amp;lt;/tex&amp;gt;. Тогда верны два следующих утверждения:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;Граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; связен, потому что если было бы две компоненты связности (или больше), то &amp;lt;tex&amp;gt;P(G,x)&amp;lt;/tex&amp;gt; делился бы на &amp;lt;tex&amp;gt;x^2&amp;lt;/tex&amp;gt; без остатка.&amp;lt;br /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;li&amp;gt;В графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; количество рёбер равно &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt;, так как по одной из теорем о коэффициентах хроматического многочлена ([[Хроматический многочлен#Коэффициенты хроматического многочлена|Коэффициенты хроматического многочлена]], теорема 4), количество рёбер в графе соответствует коэффициенту при &amp;lt;tex&amp;gt;x^{n-1}&amp;lt;/tex&amp;gt;, взятому со знаком минус. В нашем случае, этот коэффициент удобно искать, используя бином Ньютона:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;{P(G,x)=x(x-1)^{n-1}=x\left(x^{n-1}-{n-1 \choose 1}x^{n-2}+{n-1 \choose 2}x^{n-3}-...+(-1)^{n-1}\right)=x^{n}-(n-1)x^{n-1}+...+(-1)^{n-1}x}&amp;lt;/tex&amp;gt;&amp;lt;br /&amp;gt; &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
Из этих двух утверждений (связность и &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; ребро) следует, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является деревом (см. [[Дерево, эквивалентные определения]], утверждения 1 и 3).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Коэффициенты хроматического многочлена ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
1&lt;br /&gt;
|statement=&lt;br /&gt;
Свободный член хроматического многочлена равен &amp;lt;tex&amp;gt;0&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;x&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;0&amp;lt;/tex&amp;gt; цветов равно &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;. То есть &amp;lt;tex&amp;gt;P(G,0)=0&amp;lt;/tex&amp;gt;. Из этого следует, что &amp;lt;tex&amp;gt;P(G,x)&amp;lt;/tex&amp;gt; кратен &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, следовательно его свободный член равен &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
2&lt;br /&gt;
|statement=&lt;br /&gt;
Старший коэффициент хроматического многочлена равен &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Воспользуемся рекуррентной формулой:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;P(G,x) = P(G_{1},x) + P(G_{2},x)&amp;lt;/tex&amp;gt;,&amp;lt;br/&amp;gt;&lt;br /&gt;
где &amp;lt;tex&amp;gt;G_{1}&amp;lt;/tex&amp;gt; — граф, полученный из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; добавлением отсутствующего в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; ребра &amp;lt;tex&amp;gt;uv&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;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в одну и удалением возникших при этом кратных ребер.&lt;br /&gt;
Применяя рекуррентную формулу повторно, хроматический полином можно представить в виде суммы хроматических полиномов полных графов, то есть:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;P(G,x) = {P(K_{n},x) + a_{1}P(K_{n-1},x) + a_{2}P(K_{n-2},x) + \ldots = x^{\underline{n}} + a_{1}x^{\underline{n-1}}+a_{2}x^{\underline{n-2}}+\ldots}&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Из этой формулы видно, что хроматический многочлен имеет старший коэффициент, равный  &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
3&lt;br /&gt;
|statement=&lt;br /&gt;
Коэффициенты хроматического многочлена составляют знакопеременную последовательность.&lt;br /&gt;
|proof=&lt;br /&gt;
Индукция по количеству вершин.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''База индукции:'''&amp;lt;br/&amp;gt;&lt;br /&gt;
Теорема верна для графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; из одной вершины, потому что &amp;lt;tex&amp;gt;P(G,x)=x&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Индукционный переход''' (&amp;lt;tex&amp;gt;n \to n+1)&amp;lt;/tex&amp;gt;:&amp;lt;br/&amp;gt;&lt;br /&gt;
Предположим, что теорема верна для всех графов на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинах. Рассмотрим графы на &amp;lt;tex&amp;gt;n+1&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&amp;lt;/tex&amp;gt; не содержит ребер, то есть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;O_{n+1}&amp;lt;/tex&amp;gt;, то его хроматический многочлен &amp;lt;tex&amp;gt;P(G,x)=x^{n+1}&amp;lt;/tex&amp;gt; обладает доказываемым свойством. Теперь предположим, что для всех &amp;lt;tex&amp;gt;(n+1,m)&amp;lt;/tex&amp;gt;-графов теорема верна. Возьмем &amp;lt;tex&amp;gt;(n+1,m+1)&amp;lt;/tex&amp;gt;-граф &amp;lt;tex&amp;gt;G_{1}&amp;lt;/tex&amp;gt; и его ребро &amp;lt;tex&amp;gt;uv&amp;lt;/tex&amp;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;uv&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;G=G_{1}-uv&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;u&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Тогда из рекуррентной формулы следует:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;P(G_{1},x)=P(G,x)-P(G_{2},x)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;(n+1,m)&amp;lt;/tex&amp;gt;-граф, а в &amp;lt;tex&amp;gt;G_{2}&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;n&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;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;{P(G,x)=x^{n+1}-a_{1}x^{n}+a_{2}x^{n-1}-a_{3}x^{n-2}+\ldots}&amp;lt;/tex&amp;gt; ,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;{P(G_{2},x)=x^{n}-b_{1}x^{n-1}+b_{2}x^{n-2}+\ldots}&amp;lt;/tex&amp;gt; ,&amp;lt;br/&amp;gt;&lt;br /&gt;
где &amp;lt;tex&amp;gt;a_{1}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a_{2}&amp;lt;/tex&amp;gt; … &amp;lt;tex&amp;gt;a_{n+1}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;b_{1}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;b_{2}&amp;lt;/tex&amp;gt; … &amp;lt;tex&amp;gt;b_{n}&amp;lt;/tex&amp;gt; — некоторые неотрицательные целые числа. Из этих равенств получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;P(G_{1},x)=x^{n+1}-(a_{1}+1)x^{n}+(a_{2}+b_{1})x^{n-1}+\ldots&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Видно, что в этом полученном полиноме коэффициенты составляют знакопеременную последовательность.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
4&lt;br /&gt;
|statement=&lt;br /&gt;
Второй коэффициент хроматического многочлена равен по модулю количеству ребер графа.&lt;br /&gt;
|proof=&lt;br /&gt;
Из доказательства '''Теоремы (3)''' видно, что при увеличении количества ребер графа на &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;0&amp;lt;/tex&amp;gt;, то утверждение верно для любого графа.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы: Учебное пособие. 2-е изд., испр. и доп. - СПб.: Издательство &amp;quot;Лань&amp;quot;, 2010. - 368 с.: ил. - (Учебники для вузов. Специальная литература). ISBN 978-5-8114-1068-2&lt;br /&gt;
* Харари Ф. — Теория графов: Изд. 4-е. - М.: Книжный дом &amp;quot;ЛИБРОКОМ&amp;quot;, 2009. - 296 с. ISBN 978-5-397-00622-4&lt;br /&gt;
* [[wikipedia:en:Chromatic_polynomial| Wikipedia {{---}} Chromatic polynomial]]&lt;br /&gt;
* [[wikipedia:ru:Хроматическое_число#Хроматический_многочлен| Wikipedia {{---}} Хроматический многочлен]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60692</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60692"/>
				<updated>2017-04-26T15:27:42Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&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 = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле выделено два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; {{---}} подграф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, включающий множество вершин, лежащих на пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
:Так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой, добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. &lt;br /&gt;
:Рассмотрим &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt; {{---}} кратчайший путь из условия, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; {{---}} фиктивная вершина (рис. 1). &lt;br /&gt;
:В таком случае, полное паросочетание {{---}} это набор ребер  &amp;lt;tex&amp;gt;\langle a_i,b_i \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем единственность.&lt;br /&gt;
:Пусть существует другое паросочетание &amp;lt;tex&amp;gt;\langle a_i, b_{j_i} \rangle&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; (так как &amp;lt;tex&amp;gt;j_{i_0} &amp;lt; i_0 &amp;lt;/tex&amp;gt; по определению &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt;) и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; j_{i_0}&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = j_{i_0}&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. &lt;br /&gt;
:Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; j_{i_0}&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&amp;lt;/tex&amp;gt; короче, чем &amp;lt;tex&amp;gt;P&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;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  [[Определение матроида|матроид]]. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Индукция по &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, |A| \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A), (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''База &lt;br /&gt;
: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Переход&lt;br /&gt;
: Пусть верно для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Рассмотрим &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt;. Возьмем произвольную вершину в левой доле. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
:Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;\langle a, b \rangle \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \langle a_i, b_n \rangle \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : \langle y_i, z_j \rangle \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt; \langle y_i, z_i \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. &lt;br /&gt;
:Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;. Tогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : \langle y_i, z_j \rangle \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;. Cледовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
:По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;\langle y_i, z_i \rangle&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;
== Источники информации ==&lt;br /&gt;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60689</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60689"/>
				<updated>2017-04-25T13:25:51Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&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 = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле выделено два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; {{---}} подграф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, включающий множество вершин, лежащих на пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
:Так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой, добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. &lt;br /&gt;
:Рассмотрим &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt; {{---}} кратчайший путь из условия, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; {{---}} фиктивная вершина (рис. 1). &lt;br /&gt;
:В таком случае, полное паросочетание {{---}} это набор ребер  &amp;lt;tex&amp;gt;\langle a_i,b_i \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем единственность.&lt;br /&gt;
:Пусть существует другое паросочетание &amp;lt;tex&amp;gt;\langle a_i, b_{j_i} \rangle&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; j_{i_0}&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = j_{i_0}&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. &lt;br /&gt;
:Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; j_{i_0}&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&amp;lt;/tex&amp;gt; короче, чем &amp;lt;tex&amp;gt;P&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;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  [[Определение матроида|матроид]]. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Индукция по &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, |A| \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A), (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''База &lt;br /&gt;
: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Переход&lt;br /&gt;
: Пусть верно для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Рассмотрим &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt;. Возьмем произвольную вершину в левой доле. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
:Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;\langle a, b \rangle \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \langle a_i, b_n \rangle \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : \langle y_i, z_j \rangle \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt; \langle y_i, z_i \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. &lt;br /&gt;
:Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;. Tогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : \langle y_i, z_j \rangle \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;. Cледовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
:По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;\langle y_i, z_i \rangle&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;
== Источники информации ==&lt;br /&gt;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60682</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60682"/>
				<updated>2017-04-25T07:37:55Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Лемма о единственном паросочетании в графе замен */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&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 = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле выделено два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; {{---}} сужение графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
:Так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой, добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. &lt;br /&gt;
:Рассмотрим &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt; {{---}} кратчайший путь из условия, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; {{---}} фиктивная вершина (рис. 1). &lt;br /&gt;
:В таком случае, полное паросочетание {{---}} это набор ребер  &amp;lt;tex&amp;gt;\langle a_i,b_i \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем единственность.&lt;br /&gt;
:Пусть существует другое паросочетание &amp;lt;tex&amp;gt;\langle a_i, b_{j_i} \rangle&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; j_{i_0}&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = j_{i_0}&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. &lt;br /&gt;
:Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; j_{i_0}&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Индукция по &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''База &lt;br /&gt;
: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Переход&lt;br /&gt;
: Пусть верно для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Рассмотрим &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt;. Возьмем произвольную вершину в левой доле. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
:Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;\langle a, b \rangle \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \langle a_i, b_n \rangle \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : \langle y_i, z_j \rangle \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt; \langle y_i, z_i \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. &lt;br /&gt;
:Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;. Tогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : \langle y_i, z_j \rangle \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;. Cледовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
:По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;\langle y_i, z_i \rangle&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;
== Источники информации ==&lt;br /&gt;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60681</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60681"/>
				<updated>2017-04-25T07:30:24Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&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 = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле выделено два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; {{---}} сужение графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;. Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
:Так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой, добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. &lt;br /&gt;
:Рассмотрим &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt; {{---}} кратчайший путь из условия, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; {{---}} фиктивная вершина (рис. 1). &lt;br /&gt;
:В таком случае, полное паросочетание {{---}} это набор ребер  &amp;lt;tex&amp;gt;\langle a_i,b_i \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем единственность.&lt;br /&gt;
:Пусть существует другое паросочетание &amp;lt;tex&amp;gt;\langle a_i, b_{j_i} \rangle&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; j_{i_0}&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = j_{i_0}&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. &lt;br /&gt;
:Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; j_{i_0}&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Индукция по &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''База &lt;br /&gt;
: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Переход&lt;br /&gt;
: Пусть верно для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Рассмотрим &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt;. Возьмем произвольную вершину в левой доле. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
:Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;\langle a, b \rangle \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \langle a_i, b_n \rangle \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60645</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60645"/>
				<updated>2017-04-13T18:07:38Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&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 = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Индукция по &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''База &lt;br /&gt;
: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Переход&lt;br /&gt;
: Пусть верно для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Рассмотрим &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt;. Возьмем произвольную вершину в левой доле. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
:Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;\langle a, b \rangle \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \langle a_i, b_n \rangle \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60644</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60644"/>
				<updated>2017-04-13T18:04:17Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&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 = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Индукция по &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''База &lt;br /&gt;
: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Переход&lt;br /&gt;
: Пусть верно для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Рассмотрим &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt;. Возьмем произвольную вершину в левой доле. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
:Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;\langle a, b \rangle \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \langle a_i, b_n \rangle \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \oplus B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60643</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60643"/>
				<updated>2017-04-13T15:24:38Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Также существует граф замен для одного матроида.  &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Пусть дан матроид (англ ''matroid'') &amp;lt;tex&amp;gt;M = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Индукция по &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* '''База &lt;br /&gt;
: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* '''Переход&lt;br /&gt;
: Пусть верно для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
: Рассмотрим &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt;. Возьмем произвольную вершину в левой доле. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
:Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;\langle a, b \rangle \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt; \langle a_i, b_n \rangle \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \oplus B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60642</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60642"/>
				<updated>2017-04-13T15:16:53Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Также существует граф замен для одного матроида.  &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Пусть дан матроид (англ ''matroid'') &amp;lt;tex&amp;gt;M = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Докажем по индукции для &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
:При &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt; имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть верно для &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
:По [[Теорема о базах|сильной теореме о базах]]: &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Из этого следует, что множества &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. Заметим, что  &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1 &amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Индукционный переход доказан.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* База&lt;br /&gt;
*: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* Переход&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt; (для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt; утверждение верно). Возьмем произвольную вершину в левой доли. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;(ab) \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;(a_i b_n) \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \oplus B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60641</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60641"/>
				<updated>2017-04-13T05:22:14Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Также существует граф замен для одного матроида.  &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Пусть дан матроид (англ ''matroid'') &amp;lt;tex&amp;gt;M = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Докажем по индукции для &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
: В случае, когда &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt;, имеем пустое паросочетание. &lt;br /&gt;
&lt;br /&gt;
* '''Переход&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt; — верно.&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. По [[Теорема о базах|сильной теореме о базах]] &lt;br /&gt;
:&amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; из этого следует, что множество &amp;lt;tex&amp;gt;A' = (A \setminus x) \cup y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = (B \cup x) \setminus y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. И их &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Значит мы умеем переходить от &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1&amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) \Rightarrow (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;, а значит индукционный переход справедлив.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* База&lt;br /&gt;
*: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* Переход&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt; (для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt; утверждение верно). Возьмем произвольную вершину в левой доли. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;(ab) \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;(a_i b_n) \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \oplus B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60640</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60640"/>
				<updated>2017-04-13T05:01:54Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Также существует граф замен для одного матроида.  &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Пусть дан матроид (англ ''matroid'') &amp;lt;tex&amp;gt;M = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Докажем по индукции для &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
*: В случае, когда &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt;, имеем пустое паросочетание. &lt;br /&gt;
* '''Переход&lt;br /&gt;
*:Считаем, что  утверждение &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt; — верно.&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
*:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. По [[Теорема о базах|сильной теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; из этого следует, что множество &amp;lt;tex&amp;gt;A' = A - x + y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = B + x - y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. И их &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Значит мы умеем переходить от &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1&amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
*:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) \Rightarrow (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;, а значит индукционный переход справедлив.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* База&lt;br /&gt;
*: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* Переход&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt; (для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt; утверждение верно). Возьмем произвольную вершину в левой доли. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;(ab) \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;(a_i b_n) \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \oplus B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60639</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60639"/>
				<updated>2017-04-13T05:01:33Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Также существует граф замен для одного матроида.  &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Пусть дан матроид (англ ''matroid'' &amp;lt;tex&amp;gt;M = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Докажем по индукции для &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
*: В случае, когда &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt;, имеем пустое паросочетание. &lt;br /&gt;
* '''Переход&lt;br /&gt;
*:Считаем, что  утверждение &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt; — верно.&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
*:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. По [[Теорема о базах|сильной теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; из этого следует, что множество &amp;lt;tex&amp;gt;A' = A - x + y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = B + x - y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. И их &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Значит мы умеем переходить от &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1&amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
*:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) \Rightarrow (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;, а значит индукционный переход справедлив.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* База&lt;br /&gt;
*: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* Переход&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt; (для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt; утверждение верно). Возьмем произвольную вершину в левой доли. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;(ab) \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;(a_i b_n) \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \oplus B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60638</id>
		<title>Граф замен</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D1%80%D0%B0%D1%84_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD&amp;diff=60638"/>
				<updated>2017-04-13T04:59:31Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Граф замен''' (англ ''exchange graph'') {{---}} специальный [[Основные определения теории графов|ориентированный двудольный граф]], фигурирующий в [[Теорема Эдмондса-Лоулера|теореме Эдмондса-Лоулера]].&lt;br /&gt;
&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;,  множество &amp;lt;tex&amp;gt;(\mathcal{I}_1 \cap \mathcal{I}_2)&amp;lt;/tex&amp;gt;. Введем граф замен. &lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Граф замен для двух матроидов''' &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; {{---}} граф, левой долей которого являются элементы множества &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, правой — все остальные элементы &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; и в котором проведены ребра &amp;lt;tex&amp;gt;(y, z): y \in I,  z \in S \setminus I,  I \setminus y \cup z \in \mathcal{I}_1&amp;lt;/tex&amp;gt;, а также &amp;lt;tex&amp;gt;(z', y'): y' \in I, z' \in S \setminus I, I \setminus y' \cup z' \in \mathcal{I}_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}, P&amp;lt;/tex&amp;gt; — кратчайший путь в &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Тогда [[Алгоритм построения базы в пересечении матроидов|алгоритм]] с помощью этого пути либо определяет максимальность набора &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt;, либо позволяет найти набор большей мощности.&lt;br /&gt;
[[Файл:Graph_DY.png|400px|thumb|center|Граф замен &amp;lt;tex&amp;gt;D_{M_1, M_2}(I)&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 = (S, \mathcal{I})&amp;lt;/tex&amp;gt; и независимый сет &amp;lt;tex&amp;gt;I \in \mathcal{I}&amp;lt;/tex&amp;gt;. Тогда '''граф замен''' &amp;lt;tex&amp;gt;D_{M}(I)&amp;lt;/tex&amp;gt; (или просто &amp;lt;tex&amp;gt;D(I)&amp;lt;/tex&amp;gt;) {{---}} это двудольный граф с долями &amp;lt;tex&amp;gt;I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S \setminus I&amp;lt;/tex&amp;gt; с рёбрами между &amp;lt;tex&amp;gt;y \in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x \in S \setminus I&amp;lt;/tex&amp;gt; если &amp;lt;tex&amp;gt; I - y + x \in \mathcal{I} &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма &lt;br /&gt;
|id= ==lemma==&lt;br /&gt;
|about=о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем&lt;br /&gt;
|statement =&lt;br /&gt;
Пусть дан двудольный граф замен. В его правой доле можно выделить два подмножества вершин &amp;lt;tex&amp;gt;X_1 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_1 \}, X_2 = \{z \in S \setminus I \mid I \cup z \in \mathcal{I}_2 \}&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;X_1&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;X_2&amp;lt;/tex&amp;gt;. Рассмотрим сужение &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; на множество вершин, лежащих в пути &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;Тогда в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; существует единственное [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|полное паросочетание]].&lt;br /&gt;
|proof =&lt;br /&gt;
[[Файл:Граф_индуцированный_кратчайшим_путем.png | thumb | left | Рис. 1]]&lt;br /&gt;
[[Файл:Фрагмент_паросочетания.png‎ | thumb | right | Рис. 2]]&lt;br /&gt;
Строго говоря, утверждение теоремы не совсем корректно, так как в правой доле полученного графа &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; вершин на одну больше, чем в левой. Поэтому добавим в &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; фиктивную вершину и отнесем ее к левой доле. Пусть путь &amp;lt;tex&amp;gt;P = (a_1, b_1, a_2, b_2, \ldots , a_k, b_k)&amp;lt;/tex&amp;gt;, где  &amp;lt;tex&amp;gt;a_1&amp;lt;/tex&amp;gt; — фиктивная вершина (рис. 1). &lt;br /&gt;
&lt;br /&gt;
Существование полного паросочетания очевидно — это ребра  &amp;lt;tex&amp;gt;(a_i,b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Предположим, что существует другое паросочетание &amp;lt;tex&amp;gt;(a_i, b_{j_i})&amp;lt;/tex&amp;gt;. Тогда пусть &amp;lt;tex&amp;gt;i_0 = \min \{ i \: \mid \: j_i &amp;lt; i \}&amp;lt;/tex&amp;gt;. Обозначим &amp;lt;tex&amp;gt;j_{i_0}&amp;lt;/tex&amp;gt; как &amp;lt;tex&amp;gt;i_1&amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;i_1 &amp;lt; i_0&amp;lt;/tex&amp;gt; и поэтому не может быть &amp;lt;tex&amp;gt;j_{i_1} &amp;lt; i_1&amp;lt;/tex&amp;gt;, ведь &amp;lt;tex&amp;gt;i_0&amp;lt;/tex&amp;gt; — минимальное из соответствующего множества. Так же невозможно &amp;lt;tex&amp;gt;j_{i_1} = i_1&amp;lt;/tex&amp;gt;, поскольку тогда &amp;lt;tex&amp;gt;a_{i_0}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{i_1}&amp;lt;/tex&amp;gt; имели бы одинаковую пару. Следовательно, &amp;lt;tex&amp;gt;j_{i_1} &amp;gt; i_1&amp;lt;/tex&amp;gt; (рис. 2). Это значит, что существует путь &amp;lt;tex&amp;gt;P_1 = (a_1, b_1, \ldots, a_{i_1}, b_{j_{i_1}}, a_{j_{i_1} + 1}, \ldots, a_k, b_k )&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;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о паросочетании в графе замен&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;M = \langle X,\mathcal{I} \rangle &amp;lt;/tex&amp;gt; &amp;amp;mdash;  матроид. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt; {{---}} независимы, причем &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда двудольный граф &amp;lt;tex&amp;gt;D_{M}(\mathcal{I})&amp;lt;/tex&amp;gt;  содержит полное паросочетание на &amp;lt;tex&amp;gt;A \bigtriangleup B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
&lt;br /&gt;
Докажем по индукции для &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* '''База &lt;br /&gt;
*: В случае, когда &amp;lt;tex&amp;gt;|A \bigtriangleup B| = 0 &amp;lt;/tex&amp;gt;, имеем пустое паросочетание. &lt;br /&gt;
* '''Переход&lt;br /&gt;
*:Считаем, что  утверждение &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N&amp;lt;/tex&amp;gt; — верно.&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;k = |A| = |B|&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A \bigtriangleup B| \geqslant 1&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
*:Рассмотрим матроид &amp;lt;tex&amp;gt;M_1 = \langle X, \{ A \mid A \in \mathcal{I}, A \leqslant k \} \rangle&amp;lt;/tex&amp;gt;. Множества &amp;lt;tex&amp;gt;A, B \in \mathcal{I}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt; и матроид &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt; не содержит множеств больших, чем &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, а значит они являются базами для матроида &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. По [[Теорема о базах|сильной теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y \in \mathcal{I}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \setminus y) \cup x \in \mathcal{I}&amp;lt;/tex&amp;gt; из этого следует, что множество &amp;lt;tex&amp;gt;A' = A - x + y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;B' = B + x - y&amp;lt;/tex&amp;gt; являются независимыми, а также базами &amp;lt;tex&amp;gt;M_1&amp;lt;/tex&amp;gt;. И их &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| &amp;lt; |A \bigtriangleup B|&amp;lt;/tex&amp;gt;. Значит мы умеем переходить от &amp;lt;tex&amp;gt;|A' \bigtriangleup B'| = N&amp;lt;/tex&amp;gt; к &amp;lt;tex&amp;gt;|A \bigtriangleup B| = N+1&amp;lt;/tex&amp;gt;. По предположению индукции у &amp;lt;tex&amp;gt; |A' \bigtriangleup B'|&amp;lt;/tex&amp;gt; есть полное паросочетание. &lt;br /&gt;
*:По [[Теорема о базах|теореме о базах]] &amp;lt;tex&amp;gt;\forall x \in A \setminus B: \exists y \in B \setminus A : (A \setminus x) \cup y &lt;br /&gt;
\in \mathcal{I}&amp;lt;/tex&amp;gt;, следовательно по определению графа &amp;lt;tex&amp;gt;D_M(A) \Rightarrow (x, y) \in D_M(A)&amp;lt;/tex&amp;gt;.  Тогда &amp;lt;tex&amp;gt;N \cup {(x, y)}&amp;lt;/tex&amp;gt; составляет полное паросочетание на &amp;lt;tex&amp;gt;|A \bigtriangleup B|&amp;lt;/tex&amp;gt;, а значит индукционный переход справедлив.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лемма о единственном паросочетании в графе замен==&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Пусть [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] &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;(a_i \in A)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(b_i \in B)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (a_i b_j) \notin G&amp;lt;/tex&amp;gt;. При этом рёбра паросочетания будут иметь вид &amp;lt;tex&amp;gt;(a_i b_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=Индукция по &amp;lt;tex&amp;gt;|A|&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
* База&lt;br /&gt;
*: При &amp;lt;tex&amp;gt;|A|=1&amp;lt;/tex&amp;gt; утверждение очевидно. &amp;lt;br/&amp;gt;&lt;br /&gt;
* Переход&lt;br /&gt;
*: Пусть &amp;lt;tex&amp;gt;|A|=n&amp;gt;1&amp;lt;/tex&amp;gt; (для &amp;lt;tex&amp;gt;|A|=n-1&amp;lt;/tex&amp;gt; утверждение верно). Возьмем произвольную вершину в левой доли. Будем строить из неё [[Теорема о максимальном паросочетании и дополняющих цепях#Паросочетание в двудольном графе|чередующуюся цепь]], добавляя по очереди ребро, входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, и ребро, не входящее в &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;. Заметим, что такой путь не содержит циклов (циклы нечётной длины невозможны, так как граф двудольный, циклы чётной длины отсутствуют из-за единственности паросочетания). Если последнее добавленное ребро не принадлежит &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, то присоединим к цепи ребро из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt;, инцидентное последней вершине. Значит, построение цепи прервется только при добавлении ребра из &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; при достижении вершины [[Основные определения теории графов#Степень вершины|степени]] &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, последнее ребро в цепи имеет вид &amp;lt;tex&amp;gt;(ab) \in M&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in A, b \in B, \deg b = 1&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;a_n=a, b_n=b&amp;lt;/tex&amp;gt;. Для &amp;lt;tex&amp;gt;G \setminus \{a_n \cup b_n \}&amp;lt;/tex&amp;gt; утверждение верно по предположению индукции. С другой стороны, так как &amp;lt;tex&amp;gt;\deg b_n = 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;(a_i b_n) \notin G&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;i&amp;lt;n&amp;lt;/tex&amp;gt;, поэтому для &amp;lt;tex&amp;gt;j = n&amp;lt;/tex&amp;gt; утверждение также верно.&amp;lt;br/&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|about=&lt;br /&gt;
о единственном паросочетании в графе замен&lt;br /&gt;
|statement= Дан [[Определение матроида|матроид]] &amp;lt;tex&amp;gt;M = \langle X,I \rangle &amp;lt;/tex&amp;gt;. Пусть двудольный граф &amp;lt;tex&amp;gt;G_M(A) = \{ (x, y) \mid x \in A, y \notin A, A \setminus x \cup y \in I \}&amp;lt;/tex&amp;gt; содержит единственное полное паросочетание на &amp;lt;tex&amp;gt;A \oplus B&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A\in I&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;|A| = |B|&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;B \in I&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof= &lt;br /&gt;
[[Файл:Graph replacement.png|thumb|left|160px|]]&lt;br /&gt;
Упорядочим вершины левой &amp;lt;tex&amp;gt;(y_i \in A \setminus B)&amp;lt;/tex&amp;gt; и правой &amp;lt;tex&amp;gt;(z_j \in B \setminus A)&amp;lt;/tex&amp;gt; долей таким образом, что &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;. При таком упорядочивании ребра паросочетания имеют вид &amp;lt;tex&amp;gt;(y_i z_i)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Требуется доказать, что &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; независимо. Предположим обратное. Пусть &amp;lt;tex&amp;gt;B \notin I&amp;lt;/tex&amp;gt;, тогда существует [[Теорема о циклах|цикл]] &amp;lt;tex&amp;gt;C \subset B&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; Выберем минимальное &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;z_i \in C&amp;lt;/tex&amp;gt;. Так как &amp;lt;tex&amp;gt;\forall j &amp;gt; i : (y_i z_j) \notin G_M(A)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_j \notin I&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle &amp;lt;/tex&amp;gt;. По [[Оператор замыкания для матроидов#theorem|свойствам замыкания 1 и 3]] получаем:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;C \setminus z_i \subset \langle A \setminus y_i \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle \langle A \setminus y_i \rangle \rangle \Rightarrow \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;z_i \in \langle C \setminus z_i \rangle \subset \langle A \setminus y_i \rangle&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;A \setminus y_i \cup z_i \notin I&amp;lt;/tex&amp;gt;, то есть в &amp;lt;tex&amp;gt;G_M(A)&amp;lt;/tex&amp;gt; не существует ребра &amp;lt;tex&amp;gt;(y_i z_i)&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;
*[https://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture17.pdf Chandra Chekuri — Combinatorial Optimization]&lt;br /&gt;
*[http://math.mit.edu/~goemans/18438F09/lec11.pdf Michel X. Goemans — Matroid Intersection]&lt;br /&gt;
*[http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture16.pdf '''Chandra Chekuri — Combinatorial Optimization], с. 6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория:Матроиды]]&lt;br /&gt;
[[Категория:Пересечение матроидов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=59878</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%B8%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=59878"/>
				<updated>2017-01-17T19:11:46Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Примеры неразрешимых задач */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Теория формальных языков]]&lt;br /&gt;
Символом &amp;lt;tex&amp;gt; \star &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;
*[[Простой сопоставитель регулярных выражений]] &amp;lt;tex&amp;gt; \star &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== НКА ===&lt;br /&gt;
*[[Недетерминированные конечные автоматы]]&lt;br /&gt;
*[[Построение по НКА эквивалентного ДКА, алгоритм Томпсона]]&lt;br /&gt;
*[[Автоматы с eps-переходами. Eps-замыкание]]&lt;br /&gt;
*[[Теорема Клини (совпадение классов автоматных и регулярных языков)]]&lt;br /&gt;
*[[Альтернативное доказательство теоремы Клини (через систему уравнений в регулярных выражениях)]]&lt;br /&gt;
=== Минимизация ДКА ===&lt;br /&gt;
*[[Эквивалентность состояний ДКА]]&lt;br /&gt;
*[[Минимизация ДКА, алгоритм за O(n^2) с построением пар различимых состояний]]&lt;br /&gt;
*[[Минимизация ДКА, алгоритм Хопкрофта (сложность O(n log n))]]&lt;br /&gt;
*[[Алгоритм Бржозовского]]&amp;lt;tex&amp;gt; ^\star &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;
=== Другие автоматы ===&lt;br /&gt;
*[[Локальные автоматы]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Двусторонний детерминированный конечный автомат]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Квантовые конечные автоматы]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Автоматы Мура и Мили]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Автоматы в современном мире]]&amp;lt;tex&amp;gt; ^\star &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;
*[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора]]&lt;br /&gt;
*[[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
*[[Регулярная аппроксимация КС-языков]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Нормальные формы КС-грамматик ===&lt;br /&gt;
*[[Удаление бесполезных символов из грамматики]]&lt;br /&gt;
*[[Удаление длинных правил из грамматики]]&lt;br /&gt;
*[[Удаление eps-правил из грамматики]]&lt;br /&gt;
*[[Удаление цепных правил из грамматики]]&lt;br /&gt;
*[[Нормальная форма Хомского]]&lt;br /&gt;
*[[Устранение левой рекурсии]]&lt;br /&gt;
*[[Приведение грамматики к ослабленной нормальной форме Грейбах]]&lt;br /&gt;
*[[Нормальная форма Куроды]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Алгоритмы разбора ===&lt;br /&gt;
*[[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ]]&lt;br /&gt;
*[[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
*[[Алгоритм Эрли]]&lt;br /&gt;
*[[Алгоритм Эрли, доказательство оценки O(n^2) для однозначной грамматики]]&lt;br /&gt;
&lt;br /&gt;
=== Опровержение контекстно-свободности языка ===&lt;br /&gt;
*[[Лемма о разрастании для КС-грамматик]]&lt;br /&gt;
*[[Лемма Огдена]]&lt;br /&gt;
*[[Существенно неоднозначные языки]]&lt;br /&gt;
*[[Теорема Парика]]&amp;lt;tex&amp;gt; ^\star &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;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Эквивалентность ДМП-автоматов]]&amp;lt;tex&amp;gt; ^\star &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;
*[[Замкнутость разрешимых и перечислимых языков относительно теоретико-множественных и алгебраических операций]]&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;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Busy beaver]]&lt;br /&gt;
*[[Колмогоровская сложность]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительные формализмы ===&lt;br /&gt;
*[[Машина Тьюринга]]&lt;br /&gt;
*[[Лямбда-исчисление]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Рекурсивные функции, представимость в формальной арифметике | Примитивно рекурсивные функции]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Частично рекурсивные функции]]&amp;lt;tex&amp;gt; ^\star &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; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Тьюринг-полнота]]&amp;lt;tex&amp;gt; ^\star &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Примеры неразрешимых задач ===&lt;br /&gt;
*[[m-сводимость]]&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;
*[[Игра «Жизнь»]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Неразрешимость игры Braid]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Теорема Райса-Шапиро]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=SSL/TLS&amp;diff=58084</id>
		<title>SSL/TLS</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=SSL/TLS&amp;diff=58084"/>
				<updated>2016-12-19T21:28:40Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Устройство протокола SSL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== История SSL ==&lt;br /&gt;
'''SSL''' изначально разработан компанией [https://en.wikipedia.org/wiki/Netscape Netscape] для добавления протокола [https://en.wikipedia.org/wiki/HTTPS - HTTPS] в свой веб-браузер [https://en.wikipedia.org/wiki/Netscape_Navigator Netscape Navigator], потому что компания считала, что безопасное соединение между клиентом и сервером в первую очередь послужит успехом развитию Интернета как инструмента бизнеса. Из-за невозможности гарантировать безопасность сети, через которую передается информация наилучшим способом защитить ее было выбрано шифрование и дешифрование на концах устанавливаемого соединения соответственно. ''Netscape'' могли бы встроить этот подход напрямую в свой браузер, но это бы не предоставило единого решения, которое другие приложения могли бы использовать. Требовалось получить более общный, независимый от приложения подход. В итоге, ''Netscape'' разработал протокол ''SSL'' работающий поверх ''TCP'', а также предоставляющий ''TCP''-подобный интерфейс для приложений более высокого уровня. В теории, одним из преимуществ SSL для разработчиков являлась возможность заменить все традиционные ''TCP'' вызовы на новые ''SSL'' вызовы. Специфические детали того, как ''SSL'' шифрует и дешифрует данные были относительно прозрачны.&lt;br /&gt;
&lt;br /&gt;
== Устройство протокола SSL ==&lt;br /&gt;
[[Файл:SSL on top of TCP.png|right|Фаза рукопожатия]]&lt;br /&gt;
Протокол SSL размещается между двумя протоколами: протоколом, который использует программа-клиент (HTTP, FTP, LDAP, TELNET etc) и транспортным протоколом TCP/IP. SSL защищает данные, выступая в роли фильтра для обеих сторон и передает их далее на транспортный уровень. &lt;br /&gt;
&lt;br /&gt;
Работу протокола можно разделить на два уровня:&lt;br /&gt;
* Слой протокола подтверждения подключения (Handshake Protocol Layer)&lt;br /&gt;
* Слой протокола записи&lt;br /&gt;
&lt;br /&gt;
Первый слой, в свою очередь, состоит из трех подпротоколов:&lt;br /&gt;
* Протокол подтверждения подключения (Handshake Protocol)&lt;br /&gt;
* Протокол изменения параметров шифра (Cipher Spec Protocol)&lt;br /&gt;
* Предупредительный протокол (Alert Protocol)&lt;br /&gt;
Протокол подтверждения подключения производит цепочку обмена данными, что в свою очередь начинает аутентификацию сторон и согласовывает шифрование, хэширование и сжатие. Следующий этап — аутентификация участников, которая осуществляется также протоколом подтверждения подключения.&lt;br /&gt;
&lt;br /&gt;
Протокол изменения параметров шифра используется для изменения данных ключа (keyingmaterial) — информации, которая используется для создания ключей шифрования. Протокол состоит всего из одного сообщения, в котором сервер говорит, что отправитель хочет изменить набор ключей.&lt;br /&gt;
&lt;br /&gt;
Предупредительный протокол содержит сообщение, которое показывает сторонам изменение статуса или сообщает о возможной ошибке. Обычно предупреждение отсылается тогда, когда подключение закрыто и получено неправильное сообщение, сообщение невозможно расшифровать или пользователь отменяет операцию.&lt;br /&gt;
&lt;br /&gt;
=== Протокол записи ===&lt;br /&gt;
Протокол записи (Record Layer) — это уровневый протокол. На каждом уровне сообщения включают поля для длины, описания и проверки. Протокол записи принимает сообщения, которые нужно передать, фрагментирует данные в управляемые блоки, разумно сжимает данные, применяя MAC (message authentication code), шифрует и передаёт результат. Полученные данные он расшифровывает, проверяет, распаковывает, собирает и доставляет к более верхним уровням клиента.&lt;br /&gt;
Существует четыре протокола записи:&lt;br /&gt;
* Протокол рукопожатия (handshake protocol);&lt;br /&gt;
* Протокол тревоги (alert protocol);&lt;br /&gt;
* Протокол изменения шифра (the change cipher spec protocol);&lt;br /&gt;
* Протокол приложения (application data protocol);&lt;br /&gt;
&lt;br /&gt;
== Принцип работы SSL ==&lt;br /&gt;
[[Файл:ssl_handshake.png|right|Фаза рукопожатия]]&lt;br /&gt;
&lt;br /&gt;
Принцип работы SSL состоит из двух фаз: фаза рукопожатия и фаза передачи данных. Во время фазы рукопожатия клиент и сервер используют шифрование открытым ключом для того, чтобы определить параметры секретного ключа, используемого клиентом и сервером для шифрования во время фазы передачи данных.&lt;br /&gt;
&lt;br /&gt;
Клиент инициирует рукопожатие посылая “hello”-сообщение серверу. Такое сообщение содержит список алгоритмов симметричного шифрования (cipher specs), поддерживаемых клиентом. Сервер отвечает похожим “hello”-сообщением, выбрав при этом наиболее подходящий алгоритм шифрования из полученного списка. Далее сервер отправляет сертификат, который содержит его публичный ключ. &lt;br /&gt;
&lt;br /&gt;
Сертификат это набор данных, который подтверждает подлинность. Подтвержденная третья сторона, известная как центр сертификации (CA), генерирует сертификат и проверяет его подлинность. Чтобы получить сертификат сервер должен использовать безопасные каналы для отправки своего публичного ключа в центр сертификации. Он генерирует сертификат, который содержит его собственный ID, ID сервера, публичный ключ сервера и другую информацию. А также центр сертификации создает отпечаток (digest) сертификата, который, по сути, является контрольной суммой. Далее центр сертификации создает подпись сертификата (certificate signature), которая формируется путем шифрования отпечатка сертификата приватным ключом центра сертификации.&lt;br /&gt;
&lt;br /&gt;
Для проверки сертификата сервера клиент использует публичный ключ центра сертификации для расшифровки подписи. Затем клиент самостоятельно считает отпечаток сертификата сервера и сверяет с расшифрованным. Если они не совпадают, то сертификат был подделан.&lt;br /&gt;
Естественно, для расшифровки подписи у клиента должен быть публичный ключ центра авторизации. Поэтому клиент хранит у себя список публичных ключей подтвержденных центров сертификации. По факту, многие браузерные приложения имеют подобный список, находящийся непосредственно в их коде. Когда клиент установил подлинность сервера (сервер также может запросить сертификат у клиента), сервер использует шифрование открытым ключом для определения секретного ключа для обмена информацией.&lt;br /&gt;
&lt;br /&gt;
Фаза рукопожатия завершается отправкой “finished”-сообщений, как только обе стороны готовы начать использование секретного ключа.&lt;br /&gt;
Начинается фаза передачи данных, в ходе которой каждая сторона разбивает исходящие сообщения на фрагменты и прикрепляет к ним коды авторизации сообщений (MAC - message authentication code). Код авторизации сообщения это зашифрованный отпечаток, вычисленный на основе содержимого сообщений. Из соображений безопасности, он не совпадает с секретным ключом и вычисляется вместе с секретным ключом на стадии рукопожатия. Для получения полноценного SSL пакета каждая из сторон объединяет данные фрагмента, код авторизации сообщения, заголовки сообщения и шифруют с использованием секретного. При получении пакета, каждая из сторон расшифровывает его и сверяет полученный код авторизации сообщения со своим. Если они не совпадают, то пакет был подделан.&lt;br /&gt;
&lt;br /&gt;
== Цифровые сертификаты ==&lt;br /&gt;
Протокол SSL использует сертификаты для проверки соединения. Сертификаты расположены на безопасном сервере и используются для шифрования данных и идентификации Web-сайта.&lt;br /&gt;
Способы получения SSL-сертификата:&lt;br /&gt;
Использовать сертификат, выданный центром сертификации (Certification authority)&lt;br /&gt;
Использовать самоподписанный сертификат&lt;br /&gt;
Использовать «пустой» сертификат&lt;br /&gt;
Самоподписанный сертификат — сертификат, созданный самим пользователем — в этом случае издатель сертификата совпадает с владельцем сертификата. «Пустой» сертификат — сертификат, содержащий фиктивную информацию, используемую в качестве временной для настройки SSL и проверки его функциональности в данной среде.&lt;br /&gt;
&lt;br /&gt;
== Хэширование ==&lt;br /&gt;
Хеш-значение является идентификатором сообщения, его размер меньше размера оригинального сообщения. Самыми известными хеш-алгоритмами являются MD5 (Message Digest 5), который создает 128-битное хеш-значение, SHA-1 (Standard Hash Algorithm), создающий 160-битное хеш-значение, SHA-2 и SHA-3. Результат работы алгоритма хеширования — значение, которое используется для проверки целостности передачи данных.&lt;br /&gt;
&lt;br /&gt;
== Шифрование ==&lt;br /&gt;
Существует два основных способа шифрования данных: симметричный ключ (общий секретный ключ) и асимметричный ключ (открытый ключ).&lt;br /&gt;
&lt;br /&gt;
=== Открытый ключ ===&lt;br /&gt;
[[Файл:ssl_public-key_encryption.png|center|Шифрование открытым ключом]]&lt;br /&gt;
Суть асимметричного шифрования заключается в том, что используется пара ключей. Один из них используется в качестве открытого (как правило, он публикуется в самом сертификате владельца), второй ключ называется секретным — он держится в тайне и никогда никому не открывается. Оба ключа работают в паре: один используется для запуска противоположных функций другого ключа. Если открытый ключ используется для того, чтобы зашифровать данные, то расшифровать их можно только секретным ключом и наоборот. Такая взаимосвязь позволяет делать две важные вещи.&lt;br /&gt;
Любой пользователь может получить открытый ключ по назначению и использовать его для шифрования данных, расшифровать которые может только пользователь, владеющий секретным ключом. (Алгоритм RSA)&lt;br /&gt;
Если заголовок шифрует данные, используя свой секретный ключ, каждый может расшифровать данные, используя соответствующий открытый ключ. Именно это является основой для цифровых подписей. (Алгоритм DSA)&lt;br /&gt;
RSA — самый распространенный алгоритм шифрования с использованием асимметричных ключей.&lt;br /&gt;
&lt;br /&gt;
=== Секретный ключ ===&lt;br /&gt;
[[Файл:ssl_secret-key_encryption.png|center|Шифрование симметричным ключом]]&lt;br /&gt;
При шифровании секретным ключом используется один и тот же ключ для шифрованных данных. Если стороны хотят обменяться зашифрованными сообщениями в безопасном режиме, то у обеих сторон должны быть одинаковые симметричные ключи. Такой тип шифрования используется для большого объёма данных. Обычно используются алгоритмы DES, 3-DES, RC2, RC4 и AES.&lt;br /&gt;
&lt;br /&gt;
=== Комбинированный подход ===&lt;br /&gt;
Алгоритмы симметричного шифрования часто включают установленное число добавок и сдвигов. Такие алгоритмы часто используют ключ для помощи  при битовых манипуляциях или для того, чтобы шифруемые данные стали более случайными. Другими словами, при увеличении размера секретного ключа может увеличиться случайность шифруемых данных, но не обязательно возрастет сложность вычислений при расшифровке.&lt;br /&gt;
Однако, шифрование открытым ключом использует ключ как экспоненту, поэтому значительное увеличения ключа сильно увеличивает количество вычислений, требуемых для шифрования / дешифрования данных. Таким образом хотя алгоритмы шифрования открытым ключом не сталкиваются с проблемой распределения, с которой сталкиваются алгоритмы шифрования секретным ключом, они требует значительно больше вычислительной мощности. Для использования сильных сторон обоих типов алгоритмов протоколы безопасности обычно используют шифрование открытым ключом для передачи секретных ключей. Как только секретный ключ доставлен начинается передача данных с использованием симметричного шифрования.&lt;br /&gt;
Существует еще один подход, использующий открытый ключ как соглашение, а не как способ доставки секретного ключа другим. Обе стороны обмениваются публичными ключами и независимо генерируют секретный ключ. Самой распространенной формой такого соглашения является протокол Диффи-Хеллмана. Хотя SSL поддерживает протокол Диффи-Хеллмана, большинство SSL транзакций не используют его. Вместо него используется алгоритм RSA, который решает проблему распределения секретных ключей.&lt;br /&gt;
&lt;br /&gt;
== Аутентификация и обмен ключами ==&lt;br /&gt;
SSL поддерживает 3 типа аутентификации:&lt;br /&gt;
аутентификация обеих сторон (клиент — сервер),&lt;br /&gt;
аутентификация сервера с неаутентифицированным клиентом,&lt;br /&gt;
полная анонимность.&lt;br /&gt;
Обычно для аутентификации используются алгоритмы: RSA, DSA, ECDSA.&lt;br /&gt;
Если сервер аутентифицирован, то его сообщение о сертификации должно обеспечить верную сертификационную цепочку, ведущую к приемлемому центру сертификации. Проще говоря, аутентифицированный сервер должен предоставить допустимый сертификат клиенту. Каждая сторона отвечает за проверку того, что сертификат другой стороны ещё не истек и не был отменен. Всякий раз, когда сервер аутентифицируется, канал устойчив (безопасен) к попытке перехвата данных между веб-сервером и браузером, но полностью анонимная сессия по своей сути уязвима к такой атаке. Анонимный сервер не может аутентифицировать клиента. Главная цель процесса обмена ключами — это создание секрета клиента (pre_master_secret), известного только клиенту и серверу. Секрет (pre_master_secret) используется для создания общего секрета (master_secret). Общий секрет необходим для того, чтобы создать сообщение для проверки сертификата, ключей шифрования, секрета MAC (message authentication code) и сообщения «finished». Отсылая сообщение «finished», стороны указывают, что они знают верный секрет (pre_master_secret).&lt;br /&gt;
=== Анонимный обмен ключами ===&lt;br /&gt;
Полностью анонимная сессия может быть установлена при использовании алгоритма RSA или Диффи-Хеллмана для создания ключей обмена. В случае использования RSA клиент шифрует секрет (pre_master_secret) с помощью открытого ключа несертифицированного сервера. Открытый ключ клиент узнает из сообщения обмена ключами от сервера. Результат посылается в сообщении обмена ключами от клиента. Поскольку перехватчик не знает закрытого ключа сервера, то ему будет невозможно расшифровать секрет (pre_master_secret). При использовании алгоритма Диффи-Хеллмана открытые параметры сервера содержатся в сообщении обмена ключами от сервера, и клиенту посылают в сообщении обмена ключами. Перехватчик, который не знает приватных значений, не сможет найти секрет (pre_master_secret).&lt;br /&gt;
&lt;br /&gt;
=== Аутентификация и обмен ключами при использовании RSA ===&lt;br /&gt;
В этом случае обмен ключами и аутентификация сервера может быть скомбинирована. Открытый ключ также может содержаться в сертификате сервера или может быть использован временный ключ RSA, который посылается в сообщении обмена ключами от сервера. Когда используется временный ключ RSA, сообщения обмена подписываются server’s RSA или сертификат DSS (???). Сигнатура содержит текущее значение сообщения Client_Hello.random, таким образом, старые сигнатуры и старые временные ключи не могут повторяться. Сервер может использовать временный ключ RSA только однажды для создания сессии. После проверки сертификата сервера клиент шифрует секрет (pre_master_secret) при помощи открытого ключа сервера. После успешного декодирования секрета (pre_master_secret) создается сообщение «finished», тем самым сервер демонстрирует, что он знает частный ключ, соответствующий сертификату сервера.&lt;br /&gt;
Когда RSA используется для обмена ключами, для аутентификации клиента используется сообщение проверки сертификата клиента. Клиент подписывается значением, вычисленным из master_secret и всех предшествующих сообщений протокола рукопожатия. Эти сообщения рукопожатия содержат сертификат сервера, который ставит в соответствие сигнатуре сервера сообщение Server_Hello.random, которому ставит в соответствие сигнатуру текущему сообщению рукопожатия (???).&lt;br /&gt;
&lt;br /&gt;
=== Аутентификация и обмен ключами при использовании Diffie-Hellman ===&lt;br /&gt;
В этом случае сервер может также поддерживать содержащий конкретные параметры алгоритм Диффи-Хеллмана или может использовать сообщения обмена ключами от сервера для посылки набора временных параметров, подписанных сертификатами DSS или RSA. Временные параметры хэшируются с сообщением hello.random перед подписанием для того, чтобы злоумышленник не смог совершить повтор старых параметров. В любом случае клиент может проверить сертификат или сигнатуру для уверенности, что параметры принадлежат серверу.&lt;br /&gt;
Если клиент имеет сертификат, содержащий параметры алгоритма Diffie-Hellman, то сертификат также содержит информацию, требующуюся для того, чтобы завершить обмен ключами. В этом случае клиент и сервер должны будут сгенерировать одинаковые Diffie-Hellman результаты (pre_master_secret) каждый раз, когда они устанавливают соединение. Для того, чтобы предотвратить хранение секрета (pre_master_secret) в памяти компьютера на время дольше, чем необходимо, секрет должен быть переведен в общий секрет (master_secret) настолько быстро, насколько это возможно. Параметры клиента должны быть совместимы с теми, которые поддерживает сервер для того, чтобы работал обмен ключами.&lt;br /&gt;
&lt;br /&gt;
== Восстановление сессии ==&lt;br /&gt;
[[Файл:ssl_session_resumption.png|right|Фаза рукопожатия]]&lt;br /&gt;
Создатели SSL знали, что алгоритмы шифрования открытым ключом вычислительно сложные, и клиент, создающий несколько новых соединений к одному и тому же серверу в течение короткого промежутка времени может сильно нагрузить сервер, что приведет к заметным временным задержкам ответа. Однако, если клиент и сервер уже установили соединение, то ему будет соответствовать уникальный идентификатор сессии, позволяющий ссылаться на него и использовать такой же секретный ключ при последующих соединениях в рамках некоторого временного отрезка. Безусловно, такой подход привносит определенный риск в безопасность соединения. Поэтому, если необходимо, клиент может пересоздать новые идентификатор и секретный ключ для данной сессии. Microsoft’s Internet Explorer, например, проделывают эту операцию каждые 2 минуты.&lt;br /&gt;
&lt;br /&gt;
===Администрирование===&lt;br /&gt;
====Обслуживание сертификатов и ключей====&lt;br /&gt;
Если клиент планирует обратиться к серверу, который требует клиентской аутентификации, он должен хранить свой сертификат и связанный с ним приватный ключ. Сервер должен всегда хранить свой сертификат и связанный с ним приватный ключ.&lt;br /&gt;
====Хранилище идентификаторов сессий====&lt;br /&gt;
Клиент и сервер обязаны хранить идентификаторы сессий и связанные с ними секретные ключи для использования во время восстановления соединения.&lt;br /&gt;
&lt;br /&gt;
== SSL 1.0, 2.0, 3.0 и TLS ==&lt;br /&gt;
Версия 1.0 никогда не была обнародована. &lt;br /&gt;
Версии 2.0 была выпущена в феврале 1995 года, но содержала много недостатков по безопасности, которые привели к разработке SSL версии 3.0. &lt;br /&gt;
Как только различные компании (Microsoft) начали предпринимать попытки разработки собственных безопасных протоколов транспортировки, IETF решило вмешаться и определить стандарт протокола шифрования. Впоследствии, при поддержке множества компаний, на основании протокола SSL 3.0 был разработан и принят стандарт RFC, получивший имя TLS 1.0. Его также часто называют SSL 3.1.&lt;br /&gt;
Хотя TLS и SSL имеют существенные различия в реализации, разработчики обычно замечают лишь немногие из них, а конечные пользователи вовсе их не различают. Тем не менее TLS 1.0 и SSL 3.0 несовместимы. Значительное различие состоит в том, что TLS требует определенные алгоритмы шифрования, которые SSL не поддерживает. Таким образом TLS сервер должен “откатиться” до SSL 3.0 для работы с клиентами, использующими SSL 3.0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Протоколы SSL и TLS ==&lt;br /&gt;
'''SSL (Secure Sockets Layer)''' и '''TLS (Transport Level Security)''' {{---}} криптографические протоколы, обеспечивающие защищенную передачу данных в компьютерной сети. Они широко используются в веб-браузерах, а также при работе с электронной почтой, обмене мгновенными сообщениями и в IP-телефонии.&lt;br /&gt;
&lt;br /&gt;
Соединение, защищенное протоколом TLS, обладает одним или несколькими следующими свойствами:&lt;br /&gt;
* ''Безопасность'': симметричное шифрование защищает передаваемую информацию от прочтения посторонними лицами.&lt;br /&gt;
* ''Аутентификация'': &amp;quot;личность&amp;quot; участника соединения можно проверить с помощью асимметричного шифрования.&lt;br /&gt;
* ''Целостность'': каждое сообщение содержит код ('''Message Authentication Code, MAC'''), с помощью которого можно проверить, что данные не были изменены или потеряны в процессе передачи.&lt;br /&gt;
&lt;br /&gt;
Так как большинство протоколов связи могут быть использованы как с TLS/SSL, так и без него, при установке соединения необходимо явно указать серверу, хочет ли клиент устанавливать TLS. Один способ добиться этого {{---}} использовать порт, по которому соединение всегда устанавливается с использованием TLS (например, 443 для HTTPS). Другой способ {{---}} использовать специальную команду серверу от клиента переключить соединение на TLS (например, STARTTLS для протоколов электронной почты).&lt;br /&gt;
&lt;br /&gt;
==Механизм работы протокола==&lt;br /&gt;
&lt;br /&gt;
Протокол TLS делится на два слоя: '''TLS Record''' и '''TLS Handshake'''.&lt;br /&gt;
&lt;br /&gt;
====Подтверждение связи (handshake)====&lt;br /&gt;
[[Файл:Handshake.png|right|Схема подтверждения связи]]&lt;br /&gt;
# Клиент посылает сообщение '''ClientHello''', указывающее версию SSL или TLS и поддерживаемые клиентом методы шифрования (англ. ''CipherSuite''). Это сообщение также содержит случайное число (набор байт), которое используется в последующих вычислениях. Протокол также позволяет указать поддерживаемые клиентом методы сжатия данных.&lt;br /&gt;
# Сервер отвечает сообщением '''ServerHello''', которое содержит метод шифрования, выбранный сервером из списка, предложенного клиентом, а также идентификатор сессии и еще одно случайное число. Также сервер посылает свой цифровой сертификат. Если серверу нужен сертификат для аутентификации клиента, на этом шаге он может послать клиенту запрос такого сертификата.&lt;br /&gt;
# Клиент проверяет сертификат сервера.&lt;br /&gt;
# Клиент отправляет случайное число, которое клиент и сервер используют для шифрования последующих сообщений. Сама строка из байт шифруется публичным ключом сервера. &lt;br /&gt;
# Если сервер потребовал у клиента сертификат, клиент отсылает набор байт, зашифрованный его секретным ключом, и свой цифровой сертификат, или оповещение об отсутствии сертификата.&lt;br /&gt;
# Сервер проверяет сертификат клиента.&lt;br /&gt;
# Клиент и сервер отправляют друг другу сообщение '''ChangeCipherSpec''', объявляя об изменении режима передачи данных с незащищенного на защищенный.&lt;br /&gt;
# Клиент отправляет сообщение '''Finished''', зашифрованное секретным ключом, и таким образом завершает подтверждение связи со своей стороны.&lt;br /&gt;
# Аналогичные действия производит сервер.&lt;br /&gt;
# На протяжении данной сессии клиент и сервер могут обмениваться сообщениями, зашифрованными секретным ключом.&lt;br /&gt;
&lt;br /&gt;
=====Возобновление сессии=====&lt;br /&gt;
# Клиент посылает сообщение '''ClientHello''', используя ID сессии, которую нужно возобновить.&lt;br /&gt;
# Сервер проверяет, есть ли у него в кэше соответствующий идентификатор. Если есть и сервер способен возобновить сессию, он отсылает клиенту сообщение '''ServerHello''' с этим же ID сессии. Если нет, сервер генерирует новый ID сессии и выполняет процедуру handshake с клиентом.&lt;br /&gt;
# Клиент и сервер обмениваются сообщениями '''ChangeCipherSpec''', а затем '''Finished'''.&lt;br /&gt;
# Передача данных по защищенному каналу возобновляется.&lt;br /&gt;
&lt;br /&gt;
====Протокол записи (TLS Record)====&lt;br /&gt;
Этот слой защищает данные с помощью ключей, полученных при подтверждении связи, и проверяет целостность и источник входящих сообщений. Он выполняет следующие функции:&lt;br /&gt;
* Разбиение исходящих сообщений на блоки нужного размера и &amp;quot;склеивание&amp;quot; входящих сообщений.&lt;br /&gt;
* Сжатие исходящих сообщений и распаковку входящих (используется не всегда).&lt;br /&gt;
* Применение кода аутентификации к исходящим сообщениям и проверку входящих с помощью MAC.&lt;br /&gt;
* Шифрование исходящих сообщений и дешифровку входящих.&lt;br /&gt;
&lt;br /&gt;
После обработки протоколом TLS Record зашифрованные данные передаются на слой TCP для передачи.&lt;br /&gt;
&lt;br /&gt;
====Состав записи====&lt;br /&gt;
[[Файл:TLS-Record.png|right|Схема записи]]&lt;br /&gt;
* ''Content type'': тип сообщения {{---}} подтверждение связи (22), обычное сообщение (23) или оповещение (21).&lt;br /&gt;
* ''Version'': версия SSL/TLS.&lt;br /&gt;
* ''Length'': длина оставшейся части сообщения.&lt;br /&gt;
* ''Payload'': собственно зашифрованные данные.&lt;br /&gt;
* ''MAC'': код аутентификации.&lt;br /&gt;
* ''Padding'': &amp;quot;отступ&amp;quot; для получения нужного размера сообщения.&lt;br /&gt;
&lt;br /&gt;
==Цифровые сертификаты (стандарт X.509)==&lt;br /&gt;
[[Файл:Cert-structure.png|right|Структура X.509]]&lt;br /&gt;
* Удобный способ показать, что кто-то владеет публичным ключом.&lt;br /&gt;
* Выпускаются центрами сертификации ('''Certificate Authority, CA'''): GlobalSign, Comodo и др.&lt;br /&gt;
* PKI (public key infrastructure) {{---}} механизм, регулирующий распространение и использование сертификатов (включая создание, отзыв и проверку подлинности).&lt;br /&gt;
* Список доверенных CA поддерживается приложением (у браузеров свои списки).&lt;br /&gt;
* Сертификаты подписываются другими сертификатами, что повышает надежность.&lt;br /&gt;
* Сертификат может быть отозван. Система поддерживает список таких сертификатов ('''Certificate Revocation List, CRL'''). На стороне CA список обновляется каждые несколько часов.&lt;br /&gt;
&lt;br /&gt;
===Получение сертификата===&lt;br /&gt;
# Пользователь генерирует ключ и посылает запрос серверу CA.&lt;br /&gt;
# CA отвечает сообщением со своим сертификатом.&lt;br /&gt;
# Пользователь собирает данные, необходимые для выдачи сертификата (email, отпечаток ключа и т.д.).&lt;br /&gt;
# Пользователь отправляет данные в CA, зашифровав их публичным ключом CA.&lt;br /&gt;
# CA проверяет полученные данные и отправляет сертификат пользователю.&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;
** Дополнительные поля&lt;br /&gt;
* Алгоритм подписи сертификата&lt;br /&gt;
* Значение подписи сертификата&lt;br /&gt;
&lt;br /&gt;
==Меры безопасности в TLS==&lt;br /&gt;
* Защита от downgrade-атаки {{---}} понижения версии протокола к предыдущей (менее защищённой) версии или менее надёжному алгоритму шифрования;&lt;br /&gt;
* Нумерация последовательных записей приложения и использование порядкового номера в коде аутентификации сообщения (MAC);&lt;br /&gt;
* Использование ключа в идентификаторе сообщения (только владелец ключа может сгенерировать код аутентификации сообщения).&lt;br /&gt;
* Сообщение, которым заканчивается подтверждение связи («Finished»), содержит хэш всех handshake-сообщений, отправленных обеими сторонами, что позволяет проверить подлинность выбранных параметров TLS-соединения.&lt;br /&gt;
* Псевдослучайная функция делит подаваемые ей на вход данные пополам, применяет к половинкам разные хэш-алгоритмы (MD5 и SHA-1), а затем XOR'ит результаты для получения MAC. Это повышает безопасность в случае, если в одном из алгоритмов обнаружится уязвимость.&lt;br /&gt;
&lt;br /&gt;
==Ключевые отличия SSL и TLS==&lt;br /&gt;
* ''Аутентификация сообщений'': в TLS используется HMAC, работающий с любой хэш-функцией (а не только с MD5 или SHA, как в SSL).&lt;br /&gt;
* ''Генерация ключа'': в TLS при создании ключа используется псевдослучайная функция стандарта HMAC; в SSL {{---}} RSA, Diffie-Hellman или Fortezza/DMS.&lt;br /&gt;
* ''Проверка сертификата'': в SSL проверка требует передачи сложной последовательности сообщений; в TLS информация о проверке полностью передается в сообщениях во время handshake.&lt;br /&gt;
* ''Методы шифрования'': SSL поддерживает только алгоритмы RSA, Diffie-Hellman и Fortezza/DMS. В TLS отказались от поддержки Fortezza/DMS, но возможно добавление новых методов шифрования в последующих версиях.&lt;br /&gt;
&lt;br /&gt;
==Виды возможных атак==&lt;br /&gt;
* Атака по словарю&lt;br /&gt;
* Атака отражением&lt;br /&gt;
* Атака протокола рукопожатия&lt;br /&gt;
* Взлом SSL-соединений внутри ЦОД&lt;br /&gt;
* BEAST атака&lt;br /&gt;
* Раскрытие шифров&lt;br /&gt;
* Атака «злоумышленник посередине»&lt;br /&gt;
* THC-SSL-DOS&lt;br /&gt;
* SSLstrip&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [https://www.sans.org/reading-room/whitepapers/protocols/ssl-tls-beginners-guide-1029 SSL and TLS: A Beginner's Guide]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/SSL Wikipedia: Secure Sockets Layer]&lt;br /&gt;
* [http://csee.wvu.edu/~katerina/Teaching/CS-465-Fall-2007/SSL-Basics.pdf Inside SSL: The Secure Sockets Layer Protocol]&lt;br /&gt;
* [https://www.pearsonhighered.com/program/Tanenbaum-Structured-Computer-Organization-6th-Edition/PGM200985.html Tanenbaum-Structured-Computer-Organization-6th-Edition]&lt;br /&gt;
* [http://httpd.apache.org/docs/current/ssl/ssl_intro.html SSL/TLS Strong Encryption: An Introduction]&lt;br /&gt;
* [https://en.wikipedia.org/wiki/Transport_Layer_Security Wikipedia: Transport Layer Security]&lt;br /&gt;
* [https://msdn.microsoft.com/en-us/library/windows/desktop/aa380516(v=vs.85).aspx Microsoft Developer Resources: Transport Layer Security Protocol]&lt;br /&gt;
* [http://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.1.0/com.ibm.mq.doc/sy10630_.htm IBM Knowledge Center: Cryptographic security protocols: SSL and TLS]&lt;br /&gt;
* [https://cdn.preterhuman.net/texts/computing/security/SSL%20And%20TLS%20Essentials%20-%20Securing%20The%20Web%202000.pdf Thomas, Stephen. SSL and TLS Essentials: Securing the Web.]&lt;br /&gt;
&lt;br /&gt;
== Полезные материалы ==&lt;br /&gt;
* [https://www.openssl.org/ Криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT]&lt;br /&gt;
* [https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu-14-04 How To Create an SSL Certificate on Nginx for Ubuntu 14.04]&lt;br /&gt;
* [https://w3techs.com/technologies/overview/ssl_certificate/all Usage Statistics and Market Share of SSL Certificate Authorities]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9,_%D1%81%D0%B0%D0%BC%D0%BE%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84&amp;diff=56189</id>
		<title>Дополнительный, самодополнительный граф</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9,_%D1%81%D0%B0%D0%BC%D0%BE%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B3%D1%80%D0%B0%D1%84&amp;diff=56189"/>
				<updated>2016-11-22T19:47:15Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Дополнительный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Дополнительный граф ==&lt;br /&gt;
&amp;lt;wikitex&amp;gt;&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Пусть дан граф &amp;lt;tex&amp;gt;G \langle V, E \rangle&amp;lt;/tex&amp;gt;. '''Дополнительным графом''' (англ. ''complement graph'') к $G$ называется граф &amp;lt;tex&amp;gt;G \langle V, \overline E \rangle&amp;lt;/tex&amp;gt; то есть граф с вершинами из $V$ и теми и только теми ребрами из $E$, которые не вошли в $G$.&lt;br /&gt;
}}&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border-collapse:collapse; border:noborder&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|Пример графа с 6-ю вершинами и его дополнение.&lt;br /&gt;
|-&lt;br /&gt;
| [[Файл:допграф1.png|200px|link=]]&lt;br /&gt;
| [[Файл:допграф2.png|200px|link=]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Дополнительный [[Основные_определения_теории_графов|граф]] к дополнительному графу $G$ есть граф $G$.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\overline{\overline {G \langle V, E \rangle}} = \overline{G_1 \langle V, \overline{E} \rangle} = G_2 \langle V, \overline{\overline{E}} = G_2 \langle V, E \rangle = G&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
В дополнительном графе к &amp;lt;tex&amp;gt;G \langle V, E \rangle&amp;lt;/tex&amp;gt;. количество ребер равняется &amp;lt;tex dpi=150&amp;gt;\frac{\left\vert V \right\vert \cdot \left ( \left\vert V \right\vert - 1 \right )}{2} - \left\vert E \right\vert&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Так как множества ребер в $G$ и $\overline{G}$ дизъюнктны, то $\left\vert E \right\vert + \left\vert \overline{E} \right\vert =$ &amp;lt;tex dpi=150&amp;gt;\frac{\left\vert V \right\vert \cdot \left ( \left\vert V \right\vert - 1 \right )}{2}&amp;lt;/tex&amp;gt;, из чего следует утверждение теоремы.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Дополнительный граф к [[Отношение связности, компоненты связности|несвязному]] графу связен.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Для графа с одной вершиной утверждение очевидно. Докажем его для остальных графов.&lt;br /&gt;
&lt;br /&gt;
Пусть $G$ {{---}} данный граф. Рассмотрим произвольные вершины $v$ и $u$ из $G$. Возможны два случая: $v$ и $u$ лежат в одной или в разных компонентах связности.&lt;br /&gt;
&lt;br /&gt;
*Пусть $v$ и $u$ лежат в разных компонентах связности $G$. &lt;br /&gt;
:Тогда ребро $(u, v) \notin G \Rightarrow (u, v) \in \overline{G} \Rightarrow u$ и $v$ лежат в одной компоненте связности $\overline{G}$. &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[Файл:допграф3.png|500px|слева]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Пусть $v$ и $u$ лежат в одной компоненте связности $G$.&lt;br /&gt;
$G$ {{---}} несвязный $\Rightarrow \exists w \in G$, не лежащая в одной компоненте связности с $v$ и $u$. &lt;br /&gt;
:Тогда по предыдущему пункту $(v, w) \in \overline{G}$ и $(u, w) \in \overline{G} \Rightarrow v$ и $u$ лежат в одной компоненте связности $\overline{G}$. &lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
[[Файл:допграф4.png|500px|слева]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
То есть $\forall u, v \in V$  $u$ и $v$ лежат в одной компоненте связности $\overline{G}$, то есть $\overline{G}$ связен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Самодополнительный граф ==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Самодополнительным графом''' (англ. ''self-complement'') называется граф, [[Основные определения теории графов|изоморфный]] своему дополнительному.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Любой самодополнительный граф имеет $4k$ или $4k + 1$ вершину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Обозначим $\left\vert V \right\vert$ за $n$, $\left\vert E \right\vert$ за $a$.&lt;br /&gt;
&lt;br /&gt;
Граф самодополнителен $\Rightarrow$ количество его ребер равно количеству ребер в его дополнении.&lt;br /&gt;
&lt;br /&gt;
 Но по одной из предыдущих теорем, &amp;lt;tex dpi=150&amp;gt;\frac{n \cdot \left ( n - 1 \right )}{2}&amp;lt;/tex&amp;gt; $- a = \left\vert \overline{E} \right\vert = a \Rightarrow 4a = n \cdot \left ( n - 1 \right )$, из чего следует утверждение теоремы.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Для любых $k &amp;gt; 0$ существует самодополнительный граф с $4k$ или $4k + 1$ вершиной.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Будем доказывать по индукции. Для $k = 1$ утверждение справедливо.&lt;br /&gt;
&lt;br /&gt;
[[Файл:допграф7.png|400px|link=]]&lt;br /&gt;
&lt;br /&gt;
Пусть у нас есть самодополнительный граф $G$ с $n$ вершинами, построим самодополнительный граф с $n + 4$ вершинами.&lt;br /&gt;
Добавим к $G$ 4 вершины $v_1, v_2, v_3, v_4$ и ребра:&lt;br /&gt;
&lt;br /&gt;
*Добавим ребра $(v_1, v_2), (v_2, v_3), (v_3, v_4)$&lt;br /&gt;
*Если $u$ была вершиной в $G$, добавим ребра $(u, v_1), (u, v_4)$&lt;br /&gt;
&lt;br /&gt;
Назовем полученный граф $A$. Докажем, что $A$ самодополнителен. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим биекцию на множестве вершин $A$ и $\overline{A}$:&lt;br /&gt;
*Среди всех вершин, принадлежавших $G$ биекция будет такая же, как и у $G$ с $\overline{G}$;&lt;br /&gt;
*$v_1 \rightarrow v_2, v_2 \rightarrow v_4, v_3 \rightarrow v_1, v_4 \rightarrow v_3$. &lt;br /&gt;
&lt;br /&gt;
Тогда между ребрами $A$ и $\overline{A}$ тоже будет биекция.&lt;br /&gt;
[[Файл:допграф9.png|400px|]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/wikitex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Основные определения теории графов]]&lt;br /&gt;
* [[Отношение связности, компоненты связности]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6 &lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Дополнение_графа Википедия {{---}} дополнение графа]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki//Самодополнительный_граф Википедия {{---}} самодополнительный граф]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56187</id>
		<title>Двудольные графы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56187"/>
				<updated>2016-11-22T19:42:08Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольные графы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;span id=&amp;quot;Двудольный_граф&amp;quot;&amp;gt;'''Двудольный граф'''&amp;lt;/span&amp;gt; или '''биграф''' (англ. ''bipartite graph'') {{---}} [[Основные определения теории графов|граф]], множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами в одной доле и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; во второй обозначается &amp;lt;tex&amp;gt;K_{n,m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример двудольного графа]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56186</id>
		<title>Раскраска двудольного графа в два цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56186"/>
				<updated>2016-11-22T19:41:47Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Теорема Кёнига */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
:Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &amp;lt;/tex&amp;gt;. В графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; нет ребер &amp;lt;tex&amp;gt;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* ''Асанов М. О., Баранский В. А., Расин В. В.'' Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56185</id>
		<title>Раскраска двудольного графа в два цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56185"/>
				<updated>2016-11-22T19:40:50Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt; Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* ''Асанов М. О., Баранский В. А., Расин В. В.'' Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56183</id>
		<title>Раскраска двудольного графа в два цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56183"/>
				<updated>2016-11-22T19:38:17Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt; раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt; Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* ''Асанов М. О., Баранский В. А., Расин В. В.'' Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56182</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56182"/>
				<updated>2016-11-22T19:32:43Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: Перенаправление на Раскраска двудольного графа в два цвета&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Раскраска двудольного графа в два цвета]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56181</id>
		<title>Раскраска двудольного графа в два цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B4%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D1%84%D0%B0_%D0%B2_%D0%B4%D0%B2%D0%B0_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56181"/>
				<updated>2016-11-22T19:32:24Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: Новая страница: « == Раскраска в 2 цвета ==  {{Теорема  |statement= Граф &amp;lt;tex&amp;gt;2-&amp;lt;/t...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt; раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt; Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=56180</id>
		<title>Дискретная математика, алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=56180"/>
				<updated>2016-11-22T19:23:37Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Основные определения теории графов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].&lt;br /&gt;
&lt;br /&gt;
Символом &amp;lt;tex&amp;gt; \star &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;
*[[Симметричное отношение]]&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;
*[[Определение булевой функции]]&lt;br /&gt;
*[[Побитовые операции]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Суперпозиции]]&lt;br /&gt;
*[[ДНФ]]&lt;br /&gt;
*[[Сокращенная и минимальная ДНФ | Сокращенная и минимальная ДНФ, минимизация ДНФ методами гиперкубов, карт Карно, Квайна]]&lt;br /&gt;
*[[КНФ]]&lt;br /&gt;
*[[2-SAT]]&lt;br /&gt;
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]&lt;br /&gt;
*[[Полином Жегалкина | Полином Жегалкина, преобразование Мёбиуса]]&lt;br /&gt;
*[[Полные системы функций. Теорема Поста о полной системе функций]]&lt;br /&gt;
*[[Представление функции класса DM с помощью медианы]]&lt;br /&gt;
*[[Пороговая функция]]&lt;br /&gt;
*[[Троичная логика]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Схемы из функциональных элементов ==&lt;br /&gt;
*[[Реализация булевой функции схемой из функциональных элементов]]&lt;br /&gt;
*[[Простейшие методы синтеза схем из функциональных элементов]]&lt;br /&gt;
*[[Метод Лупанова синтеза схем]]&lt;br /&gt;
*[[Cумматор]]&lt;br /&gt;
*[[Каскадный сумматор]]&lt;br /&gt;
*[[Двоичный каскадный сумматор]]&lt;br /&gt;
*[[Троичный сумматор]]&amp;lt;tex&amp;gt;^\star&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;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Квантовые гейты]]&amp;lt;tex&amp;gt;^\star&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;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы сжатия ==&lt;br /&gt;
* [[Алгоритм Хаффмана]]&lt;br /&gt;
* [[Оптимальное хранение словаря в алгоритме Хаффмана]]&lt;br /&gt;
* [[Алгоритм Хаффмана за O(n)]]&lt;br /&gt;
* [[Алгоритм Ху-Таккера]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Неравенство Крафта]]&lt;br /&gt;
* [[Неравенство Макмиллана]]&lt;br /&gt;
* [[Код Шеннона]]&lt;br /&gt;
* [[Оптимальный префиксный код с длиной кодового слова не более L бит]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритмы LZ77 и LZ78]]&lt;br /&gt;
* [[Алгоритм LZW]]&lt;br /&gt;
* [[Алгоритм LZSS]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Преобразование Барроуза-Уиллера | Преобразование Барроуза-Уиллера и обратное ему]]&lt;br /&gt;
* [[Преобразование MTF]]&lt;br /&gt;
* [[Расстояние Хэмминга]]&lt;br /&gt;
* [[Избыточное кодирование, код Хэмминга]]&lt;br /&gt;
* [[Гамма-, дельта- и омега-код Элиаса]]&amp;lt;tex&amp;gt;^\star&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;
* [[Коды антигрея]]&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;
* [[Получение предыдущего объекта]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;  &lt;br /&gt;
* [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]&lt;br /&gt;
* [[Методы генерации случайного сочетания]]&amp;lt;tex&amp;gt;^\star&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;
* [[Числа Стирлинга первого рода]]&lt;br /&gt;
* [[Числа Стирлинга второго рода]]&lt;br /&gt;
* [[Числа Эйлера I и II рода | Числа Эйлера первого и второго рода. Подъемы в перестановках]]&amp;lt;tex&amp;gt;^\star&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;
* [[Матричное представление перестановок]]&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;
*[[Задача о наибольшей общей подпоследовательности]]&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;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]&lt;br /&gt;
*[[Meet-in-the-middle]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Другие задачи ===&lt;br /&gt;
*[[Задача о расстоянии Дамерау-Левенштейна]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]&lt;br /&gt;
*[[Задача о наибольшей подпоследовательности-палиндроме]]&lt;br /&gt;
*[[Наибольшая общая возрастающая подпоследовательность]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Задача о наибольшей общей палиндромной подпоследовательности]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Динамическое программирование по профилю]]&amp;lt;tex&amp;gt;^\star&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;
*[[Формула Байеса]]&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;
*[[Арифметическое кодирование]]&lt;br /&gt;
*[[Парадоксы теории вероятностей]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Схема Бернулли]]&amp;lt;tex&amp;gt;^\star&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;
* [[Расчет вероятности поглощения в состоянии]]&lt;br /&gt;
* [[Эргодическая марковская цепь]]&lt;br /&gt;
* [[Регулярная марковская цепь]]&lt;br /&gt;
* [[Примеры использования Марковских цепей]]&lt;br /&gt;
* [[Скрытые Марковские модели]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Витерби]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм &amp;quot;Вперед-Назад&amp;quot;]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Баума-Велша]]&amp;lt;tex&amp;gt;^\star&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;
* [[Hashed Array Tree]]&amp;lt;tex&amp;gt;^\star&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;
* [[Мастер-теорема]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[List order maintenance]]&amp;lt;tex&amp;gt;^\star&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;
&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;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Система непересекающихся множеств ==&lt;br /&gt;
* [[СНМ (наивные реализации) | Наивные реализации]]&lt;br /&gt;
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]&lt;br /&gt;
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]&lt;br /&gt;
* [[СНМ с операцией удаления за О(1)]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Поисковые структуры данных]] ==&lt;br /&gt;
* [[Упорядоченное множество]]&lt;br /&gt;
* [[Дерево поиска, наивная реализация]]&lt;br /&gt;
* [[АВЛ-дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
* [[B-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[Декартово дерево]]&lt;br /&gt;
* [[Декартово дерево по неявному ключу]]&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Tango-дерево]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Рандомизированное бинарное дерево поиска]]&lt;br /&gt;
* [[Дерево ван Эмде Боаса]]&lt;br /&gt;
* [[Список с пропусками]]&lt;br /&gt;
* [[Fusion tree]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Сверхбыстрый цифровой бор]]&lt;br /&gt;
* [[Rope]]&amp;lt;tex&amp;gt;^\star&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;
* [[Несогласованные поддеревья. Реализация массового обновления]]&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;
== Хеширование ==&lt;br /&gt;
* [[Хеш-таблица]]&lt;br /&gt;
* [[Разрешение коллизий]]&lt;br /&gt;
* [[Хеширование кукушки]]&lt;br /&gt;
* [[Идеальное хеширование]]&lt;br /&gt;
* [[Перехеширование]]&lt;br /&gt;
* [[Фильтр Блума]]&lt;br /&gt;
* [[Quotient filter]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Универсальное семейство хеш-функций]]&lt;br /&gt;
* [[Расширяемое хеширование]]&amp;lt;tex&amp;gt;^\star&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;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Сортировка кучей]]&lt;br /&gt;
* [[Быстрая сортировка]]&lt;br /&gt;
* [[Сортировка слиянием]]&lt;br /&gt;
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]&lt;br /&gt;
* [[Терпеливая сортировка]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Timsort]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Smoothsort]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Теорема о нижней оценке для сортировки сравнениями]]&lt;br /&gt;
&lt;br /&gt;
=== Многопоточные сортировки ===&lt;br /&gt;
* [[Многопоточная сортировка слиянием]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[PSRS-сортировка]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
=== Другие сортировки ===&lt;br /&gt;
* [[Поиск k-ой порядковой статистики]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики за линейное время]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики в двух массивах]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Сортировка подсчетом]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Карманная сортировка]]&lt;br /&gt;
* [[Сортировка Хана]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Задача флага Нидерландов]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Блинная сортировка]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сортирующие сети ==&lt;br /&gt;
* [[Сортирующие сети]]&lt;br /&gt;
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]&lt;br /&gt;
* [[Сортирующие сети для квадратичных сортировок]]&lt;br /&gt;
* [[Сортировочные сети с особыми свойствами]]&amp;lt;tex&amp;gt;^\star&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;^\star&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;^\star&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;
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]&lt;br /&gt;
* [[Лемма о рукопожатиях]]&lt;br /&gt;
* [[Теорема о существовании простого пути в случае существования пути]]&lt;br /&gt;
* [[Теорема о существовании простого цикла в случае существования цикла]]&lt;br /&gt;
* [[Матрица смежности графа]]&lt;br /&gt;
* [[Матрица инцидентности графа]]&lt;br /&gt;
* [[Циклическое пространство графа]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Фундаментальные циклы графа]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Дерево, эквивалентные определения]]&lt;br /&gt;
* [[Алгоритмы на деревьях]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Дополнительный, самодополнительный граф]]&lt;br /&gt;
* [[Теоретико-множественные операции над графами]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Рёберное ядро]]&lt;br /&gt;
* [[Факторизация графов]]&amp;lt;tex&amp;gt;^\star&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;
* [[Мост, эквивалентные определения]]&lt;br /&gt;
* [[Граф компонент реберной двусвязности]]&lt;br /&gt;
* [[Граф блоков-точек сочленения]]&lt;br /&gt;
* [[k-связность]]&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;
* [[Алгоритм Борувки]]&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;
&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;
* [[Теорема Дирака]]&lt;br /&gt;
* [[Теорема Оре]]&lt;br /&gt;
* [[Теорема Поша]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Теорема Гуйя-Ури]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм нахождения Гамильтонова цикла в условиях теорем Дирака и Оре]]&lt;br /&gt;
* [[Теорема Гринберга]]&amp;lt;tex&amp;gt;^\star&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;
* [[Непланарность K5 и K3,3|Непланарность &amp;lt;tex&amp;gt;K_5&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K_{3,3}&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;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Двойственный граф планарного графа]]&lt;br /&gt;
* [[Теорема Фари]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Гамма-алгоритм]]&lt;br /&gt;
&lt;br /&gt;
== Раскраски графов ==&lt;br /&gt;
* [[Раскраска графа]]&lt;br /&gt;
* [[Двудольные графы и раскраска в 2 цвета]]&lt;br /&gt;
* [[Хроматический многочлен]]&lt;br /&gt;
* [[Формула Зыкова]]&lt;br /&gt;
* [[Формула Уитни]]&lt;br /&gt;
* [[Теорема Брукса]]&lt;br /&gt;
* [[Верхние и нижние оценки хроматического числа]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Хроматическое число планарного графа]]&lt;br /&gt;
* [[Многочлен Татта]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Теория Рамсея]]&amp;lt;tex&amp;gt;^\star&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;
* [[Использование обхода в глубину для поиска компонент сильной связности]]&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;
* [[Алгоритм Флойда]]&lt;br /&gt;
* [[Алгоритм Джонсона]]&lt;br /&gt;
* [[Алгоритм Левита]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм A*]] &amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм D*]] &amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Эвристики для поиска кратчайших путей]]&amp;lt;tex&amp;gt;^\star&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;
* [[Связь вершинного покрытия и независимого множества]]&lt;br /&gt;
* [[Рёберное ядро]]&amp;lt;tex&amp;gt;^\star&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;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Совершенное паросочетание в кубическом графе]]&amp;lt;tex&amp;gt;^\star&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;
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]&lt;br /&gt;
* [[Алоритм Эдмондса-Карпа]]&lt;br /&gt;
* [[Алгоритм масштабирования потока]]&lt;br /&gt;
* [[Блокирующий поток]]&lt;br /&gt;
* [[Схема алгоритма Диница]]&lt;br /&gt;
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]&lt;br /&gt;
* [[Алгоритм Голдберга-Тарьяна]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм поиска блокирующего потока в ациклической сети]]&lt;br /&gt;
* [[Метод проталкивания предпотока]]&lt;br /&gt;
* [[Алгоритм &amp;quot;поднять-в-начало&amp;quot;]]&lt;br /&gt;
* [[Теорема о декомпозиции]]&lt;br /&gt;
* [[Теорема о декомпозиционном барьере]]&lt;br /&gt;
* [[Циркуляция потока]]&lt;br /&gt;
* [[Алгоритм Каргера для нахождения минимального разреза]]&amp;lt;tex&amp;gt;^\star&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;
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]&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;
* [[Декомпозиция Линдона]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Ландау-Шмидта]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Крочемора]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Мейна-Лоренца]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Манакера]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Дерево палиндромов]]&amp;lt;tex&amp;gt;^\star&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;
* [[Алгоритм Кнута-Морриса-Пратта]]&lt;br /&gt;
* [[Автомат Кнута-Морриса-Пратта]]&lt;br /&gt;
* [[Z-функция]]&lt;br /&gt;
* [[Бор]]&lt;br /&gt;
* [[Алгоритм Ахо-Корасик]]&lt;br /&gt;
* [[Суффиксный автомат]]&lt;br /&gt;
* [[Алгоритм Бойера-Мура]]&lt;br /&gt;
* [[Алгоритм Апостолико-Крочемора]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Колусси]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Райта]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Shift-And]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Двусторонний алгоритм]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Турбо-алгоритм Бойера-Мура]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Нечёткий поиск ===&lt;br /&gt;
* [[Алгоритм Ландау-Вишкина (k несовпадений)]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Ландау-Вишкина (k различий)]]&amp;lt;tex&amp;gt;^\star&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;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Фарача]]&amp;lt;tex&amp;gt;^\star&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;
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]&lt;br /&gt;
* [[Количество подпалиндромов в строке]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Задача о наименьшем общем предке ==&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA]]&lt;br /&gt;
* [[Метод двоичного подъема]]&lt;br /&gt;
* [[Решение RMQ с помощью разреженной таблицы]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)&lt;br /&gt;
* [[Алгоритм Хьюи]]&lt;br /&gt;
* [[Heavy-light декомпозиция]]&lt;br /&gt;
* [[Алгоритм Шибера-Вишкина]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Алгоритм Тарьяна поиска LCA за O(1) в оффлайн]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Link-Cut Tree]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
* [[Rake-Compress деревья]]&amp;lt;tex&amp;gt;^\star&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;
* [[Теорема о базах]]&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;
* [[Матроид Вамоса]]&amp;lt;tex&amp;gt;^\star&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;
* [[Объединение матроидов, проверка множества на независимость]]&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;
=== Задачи с одним станком ===&lt;br /&gt;
* [[1sumu|&amp;lt;tex&amp;gt;1 \mid \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1sumwu|&amp;lt;tex&amp;gt; 1 \mid\mid \sum w_i U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1sumwT|&amp;lt;tex&amp;gt; 1 \mid\mid \sum w_i T_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1p1sumu|&amp;lt;tex&amp;gt;1 \mid p_{i} = 1 \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ridipi1|&amp;lt;tex&amp;gt;1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt;1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripi1sumwc|&amp;lt;tex&amp;gt;1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripi1sumf|&amp;lt;tex&amp;gt;1 \mid r_i, p_i = 1 \mid \sum f_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripipsumwu|&amp;lt;tex&amp;gt; 1 \mid r_i,p_i=p \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripippmtnsumwu| &amp;lt;tex&amp;gt; 1 \mid r_i,p_i=p, pmtn \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripmtnsumwu|&amp;lt;tex&amp;gt;1 \mid r_i, pmtn \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc | &amp;lt;tex&amp;gt;1 \mid outtree \mid \sum w_i C_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1precpmtnrifmax|&amp;lt;tex&amp;gt;1 \mid prec, pmtn, r_i \mid f_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1precripi1Lmax|&amp;lt;tex&amp;gt;1 \mid prec; r_i; p_i = 1 \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Специальные случаи задач для двух станков ===&lt;br /&gt;
* [[P2precpi1Lmax|&amp;lt;tex&amp;gt;P2 \mid prec, p_i = 1 \mid L_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[R2Cmax|&amp;lt;tex&amp;gt;R2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[F2Cmax|&amp;lt;tex&amp;gt;F2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[O2Cmax|&amp;lt;tex&amp;gt;O2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2ni2Cmax|&amp;lt;tex&amp;gt;J2 \mid n_{i} \leqslant 2 \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2pij1Lmax| &amp;lt;tex&amp;gt;J2\mid p_{ij} = 1\mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Задачи для произвольного числа станков ===&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[Fpij1sumwu|&amp;lt;tex&amp;gt;F \mid p_{ij} = 1 \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[PSumCi|&amp;lt;tex&amp;gt;P \mid \mid \sum C_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Pintreepi1Lmax|&amp;lt;tex&amp;gt;P \mid intree, p_{i} = 1 \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[PpmtnriLmax|&amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Ppi1sumwu|&amp;lt;tex&amp;gt;P \mid p_i=1 \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Ppi1riintegerLmax|&amp;lt;tex&amp;gt;P \mid p_i=1; r_i - integer \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[RSumCi|&amp;lt;tex&amp;gt;R \mid \mid \sum C_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[RpmtnCmax|&amp;lt;tex&amp;gt;R \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt;Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnSumCi|&amp;lt;tex&amp;gt; Q \mid pmtn \mid \sum C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnriLmax|&amp;lt;tex&amp;gt;Q \mid pmtn, r_{i} \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QSumCi|&amp;lt;tex&amp;gt;Q\mid\mid\sum{C_i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt;O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1di|&amp;lt;tex&amp;gt;O \mid p_{ij} = 1, d_i \mid - &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1sumwu|&amp;lt;tex&amp;gt; O \mid p_{i,j} = 1 \mid \sum w_{i} U_{i} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1SumTi|&amp;lt;tex&amp;gt; O \mid p_{i,j} = 1 \mid \sum T_{i} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1Cmax|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid C_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1Sumwc|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56179</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56179"/>
				<updated>2016-11-22T19:20:58Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Теорема Кёнига */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt; раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt; Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56178</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56178"/>
				<updated>2016-11-22T19:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Теорема Кёнига */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt; раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &amp;lt;/tex&amp;gt; они образуют цикл нечётной длины, что невозможно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt; Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56177</id>
		<title>Двудольные графы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56177"/>
				<updated>2016-11-22T19:15:14Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольные графы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Двудольные графы ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;span id=&amp;quot;Двудольный_граф&amp;quot;&amp;gt;'''Двудольный граф'''&amp;lt;/span&amp;gt; или '''биграф''' (англ. ''bipartite graph'') {{---}} [[Основные определения теории графов|граф]], множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами в одной доле и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; во второй обозначается &amp;lt;tex&amp;gt;K_{n,m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример двудольного графа]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56176</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56176"/>
				<updated>2016-11-22T19:12:41Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt; раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
''Необходимость.''&lt;br /&gt;
&lt;br /&gt;
Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56175</id>
		<title>Двудольные графы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56175"/>
				<updated>2016-11-22T19:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольные графы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Двудольные графы ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;span id=&amp;quot;Двудольный_граф&amp;quot;&amp;gt;'''Двудольный граф'''&amp;lt;/span&amp;gt; или '''биграф''' (англ. ''bipartite graph'') {{---}} граф, множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами в одной доле и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; во второй обозначается &amp;lt;tex&amp;gt;K_{n,m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример двудольного графа]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Основные определения теории графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56174</id>
		<title>Двудольные графы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56174"/>
				<updated>2016-11-22T19:05:51Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольные графы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Двудольные графы ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;span id=&amp;quot;Двудольный_граф&amp;quot;&amp;gt;'''Двудольный граф'''&amp;lt;/span&amp;gt; или '''биграф''' (англ. ''bipartite graph'') {{---}} граф, множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами в одной доле и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; во второй обозначается &amp;lt;tex&amp;gt;K_{n,m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример двудольного графа]]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Графы]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56173</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56173"/>
				<updated>2016-11-22T19:04:28Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt;раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2-&amp;lt;/tex&amp;gt; раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
''Необходимость.''&lt;br /&gt;
&lt;br /&gt;
Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56172</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56172"/>
				<updated>2016-11-22T19:03:22Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф &amp;lt;tex&amp;gt;2&amp;lt;/tex&amp;gt;-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольны.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
''Необходимость.''&lt;br /&gt;
&lt;br /&gt;
Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56170</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56170"/>
				<updated>2016-11-22T18:50:25Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Следствие */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
''Необходимость.''&lt;br /&gt;
&lt;br /&gt;
Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &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;
* [[Укладка графа на плоскости|Укладка графа на плоскости.]]&lt;br /&gt;
* [[Раскраска графа|Раскраска графа]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* Асанов М. О., Баранский В. А., Расин В. В. - Дискретная математика: Графы, матроиды, алгоритмы.&lt;br /&gt;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56169</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56169"/>
				<updated>2016-11-22T18:46:29Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Теорема Кёнига */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&lt;br /&gt;
&lt;br /&gt;
''Необходимость.''&lt;br /&gt;
&lt;br /&gt;
Пусть ненулевой граф &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; [[k-связность|связен]] и не имеет циклов нечетной длины. Выберем произвольно вершину &amp;lt;tex&amp;gt; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что [[Кратчайший путь в ациклическом графе|кратчайшая цепь]] &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56168</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56168"/>
				<updated>2016-11-22T18:42:05Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]].&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56167</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56167"/>
				<updated>2016-11-22T18:41:16Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]] (англ. '' bipartite graph'' or ''bigraph'').&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56166</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56166"/>
				<updated>2016-11-22T18:40:25Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Теорема Кёнига */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример [[Основные_определения_теории_графов#Двудольный_граф |двудольного]] графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]] (англ. '' bipartite graph'' or ''bigraph'').&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[Основные определения теории графов #def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56165</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56165"/>
				<updated>2016-11-22T18:39:21Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Теорема Кёнига */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример [[Основные_определения_теории_графов#Двудольный_граф |двудольного]] графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]] (англ. '' bipartite graph'' or ''bigraph'').&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все [[#def_graph_cycle_1|циклы]] в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56164</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56164"/>
				<updated>2016-11-22T18:36:16Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример [[Основные_определения_теории_графов#Двудольный_граф |двудольного]] графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Основные определения теории графов|Граф]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]] (англ. '' bipartite graph'' or ''bigraph'').&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все циклы в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56163</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56163"/>
				<updated>2016-11-22T18:35:33Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример [[Основные_определения_теории_графов#Двудольный_граф |двудольного]] графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
[[Граф|Основные определения теории графов]] 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]] (англ. '' bipartite graph'' or ''bigraph'').&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все циклы в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56162</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56162"/>
				<updated>2016-11-22T18:35:02Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример [[Основные_определения_теории_графов#Двудольный_граф |двудольного]] графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
Граф 2-[[Раскраска графа|раскрашиваемый]] тогда и только тогда, когда он [[Двудольные графы|двудольный]] (англ. '' bipartite graph'' or ''bigraph'').&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все циклы в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56161</id>
		<title>Двудольные графы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56161"/>
				<updated>2016-11-22T18:33:48Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольные графы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Двудольные графы ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;span id=&amp;quot;Двудольный_граф&amp;quot;&amp;gt;'''Двудольный граф'''&amp;lt;/span&amp;gt; или '''биграф''' (англ. ''bipartite graph'') {{---}} граф, множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами в одной доле и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; во второй обозначается &amp;lt;tex&amp;gt;K_{n,m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример двудольного графа]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56160</id>
		<title>Двудольные графы и раскраска в 2 цвета</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B_%D0%B8_%D1%80%D0%B0%D1%81%D0%BA%D1%80%D0%B0%D1%81%D0%BA%D0%B0_%D0%B2_2_%D1%86%D0%B2%D0%B5%D1%82%D0%B0&amp;diff=56160"/>
				<updated>2016-11-22T18:32:32Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Раскраска в 2 цвета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Двудольный граф ==&lt;br /&gt;
{{main|Двудольные графы}}&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример [[Основные_определения_теории_графов#Двудольный_граф |двудольного]] графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраска в 2 цвета ==&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement=&lt;br /&gt;
Граф 2-раскрашиваемый тогда и только тогда, когда он [[Двудольные графы|двудольный]] (англ. '' bipartite graph'' or ''bigraph'').&lt;br /&gt;
|proof=&lt;br /&gt;
Если множество вершин двудольного графа можно разделить на два независимых подмножества так, что ни одна из вершин ни в одном из этих подмножеств не является смежной к вершине из этого же подмножества, тогда граф &amp;lt;tex&amp;gt;G = (W, E)&amp;lt;/tex&amp;gt;  —  2-раскрашиваем. &amp;lt;tex&amp;gt;\chi(G) = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если же граф 2-раскрашиваемый, то множество его вершин можно разделить на два непересекающихся множества так, чтобы в каждом из них не нашлось двух смежных вершин. Тогда граф будет двудольным.&lt;br /&gt;
}}&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; G &amp;lt;/tex&amp;gt; является двудольным тогда и только тогда, когда все циклы в графе &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt; имеют чётную длину.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
''Достаточность.'' &lt;br /&gt;
&lt;br /&gt;
Рассмотрим двудольный граф. Начнем цикл в доле &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt;. Нужно пройти по четному числу ребер, чтобы вернуться в &amp;lt;tex&amp;gt; U &amp;lt;/tex&amp;gt; снова. Следовательно, при замыкании цикла число ребер будет четным.&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; u &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; U &amp;lt;/tex&amp;gt; лежали вершины &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt;, такие что кратчайшая цепь &amp;lt;tex&amp;gt;(u, v_0)&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;(u, v_1)&amp;lt;/tex&amp;gt; — нечётная. При этом &amp;lt;tex&amp;gt; u \in U &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;ab&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;a, b &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;a, b \in U &amp;lt;/tex&amp;gt;. Зададим &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, a) &amp;lt;/tex&amp;gt; цепь, а &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; — кратчайшая &amp;lt;tex&amp;gt; (u, b) &amp;lt;/tex&amp;gt; цепь. Обе цепи четной длины. Пусть &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; — последняя вершина цепи &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt;, принадлежащая &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;. Тогда подцепи от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; v_0  &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; P_0&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;P_1&amp;lt;/tex&amp;gt; имеют одинаковую длину (иначе бы, пройдя по более короткой подцепи от &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;v_0&amp;lt;/tex&amp;gt; мы смогли бы найти более короткую цепь от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; или от &amp;lt;tex&amp;gt; u &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt;, чем цепь &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt;  ). Так как подцепи от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt; и от &amp;lt;tex&amp;gt; v_0 &amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt; b &amp;lt;/tex&amp;gt; в цепях &amp;lt;tex&amp;gt; P_0 &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; P_1 &amp;lt;/tex&amp;gt; имеют одинаковую четность, а значит в сумме с ребром &amp;lt;tex&amp;gt; ab &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;
Так как граф является двудольным тогда и только тогда, когда все циклы четны, определить двудольность можно за один проход в глубину (англ. ''Depth-first search'').&lt;br /&gt;
На каждом шаге обхода в глубину помечаем вершину. Допустим, мы пошли в первую вершину — помечаем её как &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;. Затем просматриваем все смежные вершины, и если не помечена вершина, то на ней ставим пометку &amp;lt;tex&amp;gt; 2 &amp;lt;/tex&amp;gt; и рекурсивно переходим в нее. Если же она помечена и на ней стоит та же пометка, что и у той, из которой шли (в нашем случае &amp;lt;tex&amp;gt; 1 &amp;lt;/tex&amp;gt;), значит граф не двудольный.&lt;br /&gt;
&lt;br /&gt;
===Алгоритм проверки графа на двудольность, используя обход в ширину===&lt;br /&gt;
&lt;br /&gt;
Произведём серию поисков в ширину (англ. ''Breadth-first search''). Т.е. будем запускать поиск в ширину из каждой непосещённой вершины. Ту вершину, из которой мы начинаем идти, мы помещаем в первую долю. В процессе поиска в ширину, если мы идём в какую-то новую вершину, то мы помещаем её в долю, отличную от доли текущей вершину. Если же мы пытаемся пройти по ребру в вершину, которая уже посещена, то мы проверяем, чтобы эта вершина и текущая вершина находились в разных долях. В противном случае граф двудольным не является.&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;
* ''Харари Ф.'' Теория графов. /пер. с англ. — изд. 2-е — М.: Едиториал УРСС, 2003. — 296 с. — ISBN 5-354-00301-6&lt;br /&gt;
* [http://en.wikipedia.org/wiki/K%C3%B6nig's_theorem_(graph_theory) Теорема Кёнига]&lt;br /&gt;
* [http://e-maxx.ru/algo/bipartite_checking MAXimal :: algo :: Проверка графа на двудольность]&lt;br /&gt;
* [http://www.e-maxx.ru/algo/dfs Обход в глубину. Реализации.]&lt;br /&gt;
* [http://e-maxx.ru/algo/bfs Обход в ширину. Реализации.]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56159</id>
		<title>Двудольные графы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56159"/>
				<updated>2016-11-22T18:29:34Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольные графы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Двудольные графы ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;span id=&amp;quot;Двудольный_граф&amp;quot;&amp;gt;'''Двудольный граф'''&amp;lt;/span&amp;gt; или '''биграф''' (англ. ''bipartite graph'') {{---}} граф, множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами в одной доле и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; во второй обозначается &amp;lt;tex&amp;gt;K_{n,m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Файл: Bipartite_graph.png|300px|thumb|center|Пример [[Основные_определения_теории_графов#Двудольный_граф |двудольного]] графа]]&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56158</id>
		<title>Двудольные графы</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D0%B4%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D1%84%D1%8B&amp;diff=56158"/>
				<updated>2016-11-22T18:28:07Z</updated>
		
		<summary type="html">&lt;p&gt;188.227.78.144: /* Двудольные графы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Двудольные графы ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
&amp;lt;span id=&amp;quot;Двудольный_граф&amp;quot;&amp;gt;'''Двудольный граф'''&amp;lt;/span&amp;gt; или '''биграф''' (англ. ''bipartite graph'') {{---}} граф, множество вершин которого можно разбить на две части таким образом, что каждое ребро графа соединяет какую-то вершину из одной части с какой-то вершиной другой части, то есть не существует ребра, соединяющего две вершины из одной и той же части. Двудольный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами в одной доле и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; во второй обозначается &amp;lt;tex&amp;gt;K_{n,m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>188.227.78.144</name></author>	</entry>

	</feed>