http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&user=DariaYakovleva&feedformat=atomВикиконспекты - Вклад участника [ru]2024-03-28T20:12:58ZВклад участникаMediaWiki 1.30.0http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%9A%D1%83%D0%BA%D1%83_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8_%D1%84%D0%B0%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BA_%D1%8F%D0%B7%D1%8B%D0%BA%D1%83_%D0%B8%D0%B7_NP&diff=55357Сведение по Куку задачи факторизации к языку из NP2016-06-22T17:00:31Z<p>DariaYakovleva: переименовал NP-полнота языка FACTOR в Сведение по Куку задачи факторизации к языку из NP поверх перенаправления: неправда</p>
<hr />
<div>==Формулировка задачи==<br />
Задача факторизации '''FACTORIZE''' — это задача разложения натурального числа на простые множители. <br />
==Сведение задачи факторизации к языку FACTOR==<br />
Рассмотрим язык <tex>\mbox{FACTOR} = \{(n, x) \mid \exists k<x, ~ k \neq 1,~ n~\vdots~k\}</tex>. <br />
<br />
Используя его в качестве оракула, можно за полиномиальное время найти простые делители числа <math>n</math>. <br />
<br />
Пусть функция '''f''' разрешает язык '''FACTOR''':<br />
<br />
<tex><br />
\mbox{f(n, x)}= <br />
\begin{cases}<br />
\mbox{true}, ~(n, x) \in \mbox {FACTOR} \\<br />
\mbox{false}, ~(n, x) \not\in \mbox{FACTOR}<br />
\end{cases}<br />
</tex><br />
<br />
Тогда, воспользовавшись двоичным поиском, можно написать функцию '''p''', работающую за полином от длины входа и возвращающую список ''A'' простых делителей '''n''':<br />
<code><br />
p(n) {<br />
A = {};<br />
'''while''' (n > 1) {<br />
'''if''' (!f(n, n)) { //''если число простое - добавляем его в список делителей и завершаем цикл''<br />
A.add(n);<br />
n = 1;<br />
'''break''';<br />
}<br />
// ''Поддерживаем инвариант: у числа n' есть простой делитель x, такой что L <= x < R''<br />
R = n;<br />
L = 2;<br />
'''while''' (R > L + 1) { //''находим наименьший простой делитель''<br />
c = (L + R) / 2;<br />
'''if''' (f(n, c))<br />
R = c;<br />
'''else'''<br />
L = c;<br />
}<br />
A.add(L);<br />
n = n / L;<br />
}<br />
'''return''' A;<br />
}<br />
</code><br />
<br />
==Принадлежность языка FACTOR классу NP==<br />
<tex>\mbox{FACTOR} \in \mbox{NP}</tex>. <br />
<br />
Сертификатом '''y''' является нетривиальный делитель числа '''n''', а верификатором - функция, которая проверяет, является ли '''y''' делителем '''n''' и меньше ли он числа '''x''':<br />
<code><br />
R(<n, x>, y)<br />
{<br />
'''if''' ((y >= x) || (y <= 1))<br />
'''return''' false;<br />
'''if''' (n % y != 0)<br />
'''return''' false;<br />
'''return''' true;<br />
}<br />
</code><br />
<br />
Таким образом, задача '''FACTORIZE''' [[Сведение по Куку|сводится по Куку]] за полиномиальное время к языку '''FACTOR''', принадлежащему классу [[Класс NP|'''NP''']].</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0_FACTOR&diff=55358NP-полнота языка FACTOR2016-06-22T17:00:31Z<p>DariaYakovleva: переименовал NP-полнота языка FACTOR в Сведение по Куку задачи факторизации к языку из NP поверх перенаправления: неправда</p>
<hr />
<div>#перенаправление [[Сведение по Куку задачи факторизации к языку из NP]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Rainbow_forest_DY.png&diff=48260Файл:Rainbow forest DY.png2015-06-09T18:53:14Z<p>DariaYakovleva: загружена новая версия «Файл:Rainbow forest DY.png»</p>
<hr />
<div></div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48259Пересечение матроидов, определение, примеры2015-06-09T18:42:59Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
[[Файл:Rainbow_forest_DY.png|500px|thumb|center|Пересечение матроидов, [[Алгоритм_построения_базы_в_пересечении_матроидов|база]] матроида]]<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированный лес ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, X \rangle </tex> {{---}} ориентированнный граф.<br />
Граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. <br />
Тогда рассмотрим два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle, M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа.<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]] <tex>G</tex>, <br />
<tex>\mathcal{I}_1 = \{X' \subseteq X: X'</tex> {{---}} лес в <tex>G \}</tex>.<br />
<tex>M_2</tex> {{---}} [[Примеры_матроидов|матроид разбиений]] графа <tex>D</tex>, <br />
<tex>\mathcal{I}_2 = \{X' \subseteq X: |\deg^-(v) \cap X'| \leqslant 1, \forall v \in V \}</tex>. <br />
Пересечение данных матроидов являются множества ориентированных лесов.<br />
<br />
{{Утверждение<br />
|statement = Пересечение данных матроидов является матроид.<br />
|proof =<br />
Рассмотрим матроид пересечения <tex>M = \langle X, \mathcal{I} \rangle</tex>, <tex>A</tex> {{---}} множество ребер, <tex>\mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
<br />
Проверим выполнение аксиом независимости:<br />
<br />
1) <tex>\varnothing \in \mathcal{I}</tex><br />
<br />
Пустое множество является ориентированным деревом, а значит входит в <tex>\mathcal{I}</tex>.<br />
<br />
2) <tex>A \subset B, \ B \in \mathcal{I} \Rightarrow A \in \mathcal{I}</tex><br />
Любой подграф ориентированного леса также является ориентированным лесом, так как во-первых, степень захода каждой вершины в подграфе могла только уменьшится, во-вторых, подграф ацикличного графа {{---}} ацикличен.<br />
<br />
3) <tex>A \in \mathcal{I}, \ B \in I, \ \left\vert A \right\vert < \left\vert B \right\vert \Rightarrow \mathcal {9} x \in B \setminus A, \ A \cup \mathcal{f} x \mathcal {g} \in \mathcal{I}</tex><br />
<br />
Пусть количество вершин в множестве <tex>A</tex> равно <tex>k</tex>. <br />
Тогда количество ребер в <tex>A</tex> равно <tex>k - 1</tex>. <br />
Так как <tex>|B| > |A|</tex>, следовательно количество ребер в множестве <tex>B</tex> не меньше <tex>k</tex>.<br />
Пусть все ребра из множества <tex>B</tex> ведут в вершины множества <tex>A</tex>, значит в каждую вершину множества <tex>A</tex> входит по одному ребру множества <tex>B</tex>. <br />
Тогда возьмем то ребро, которое указывает в корень (в вершину с нулевой степенью захода), получим ориентированное дерево с новым корнем.<br />
Пусть не все ребра множества <tex>B</tex> указывают в вершины множества <tex>A</tex>, тогда возьмем то ребро <tex>uv</tex>, которое указывает в вершину не принадлежащую <tex>A</tex>. Покажем, что оно нам подойдет. <br />
Если <tex>u \in V(A)</tex>, тогда наше текущее ориентированное дерево пополнится еще одной вершиной и ведущем к ней ребру.<br />
Если <tex>u \notin V(A)</tex>, то мы получим еще одно ориентированное дерево.<br />
Таким образом, мы нашли ребро в множестве <tex>B \setminus A</tex>, которое можем добавить в множество <tex>A</tex> с сохранением независимости.<br />
<br />
}}<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48258Пересечение матроидов, определение, примеры2015-06-09T18:42:29Z<p>DariaYakovleva: /* Двудольный граф */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
[[Файл:Rainbow_forest_DY.png|500px|thumb|center|Пересечение матроидов, [[Алгоритм_построения_базы_в_пересечении_матроидов|база]] матроида]]<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированный лес ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, X \rangle </tex> {{---}} ориентированнный граф.<br />
Граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. <br />
Тогда рассмотрим два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle, M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа.<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]] <tex>G</tex>, <br />
<tex>\mathcal{I}_1 = \{X' \subseteq X: X'</tex> {{---}} лес в <tex>G \}</tex>.<br />
<tex>M_2</tex> {{---}} [[Примеры_матроидов|матроид разбиений]] графа <tex>D</tex>, <br />
<tex>\mathcal{I}_2 = \{X' \subseteq X: |\deg^-(v) \cap X'| \leqslant 1, \forall v \in V \}</tex>. <br />
Пересечение данных матроидов являются множества ориентированных лесов.<br />
<br />
{{Утверждение<br />
|statement = Пересечение данных матроидов является матроид.<br />
|proof =<br />
Рассмотрим матроид пересечения <tex>M = \langle X, \mathcal{I} \rangle</tex>, <tex>A</tex> {{---}} множество ребер, <tex>\mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
<br />
Проверим выполнение аксиом независимости:<br />
<br />
1) <tex>\varnothing \in \mathcal{I}</tex><br />
<br />
Пустое множество является ориентированным деревом, а значит входит в <tex>\mathcal{I}</tex>.<br />
<br />
2) <tex>A \subset B, \ B \in \mathcal{I} \Rightarrow A \in \mathcal{I}</tex><br />
Любой подграф ориентированного леса также является ориентированным лесом, так как во-первых, степень захода каждой вершины в подграфе могла только уменьшится, во-вторых, подграф ацикличного графа {{---}} ацикличен.<br />
<br />
3) <tex>A \in \mathcal{I}, \ B \in I, \ \left\vert A \right\vert < \left\vert B \right\vert \Rightarrow \mathcal {9} x \in B \setminus A, \ A \cup \mathcal{f} x \mathcal {g} \in \mathcal{I}</tex><br />
<br />
Пусть количество вершин в множестве <tex>A</tex> равно <tex>k</tex>. <br />
Тогда количество ребер в <tex>A</tex> равно <tex>k - 1</tex>. <br />
Так как <tex>|B| > |A|</tex>, следовательно количество ребер в множестве <tex>B</tex> не меньше <tex>k</tex>.<br />
Пусть все ребра из множества <tex>B</tex> ведут в вершины множества <tex>A</tex>, значит в каждую вершину множества <tex>A</tex> входит по одному ребру множества <tex>B</tex>. <br />
Тогда возьмем то ребро, которое указывает в корень (в вершину с нулевой степенью захода), получим ориентированное дерево с новым корнем.<br />
Пусть не все ребра множества <tex>B</tex> указывают в вершины множества <tex>A</tex>, тогда возьмем то ребро <tex>uv</tex>, которое указывает в вершину не принадлежащую <tex>A</tex>. Покажем, что оно нам подойдет. <br />
Если <tex>u \in V(A)</tex>, тогда наше текущее ориентированное дерево пополнится еще одной вершиной и ведущем к ней ребру.<br />
Если <tex>u \notin V(A)</tex>, то мы получим еще одно ориентированное дерево.<br />
Таким образом, мы нашли ребро в множестве <tex>B \setminus A</tex>, которое можем добавить в множество <tex>A</tex> с сохранением независимости.<br />
<br />
}}<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Rainbow_forest_DY.png&diff=48257Файл:Rainbow forest DY.png2015-06-09T18:41:49Z<p>DariaYakovleva: </p>
<hr />
<div></div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48256Пересечение матроидов, определение, примеры2015-06-09T18:24:28Z<p>DariaYakovleva: /* Ориентированный лес */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированный лес ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, X \rangle </tex> {{---}} ориентированнный граф.<br />
Граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. <br />
Тогда рассмотрим два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle, M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа.<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]] <tex>G</tex>, <br />
<tex>\mathcal{I}_1 = \{X' \subseteq X: X'</tex> {{---}} лес в <tex>G \}</tex>.<br />
<tex>M_2</tex> {{---}} [[Примеры_матроидов|матроид разбиений]] графа <tex>D</tex>, <br />
<tex>\mathcal{I}_2 = \{X' \subseteq X: |\deg^-(v) \cap X'| \leqslant 1, \forall v \in V \}</tex>. <br />
Пересечение данных матроидов являются множества ориентированных лесов.<br />
<br />
{{Утверждение<br />
|statement = Пересечение данных матроидов является матроид.<br />
|proof =<br />
Рассмотрим матроид пересечения <tex>M = \langle X, \mathcal{I} \rangle</tex>, <tex>A</tex> {{---}} множество ребер, <tex>\mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
<br />
Проверим выполнение аксиом независимости:<br />
<br />
1) <tex>\varnothing \in \mathcal{I}</tex><br />
<br />
Пустое множество является ориентированным деревом, а значит входит в <tex>\mathcal{I}</tex>.<br />
<br />
2) <tex>A \subset B, \ B \in \mathcal{I} \Rightarrow A \in \mathcal{I}</tex><br />
Любой подграф ориентированного леса также является ориентированным лесом, так как во-первых, степень захода каждой вершины в подграфе могла только уменьшится, во-вторых, подграф ацикличного графа {{---}} ацикличен.<br />
<br />
3) <tex>A \in \mathcal{I}, \ B \in I, \ \left\vert A \right\vert < \left\vert B \right\vert \Rightarrow \mathcal {9} x \in B \setminus A, \ A \cup \mathcal{f} x \mathcal {g} \in \mathcal{I}</tex><br />
<br />
Пусть количество вершин в множестве <tex>A</tex> равно <tex>k</tex>. <br />
Тогда количество ребер в <tex>A</tex> равно <tex>k - 1</tex>. <br />
Так как <tex>|B| > |A|</tex>, следовательно количество ребер в множестве <tex>B</tex> не меньше <tex>k</tex>.<br />
Пусть все ребра из множества <tex>B</tex> ведут в вершины множества <tex>A</tex>, значит в каждую вершину множества <tex>A</tex> входит по одному ребру множества <tex>B</tex>. <br />
Тогда возьмем то ребро, которое указывает в корень (в вершину с нулевой степенью захода), получим ориентированное дерево с новым корнем.<br />
Пусть не все ребра множества <tex>B</tex> указывают в вершины множества <tex>A</tex>, тогда возьмем то ребро <tex>uv</tex>, которое указывает в вершину не принадлежащую <tex>A</tex>. Покажем, что оно нам подойдет. <br />
Если <tex>u \in V(A)</tex>, тогда наше текущее ориентированное дерево пополнится еще одной вершиной и ведущем к ней ребру.<br />
Если <tex>u \notin V(A)</tex>, то мы получим еще одно ориентированное дерево.<br />
Таким образом, мы нашли ребро в множестве <tex>B \setminus A</tex>, которое можем добавить в множество <tex>A</tex> с сохранением независимости.<br />
<br />
}}<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48255Пересечение матроидов, определение, примеры2015-06-09T17:59:13Z<p>DariaYakovleva: /* Ориентированный лес */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированный лес ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, X \rangle </tex> {{---}} ориентированнный граф.<br />
Граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. <br />
Тогда рассмотрим два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle, M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа.<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]] <tex>G</tex>, <br />
<tex>\mathcal{I}_1 = \{X' \subseteq X: X'</tex> {{---}} лес в <tex>G \}</tex>.<br />
<tex>M_2</tex> {{---}} [[Примеры_матроидов|матроид разбиений]] графа <tex>D</tex>, <br />
<tex>\mathcal{I}_2 = \{X' \subseteq X: |\deg^-(v) \cap X'| \leqslant 1, \forall v \in V \}</tex>. <br />
Пересечение данных матроидов являются множества ориентированных лесов.<br />
<br />
{{Утверждение<br />
|statement = Пересечение данных матроидов является матроид.<br />
|proof =<br />
Рассмотрим матроид пересечения <tex>M = \langle X, \mathcal{I} \rangle</tex>, <tex>A</tex> {{---}} множество ребер, <tex>\mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
<br />
Проверим выполнение аксиом независимости:<br />
<br />
1) <tex>\varnothing \in \mathcal{I}</tex><br />
<br />
Пустое множество является ориентированным деревом, а значит входит в <tex>\mathcal{I}</tex>.<br />
<br />
2) <tex>A \subset B, \ B \in \mathcal{I} \Rightarrow A \in \mathcal{I}</tex><br />
Любой подграф ориентированного леса также является ориентированным лесом, так как во-первых, степень захода каждой вершины в подграфе могла только уменьшится, во-вторых, подграф ацикличного графа {{---}} ацикличен.<br />
<br />
3) <tex>A \in \mathcal{I}, \ B \in I, \ \left\vert A \right\vert < \left\vert B \right\vert \Rightarrow \mathcal {9} x \in B \setminus A, \ A \cup \mathcal{f} x \mathcal {g} \in \mathcal{I}</tex><br />
<br />
Найдем такое ребро в множестве <tex>B \setminus A</tex>, которое не указывает ни в одну из вершин, в которые указывают ребра из множества <tex>A</tex>.<br />
Пусть количество вершин в множестве <tex>A</tex> равно <tex>k</tex>. <br />
Тогда количество ребер в <tex>A</tex> равно <tex>k - 1</tex>. <br />
Так как <tex>|B| > |A|</tex>, следовательно количество ребер в множестве <tex>B</tex> не меньше <tex>k</tex>.<br />
Пусть все ребра из множества <tex>B</tex> ведут в вершины множества <tex>A</tex>, значит в каждую вершину множества <tex>A</tex> входит по одному ребру множества <tex>B</tex>. <br />
Тогда возьмем то ребро, которое указывает в корень (в вершину с нулевой степенью захода), получим ориентированное дерево с новым корнем.<br />
Пусть не все ребра множества <tex>B</tex> указывают в вершины множества <tex>A</tex>, тогда возьмем то ребро <tex>uv</tex>, которое указывает в вершину не принадлежащую <tex>A</tex>. Покажем, что оно нам подойдет. <br />
Если <tex>u \in V(A)</tex>, тогда наше текущее ориентированное дерево пополнится еще одной вершиной и ведущем к ней ребру.<br />
Если <tex>u \notin V(A)</tex>, то мы получим еще одно ориентированное дерево.<br />
Таким образом, мы нашли ребро в множестве <tex>B \setminus A</tex>, которое можем добавить в множество <tex>A</tex> с сохранением независимости.<br />
<br />
}}<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48254Пересечение матроидов, определение, примеры2015-06-09T17:55:22Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированный лес ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, X \rangle </tex> {{---}} ориентированнный граф.<br />
Граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. <br />
Тогда рассмотрим два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle, M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа.<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]] <tex>G</tex>, <br />
<tex>\mathcal{I}_1 = \{X' \subseteq X: X'</tex> {{---}} лес в <tex>G \}</tex>.<br />
<tex>M_2</tex> {{---}} [[Примеры_матроидов|матроид разбиений]] графа <tex>D</tex>, <br />
<tex>\mathcal{I}_2 = \{X' \subseteq X: |\deg^-(v) \cap X'| \leqslant 1, \forall v \in V \}</tex>. <br />
Пересечением данных матроидов являются множества ориентированных лесов.<br />
<br />
{{Утверждение<br />
|statement = Пересечением данных матроидов является матроид.<br />
|proof =<br />
Рассмотрим матроид пересечения <tex>M = \langle X, \mathcal{I} \rangle</tex>, <tex>A</tex> {{---}} множество ребер, <tex>\mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
<br />
Проверим выполнение аксиом независимости:<br />
<br />
1) <tex>\varnothing \in \mathcal{I}</tex><br />
<br />
Пустое множество является ориентированным деревом, а значит входит в <tex>\mathcal{I}</tex>.<br />
<br />
2) <tex>A \subset B, \ B \in \mathcal{I} \Rightarrow A \in \mathcal{I}</tex><br />
Любой подграф ориентированного леса также является ориентированным лесом, так как во-первых, степень захода каждой вершины в подграфе могла только уменьшится, во-вторых, подграф ацикличного графа {{---}} ацикличен.<br />
<br />
3) <tex>A \in \mathcal{I}, \ B \in I, \ \left\vert A \right\vert < \left\vert B \right\vert \Rightarrow \mathcal {9} x \in B \setminus A, \ A \cup \mathcal{f} x \mathcal {g} \in \mathcal{I}</tex><br />
<br />
Найдем такое ребро в множестве <tex>B \setminus A</tex>, которое не указывает ни в одну из вершин, в которые указывают ребра из множества <tex>A</tex>.<br />
Пусть количество вершин в множестве <tex>A</tex> равно <tex>k</tex>. <br />
Тогда количество ребер в <tex>A</tex> равно <tex>k - 1</tex>. <br />
Так как <tex>|B| > |A|</tex>, следовательно количество ребер в множестве <tex>B</tex> не меньше <tex>k</tex>.<br />
Пусть все ребра из множества <tex>B</tex> ведут в вершины множества <tex>A</tex>, значит в каждую вершину множества <tex>A</tex> входит по одному ребру множества <tex>B</tex>. <br />
Тогда возьмем то ребро, которое указывает в корень (в вершину с нулевой степенью захода), получим ориентированное дерево с новым корнем.<br />
Пусть не все ребра множества <tex>B</tex> указывают в вершины множества <tex>A</tex>, тогда возьмем то ребро <tex>uv</tex>, которое указывает в вершину не принадлежащую <tex>A</tex>. Покажем, что оно нам подойдет. <br />
Если <tex>u \in V(A)</tex>, тогда наше текущее ориентированное дерево пополнится еще одной вершиной и ведущем к ней ребру.<br />
Если <tex>u \notin V(A)</tex>, то мы получим еще одно ориентированное дерево.<br />
Таким образом, мы нашли ребро в множестве <tex>B \setminus A</tex>, которое можем добавить в множество <tex>A</tex> с сохранением независимости.<br />
<br />
}}<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48253Пересечение матроидов, определение, примеры2015-06-09T17:54:11Z<p>DariaYakovleva: /* Ориентированное дерево */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, X \rangle </tex> {{---}} ориентированнный граф.<br />
Граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. <br />
Тогда рассмотрим два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle, M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа.<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]] <tex>G</tex>, <br />
<tex>\mathcal{I}_1 = \{X' \subseteq X: X'</tex> {{---}} лес в <tex>G \}</tex>.<br />
<tex>M_2</tex> {{---}} [[Примеры_матроидов|матроид разбиений]] графа <tex>D</tex>, <br />
<tex>\mathcal{I}_2 = \{X' \subseteq X: |\deg^-(v) \cap X'| \leqslant 1, \forall v \in V \}</tex>. <br />
Пересечением данных матроидов являются множества ориентированных лесов.<br />
<br />
{{Утверждение<br />
|statement = Пересечением данных матроидов является матроид.<br />
|proof =<br />
Рассмотрим матроид пересечения <tex>M = \langle X, \mathcal{I} \rangle</tex>, <tex>A</tex> {{---}} множество ребер, <tex>\mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
<br />
Проверим выполнение аксиом независимости:<br />
<br />
1) <tex>\varnothing \in \mathcal{I}</tex><br />
<br />
Пустое множество является ориентированным деревом, а значит входит в <tex>\mathcal{I}</tex>.<br />
<br />
2) <tex>A \subset B, \ B \in \mathcal{I} \Rightarrow A \in \mathcal{I}</tex><br />
Любой подграф ориентированного леса также является ориентированным лесом, так как во-первых, степень захода каждой вершины в подграфе могла только уменьшится, во-вторых, подграф ацикличного графа {{---}} ацикличен.<br />
<br />
3) <tex>A \in \mathcal{I}, \ B \in I, \ \left\vert A \right\vert < \left\vert B \right\vert \Rightarrow \mathcal {9} x \in B \setminus A, \ A \cup \mathcal{f} x \mathcal {g} \in \mathcal{I}</tex><br />
<br />
Найдем такое ребро в множестве <tex>B \setminus A</tex>, которое не указывает ни в одну из вершин, в которые указывают ребра из множества <tex>A</tex>.<br />
Пусть количество вершин в множестве <tex>A</tex> равно <tex>k</tex>. <br />
Тогда количество ребер в <tex>A</tex> равно <tex>k - 1</tex>. <br />
Так как <tex>|B| > |A|</tex>, следовательно количество ребер в множестве <tex>B</tex> не меньше <tex>k</tex>.<br />
Пусть все ребра из множества <tex>B</tex> ведут в вершины множества <tex>A</tex>, значит в каждую вершину множества <tex>A</tex> входит по одному ребру множества <tex>B</tex>. <br />
Тогда возьмем то ребро, которое указывает в корень (в вершину с нулевой степенью захода), получим ориентированное дерево с новым корнем.<br />
Пусть не все ребра множества <tex>B</tex> указывают в вершины множества <tex>A</tex>, тогда возьмем то ребро <tex>uv</tex>, которое указывает в вершину не принадлежащую <tex>A</tex>. Покажем, что оно нам подойдет. <br />
Если <tex>u \in V(A)</tex>, тогда наше текущее ориентированное дерево пополнится еще одной вершиной и ведущем к ней ребру.<br />
Если <tex>u \notin V(A)</tex>, то мы получим еще одно ориентированное дерево.<br />
Таким образом, мы нашли ребро в множестве <tex>B \setminus A</tex>, которое можем добавить в множество <tex>A</tex> с сохранением независимости.<br />
<br />
}}<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48251Пересечение матроидов, определение, примеры2015-06-09T16:26:25Z<p>DariaYakovleva: /* Ориентированное дерево */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} ориентированнный граф.<br />
Граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. <br />
Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа.<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]] <tex>G</tex>, <br />
<tex>\mathcal{I}_1 = \{A' \subseteq A: A'</tex> {{---}} лес в <tex>G \}</tex>.<br />
<tex>M_2</tex> {{---}} [[Примеры_матроидов|матроид разбиений]] графа <tex>D</tex>, <br />
<tex>\mathcal{I}_2 = \{A' \subseteq A: |\deg^-(v) \cap A'| \leqslant 1, \forall v \in V \}</tex>. <br />
Пересечением данных матроидов являются множества ориентированных деревьев.<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48250Пересечение матроидов, определение, примеры2015-06-09T15:19:53Z<p>DariaYakovleva: /* Ориентированное дерево */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''R-ориентированное дерево''' (англ. ''r-arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина <tex>r</tex> имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечение данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48249Алгоритм построения базы в пересечении матроидов2015-06-09T15:14:56Z<p>DariaYakovleva: </p>
<hr />
<div>{{Задача<br />
|definition=<br />
Даны матроиды <tex>M_1 = \langle S, \mathcal{I}_1 \rangle</tex> и <tex>M_2 = \langle S, \mathcal{I}_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в [[Пересечение_матроидов,_определение,_примеры|пересечении]] <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) \mid y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> <br />
<tex>\cup \{ (z', y') \mid z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J \mid J + z \in \mathcal{I}_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J \mid J + z \in \mathcal{I}_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \leqslant |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in \mathcal{I}_1</tex> при том, что <tex>J + z \notin \mathcal{I}_1</tex>. В противном случае <tex>J + z \in \mathcal{I}_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in \mathcal{I}_1</tex>, а <tex>J + z \notin \mathcal{I}_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in \mathcal{I}_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \leqslant |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in \mathcal{I}_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in \mathcal{I}_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \geqslant r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in \mathcal{I}_1</tex>.<br />
К тому же, <tex>\forall i \geqslant 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin \mathcal{I}_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in \mathcal{I}_1, G + z_0 \in \mathcal{I}_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in \mathcal{I}_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in \mathcal{I}_2</tex> и, следовательно, <tex>J' \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J \mid J + z \in \mathcal{I}_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J \mid J + z \in \mathcal{I}_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
==== Подсказки ====<br />
* Воспользуйтесь одним массивом для проверки множества на независимость по цветам,<br />
* для проверки ацикличности графа при добавлении ребра можно использовать [[СНМ_(наивные_реализации)|СНМ]] или [[Обход_в_глубину,_цвета_вершин|обходом в глубину]],<br />
* для нахождения кратчайшего пути можно использовать [[Обход_в_ширину|обход в ширину]], первоначально добавив фиктивную вершину, соединив её с вершинами из множества <tex>X_1</tex>.<br />
<br />
== Теорема Эдмондса-Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса-Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \leqslant r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \leqslant r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \leqslant r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x \mid I \cup \{x\} \in \mathcal{I}_1\right\}</tex>, <tex>T = \left\{x \mid I \cup \{x\} \in \mathcal{I}_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in \mathcal{I}_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in \mathcal{I}_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u \mid u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in \mathcal{I}_1</tex>. Если <tex>I \cup \{w\} \in \mathcal{I}_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin \mathcal{I}_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in \mathcal{I}_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== См. также==<br />
* [[Пересечение матроидов, определение, примеры]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
== Источники информации ==<br />
* ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48248Алгоритм построения базы в пересечении матроидов2015-06-09T15:05:35Z<p>DariaYakovleva: /* См. также */</p>
<hr />
<div>{{Задача<br />
|definition=<br />
Даны матроиды <tex>M_1 = \langle S, \mathcal{I}_1 \rangle</tex> и <tex>M_2 = \langle S, \mathcal{I}_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в [[Пересечение_матроидов,_определение,_примеры|пересечении]] <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \leqslant |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in \mathcal{I}_1</tex> при том, что <tex>J + z \notin \mathcal{I}_1</tex>. В противном случае <tex>J + z \in \mathcal{I}_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in \mathcal{I}_1</tex>, а <tex>J + z \notin \mathcal{I}_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in \mathcal{I}_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \leqslant |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in \mathcal{I}_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in \mathcal{I}_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \geqslant r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in \mathcal{I}_1</tex>.<br />
К тому же, <tex>\forall i \geqslant 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin \mathcal{I}_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in \mathcal{I}_1, G + z_0 \in \mathcal{I}_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in \mathcal{I}_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in \mathcal{I}_2</tex> и, следовательно, <tex>J' \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
==== Подсказки ====<br />
* Воспользуйтесь одним массивом для проверки множества на независимость по цветам,<br />
* для проверки ацикличности графа при добавлении ребра можно использовать [[СНМ_(наивные_реализации)|СНМ]] или [[Обход_в_глубину,_цвета_вершин|обходом в глубину]],<br />
* для нахождения кратчайшего пути можно использовать [[Обход_в_ширину|обход в ширину]], первоначально добавив фиктивную вершину, соединив её с вершинами из множества <tex>X_1</tex>.<br />
<br />
== Теорема Эдмондса-Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса-Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \leqslant r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \leqslant r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \leqslant r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in \mathcal{I}_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in \mathcal{I}_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in \mathcal{I}_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in \mathcal{I}_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in \mathcal{I}_1</tex>. Если <tex>I \cup \{w\} \in \mathcal{I}_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin \mathcal{I}_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in \mathcal{I}_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== См. также==<br />
* [[Пересечение матроидов, определение, примеры]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
== Источники информации ==<br />
* ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48247Алгоритм построения базы в пересечении матроидов2015-06-09T15:04:51Z<p>DariaYakovleva: /* Подсказки */</p>
<hr />
<div>{{Задача<br />
|definition=<br />
Даны матроиды <tex>M_1 = \langle S, \mathcal{I}_1 \rangle</tex> и <tex>M_2 = \langle S, \mathcal{I}_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в [[Пересечение_матроидов,_определение,_примеры|пересечении]] <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \leqslant |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in \mathcal{I}_1</tex> при том, что <tex>J + z \notin \mathcal{I}_1</tex>. В противном случае <tex>J + z \in \mathcal{I}_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in \mathcal{I}_1</tex>, а <tex>J + z \notin \mathcal{I}_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in \mathcal{I}_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \leqslant |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in \mathcal{I}_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in \mathcal{I}_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \geqslant r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in \mathcal{I}_1</tex>.<br />
К тому же, <tex>\forall i \geqslant 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin \mathcal{I}_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in \mathcal{I}_1, G + z_0 \in \mathcal{I}_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in \mathcal{I}_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in \mathcal{I}_2</tex> и, следовательно, <tex>J' \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
==== Подсказки ====<br />
* Воспользуйтесь одним массивом для проверки множества на независимость по цветам,<br />
* для проверки ацикличности графа при добавлении ребра можно использовать [[СНМ_(наивные_реализации)|СНМ]] или [[Обход_в_глубину,_цвета_вершин|обходом в глубину]],<br />
* для нахождения кратчайшего пути можно использовать [[Обход_в_ширину|обход в ширину]], первоначально добавив фиктивную вершину, соединив её с вершинами из множества <tex>X_1</tex>.<br />
<br />
== Теорема Эдмондса-Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса-Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \leqslant r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \leqslant r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \leqslant r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in \mathcal{I}_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in \mathcal{I}_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in \mathcal{I}_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in \mathcal{I}_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in \mathcal{I}_1</tex>. Если <tex>I \cup \{w\} \in \mathcal{I}_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin \mathcal{I}_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in \mathcal{I}_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== См. также==<br />
* [[Пересечение_матроидов,_определение,_примеры]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
== Источники информации ==<br />
* ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48246Пересечение матроидов, определение, примеры2015-06-09T14:53:42Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это [https://ru.wikipedia.org/wiki/NP-%D0%BF%D0%BE%D0%BB%D0%BD%D0%B0%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B0| NP-полная задача].<br />
<br />
<br />
== Разноцветный лес ==<br />
<br />
<tex>M_1</tex> {{---}} [[Примеры_матроидов|графовый матроид]], <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это '''разноцветный лес''' (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} [[Двудольные_графы_и_раскраска_в_2_цвета|двудольный граф]] и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''R-ориентированное дерево''' (англ. ''r-arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина <tex>r</tex> имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода <tex>1</tex> (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры матроидов]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48186Пересечение матроидов, определение, примеры2015-06-08T21:41:30Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это NP-полная задача.<br />
<br />
}}<br />
<br />
== Разноцветное дерево ==<br />
<br />
<tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это разноцветный лес (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in \mathcal{I}, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in \mathcal{I}</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода 1 (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры_матроидов]]<br />
* [[Алгоритм_построения_базы_в_пересечении_матроидов]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48182Алгоритм построения базы в пересечении матроидов2015-06-08T21:27:48Z<p>DariaYakovleva: /* Псевдокод */</p>
<hr />
<div>{{Задача<br />
|definition=<br />
Даны матроиды <tex>M_1 = \langle S, \mathcal{I}_1 \rangle</tex> и <tex>M_2 = \langle S, \mathcal{I}_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в [[Пересечение_матроидов,_определение,_примеры|пересечении]] <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \leqslant |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in \mathcal{I}_1</tex> при том, что <tex>J + z \notin \mathcal{I}_1</tex>. В противном случае <tex>J + z \in \mathcal{I}_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in \mathcal{I}_1</tex>, а <tex>J + z \notin \mathcal{I}_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in \mathcal{I}_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \leqslant |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in \mathcal{I}_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in \mathcal{I}_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \geqslant r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in \mathcal{I}_1</tex>.<br />
К тому же, <tex>\forall i \geqslant 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin \mathcal{I}_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in \mathcal{I}_1, G + z_0 \in \mathcal{I}_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in \mathcal{I}_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in \mathcal{I}_2</tex> и, следовательно, <tex>J' \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
==== Подсказки ====<br />
* Воспользуйтесь одним массивом для проверки множества на независимость по цветам<br />
* Для проверки ацикличности графа при добавлении ребра можно использовать СНМ или поиск в глубину<br />
* Для нахождения кратчайшего пути можно использовать поиск в ширину, первоначально добавив фиктивную вершину, соединив ее с вершинами из множества <tex>X_1</tex><br />
<br />
== Теорема Эдмондса-Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса-Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \leqslant r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \leqslant r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \leqslant r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in \mathcal{I}_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in \mathcal{I}_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in \mathcal{I}_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in \mathcal{I}_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in \mathcal{I}_1</tex>. Если <tex>I \cup \{w\} \in \mathcal{I}_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin \mathcal{I}_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in \mathcal{I}_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== См. также==<br />
* [[Пересечение_матроидов,_определение,_примеры]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
== Источники информации ==<br />
* ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48181Алгоритм построения базы в пересечении матроидов2015-06-08T21:09:09Z<p>DariaYakovleva: </p>
<hr />
<div>{{Задача<br />
|definition=<br />
Даны матроиды <tex>M_1 = \langle S, \mathcal{I}_1 \rangle</tex> и <tex>M_2 = \langle S, \mathcal{I}_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в [[Пересечение_матроидов,_определение,_примеры|пересечении]] <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \leqslant |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in \mathcal{I}_1</tex> при том, что <tex>J + z \notin \mathcal{I}_1</tex>. В противном случае <tex>J + z \in \mathcal{I}_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in \mathcal{I}_1</tex>, а <tex>J + z \notin \mathcal{I}_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in \mathcal{I}_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \leqslant |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in \mathcal{I}_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in \mathcal{I}_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \geqslant r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in \mathcal{I}_1</tex>.<br />
К тому же, <tex>\forall i \geqslant 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin \mathcal{I}_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in \mathcal{I}_1, G + z_0 \in \mathcal{I}_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in \mathcal{I}_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in \mathcal{I}_2</tex> и, следовательно, <tex>J' \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
== Теорема Эдмондса-Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса-Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \leqslant r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \leqslant r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \leqslant r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in \mathcal{I}_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in \mathcal{I}_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in \mathcal{I}_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in \mathcal{I}_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in \mathcal{I}_1</tex>. Если <tex>I \cup \{w\} \in \mathcal{I}_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin \mathcal{I}_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in \mathcal{I}_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== См. также==<br />
* [[Пересечение_матроидов,_определение,_примеры]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
== Источники информации ==<br />
* ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48179Пересечение матроидов, определение, примеры2015-06-08T21:07:09Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
* Пересечение матроидов не всегда является матроидом.<br />
* Пересечение трех и более матроидов {{---}} это NP-полная задача.<br />
<br />
}}<br />
<br />
== Разноцветное дерево ==<br />
<br />
<tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это разноцветный лес (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in I, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in I</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in I, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in I</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода 1 (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры_матроидов]]<br />
* [[Алгоритм_построения_базы_в_пересечении_матроидов]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48178Алгоритм построения базы в пересечении матроидов2015-06-08T21:06:43Z<p>DariaYakovleva: </p>
<hr />
<div>{{Задача<br />
|definition=<br />
Даны матроиды <tex>M_1 = \langle S, \mathcal{I}_1 \rangle</tex> и <tex>M_2 = \langle S, \mathcal{I}_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в [[Пересечение_матроидов,_определение,_примеры|пересечении]] <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \leqslant |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in \mathcal{I}_1</tex> при том, что <tex>J + z \notin \mathcal{I}_1</tex>. В противном случае <tex>J + z \in \mathcal{I}_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in \mathcal{I}_1</tex>, а <tex>J + z \notin \mathcal{I}_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in \mathcal{I}_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \leqslant |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in \mathcal{I}_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in \mathcal{I}_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \geqslant r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in \mathcal{I}_1</tex>.<br />
К тому же, <tex>\forall i \geqslant 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin \mathcal{I}_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in \mathcal{I}_1, G + z_0 \in \mathcal{I}_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in \mathcal{I}_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in \mathcal{I}_2</tex> и, следовательно, <tex>J' \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
== Теорема Эдмондса - Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса - Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \leqslant r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \leqslant r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \leqslant r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in \mathcal{I}_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in \mathcal{I}_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in \mathcal{I}_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in \mathcal{I}_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in \mathcal{I}_1</tex>. Если <tex>I \cup \{w\} \in \mathcal{I}_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin \mathcal{I}_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in \mathcal{I}_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== См. также==<br />
* [[Пересечение_матроидов,_определение,_примеры]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
== Источники информации ==<br />
* ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48176Алгоритм построения базы в пересечении матроидов2015-06-08T21:03:06Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, \mathcal{I}_1 \rangle</tex> и <tex>M_2 = \langle S, \mathcal{I}_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \leqslant |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in \mathcal{I}_1</tex> при том, что <tex>J + z \notin \mathcal{I}_1</tex>. В противном случае <tex>J + z \in \mathcal{I}_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in \mathcal{I}_1</tex>, а <tex>J + z \notin \mathcal{I}_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in \mathcal{I}_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \leqslant |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in \mathcal{I}_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in \mathcal{I}_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \geqslant r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in \mathcal{I}_1 \cap \mathcal{I}_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in \mathcal{I}_1</tex>.<br />
К тому же, <tex>\forall i \geqslant 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin \mathcal{I}_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in \mathcal{I}_1, G + z_0 \in \mathcal{I}_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in \mathcal{I}_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in \mathcal{I}_2</tex> и, следовательно, <tex>J' \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in \mathcal{I}_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
== Теорема Эдмондса - Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса - Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \leqslant r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \leqslant r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \leqslant r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in \mathcal{I}_1 \cap \mathcal{I}_2 } |I| \leqslant \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in \mathcal{I}_1 \cap \mathcal{I}_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in \mathcal{I}_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in \mathcal{I}_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in \mathcal{I}_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in \mathcal{I}_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in \mathcal{I}_1 \cap \mathcal{I}_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in \mathcal{I}_1</tex>. Если <tex>I \cup \{w\} \in \mathcal{I}_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin \mathcal{I}_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in \mathcal{I}_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== См. также==<br />
* [[Пересечение_матроидов,_определение,_примеры]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
== Источники информации ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48170Пересечение матроидов, определение, примеры2015-06-08T20:40:31Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. <br />
<br />
'''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
# Пересечение матроидов не всегда является матроидом.<br />
# Пересечение трех и более матроидов {{---}} это NP-полная задача.<br />
<br />
}}<br />
<br />
== Разноцветное дерево ==<br />
<br />
<tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это разноцветный лес (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in I, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in I</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in I, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in I</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода 1 (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры_матроидов]]<br />
* [[Алгоритм_построения_базы_в_пересечении_матроидов]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48169Пересечение матроидов, определение, примеры2015-06-08T20:39:02Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. '''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
}}<br />
<br />
<br />
# Пересечение матроидов не всегда является матроидом.<br />
# Пересечение трех и более матроидов {{---}} это NP-полная задача.<br />
<br />
== Разноцветное дерево ==<br />
<br />
<tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это разноцветный лес (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} ребра разноцветного леса, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in I, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in I</tex> (См. пример 1)<br />
[[Файл:Example2_DY.png|300px|thumb|left|Пример 1]]<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in I, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in I</tex> (См. пример 2)<br />
[[Файл:Example_DY.png|300px|thumb|left|Пример 2]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода 1 (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры_матроидов]]<br />
* [[Алгоритм_построения_базы_в_пересечении_матроидов]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Example2_DY.png&diff=48166Файл:Example2 DY.png2015-06-08T20:37:03Z<p>DariaYakovleva: </p>
<hr />
<div></div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48162Пересечение матроидов, определение, примеры2015-06-08T19:48:19Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. '''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
}}<br />
<br />
<br />
# Пересечение матроидов не всегда является матроидом.<br />
# Пересечение трех и более матроидов {{---}} это NP-полная задача.<br />
<br />
== Разноцветное дерево ==<br />
<br />
<tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это разноцветный лес (англ. ''rainbow forests'').<br />
<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
<br />
}}<br />
<br />
== Двудольный граф ==<br />
Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа.<br />
{{Утверждение<br />
|statement =<br />
Пересечение данных матроидов не является матроидом.<br />
|proof =<br />
Рассмотрим пару <tex>\langle X, \mathcal{I}\rangle</tex>, <tex>X</tex> {{---}} носитель, <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
Данная пара не является матроидом, так как не выполняется третье свойство матроида, то есть <tex>\exists A, B \in I, |A| > |B| </tex> и <tex>\nexists \, x \in A \setminus B : B \cup \{x\} \in I</tex> (См. пример 1)<br />
[[Файл:Example_DY.png|200px|thumb|left|Пример 1]]<br />
}}<br />
<br />
== Ориентированное дерево ==<br />
{{Определение<br />
|definition=<br />
'''Ориентированное дерево''' (англ. ''arborescence'') {{---}} ацикличный орграф (ориентированный граф, не содержащий циклов), в котором только одна вершина имеет нулевую степень захода (в неё не ведут дуги), а все остальные вершины имеют степень захода 1 (в них ведёт ровно по одной дуге).<br />
}}<br />
Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры_матроидов]]<br />
* [[Алгоритм_построения_базы_в_пересечении_матроидов]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Example_DY.png&diff=48161Файл:Example DY.png2015-06-08T19:44:42Z<p>DariaYakovleva: </p>
<hr />
<div></div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48160Пересечение матроидов, определение, примеры2015-06-08T19:13:54Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, \mathcal{I}_1\rangle</tex> и <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>. '''Пересечением матроидов''' (англ. ''matroid intersection'') <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, \mathcal{I} \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> \mathcal{I} = \mathcal{I}_1 \cap \mathcal{I}_2</tex>.<br />
}}<br />
<br />
<br />
# Пересечение матроидов не всегда является матроидом.<br />
# Пересечение трех и более матроидов {{---}} это NP-полная задача.<br />
<br />
==Примеры==<br />
<br />
# <tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это разноцветный лес (англ. ''rainbow forests'').<br />
# Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, \mathcal{I}_1 \rangle</tex>, <tex>M_2 = \langle X, \mathcal{I}_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>\mathcal{I}_1 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in L \}</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg(v) \leqslant 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа. Заметим, что пересечение данных матроидов не является матроидом.<br />
# Пусть <tex>D = \langle V, A \rangle </tex> {{---}} [https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%28%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%B3%D1%80%D0%B0%D1%84%D0%BE%D0%B2%29|<tex>r</tex>-ориентированное дерево]. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, \mathcal{I}_1 \rangle, M_2 = \langle A, \mathcal{I}_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>\mathcal{I}_2 = \{F \subseteq X: \deg^-(v) \leqslant 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
== См. также==<br />
* [[Примеры_матроидов]]<br />
* [[Алгоритм_построения_базы_в_пересечении_матроидов]]<br />
* [[Алгоритм_построения_базы_в_объединении_матроидов]]<br />
<br />
==Источники информации ==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%AD%D0%B4%D0%BC%D0%BE%D0%BD%D0%B4%D1%81%D0%B0-%D0%9B%D0%BE%D1%83%D0%BB%D0%B5%D1%80%D0%B0&diff=48037Теорема Эдмондса-Лоулера2015-06-07T19:17:35Z<p>DariaYakovleva: Перенаправление на Алгоритм построения базы в пересечении матроидов</p>
<hr />
<div>#перенаправление [[Алгоритм_построения_базы_в_пересечении_матроидов]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%AD%D0%B4%D0%BC%D0%BE%D0%BD%D0%B4%D1%81%D0%B0-%D0%9B%D0%BE%D1%83%D0%BB%D0%B5%D1%80%D0%B0&diff=48036Теорема Эдмондса-Лоулера2015-06-07T19:17:05Z<p>DariaYakovleva: Перенаправление на Пересечение матроидов, определение, примеры</p>
<hr />
<div>#перенаправление [[Пересечение_матроидов,_определение,_примеры]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48035Алгоритм построения базы в пересечении матроидов2015-06-07T19:11:22Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае <tex>J + z \in I_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1, G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
== Теорема Эдмондса - Лоулера ==<br />
<br />
{{Теорема<br />
|about=<br />
Эдмондса - Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, I_1\rangle</tex>, <tex>M_2=\langle X, I_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in I_1 \cap I_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in I_1 \cap I_2 } |I| \le \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in I_1 \cap I_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \le r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \le r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \le r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in I_1 \cap I_2 } |I| \le \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in I_1 \cap I_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in I_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in I_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in I_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in I_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in I_1 \cap I_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in I_1</tex>. Если <tex>I \cup \{w\} \in I_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin I_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in I_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%AD%D0%B4%D0%BC%D0%BE%D0%BD%D0%B4%D1%81%D0%B0-%D0%9B%D0%BE%D1%83%D0%BB%D0%B5%D1%80%D0%B0&diff=48027Теорема Эдмондса-Лоулера2015-06-07T18:52:56Z<p>DariaYakovleva: /* Условие теоремы */</p>
<hr />
<div>== Условие теоремы ==<br />
{{Теорема<br />
|about=<br />
Эдмондса - Лоулера<br />
|statement= Пусть <tex>M_1=\langle X, I_1\rangle</tex>, <tex>M_2=\langle X, I_2\rangle</tex> {{---}} матроиды. Тогда <br><br />
<tex>\max\limits_{I \in I_1 \cap I_2 } |I| = \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex>.<br />
Где <tex>r_1</tex> и <tex>r_2</tex> {{---}} ранговые функции в первом и втором матроиде соответственно.<br />
|proof=<br />
[[Файл:El_graph2.png|thumb|140px|right|Граф замен, кратчайший путь]]<br />
[[Файл:El_graph.png|thumb|140px|right|Завершение алгоритма]]<br />
<div><br />
Докажем неравенство <tex>\max\limits_{I \in I_1 \cap I_2 } |I| \le \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
Выберем произвольные <tex>I \in I_1 \cap I_2</tex>, <tex>A \subseteq X</tex>, тогда<br />
<br />
<tex>|I| = |I \cap A| + |I \cap (X \setminus A)|</tex><br />
<br />
<tex>I \cap A</tex> и <tex>I \cap (X \setminus A)</tex> {{---}} независимые в обоих матроидах (как подмножества независимового <tex>I</tex>), значит<br />
<br />
<tex>|I| = r_1(I \cap A) + r_2(I \cap (X \setminus A))</tex><br />
<br />
Но <tex>r_1(I \cap A) \le r_1(A)</tex> и <tex>r_2(I \cap (X \setminus A)) \le r_2(X \setminus A)</tex>, значит<br />
<br />
<tex>|I| \le r_1(A) + r_2(X \setminus A)</tex><br />
<br />
В силу произвольности <tex>I</tex> и <tex>A</tex> получаем<br />
<br />
<tex>\max\limits_{I \in I_1 \cap I_2 } |I| \le \min\limits_{A \subseteq X} \left(r_1(A) + r_2(X \setminus A)\right)</tex><br />
<br />
<br />
Конструктивно построим <tex>\forall M_1, M_2</tex> такие <tex>I \in I_1 \cap I_2</tex> и <tex>A \subseteq X</tex>, что <tex>|I| = r_1(A) + r_2(X \setminus A)</tex>.<br />
<br />
Обозначим <tex>S = \left\{x|I \cup \{x\} \in I_1\right\}</tex>, <tex>T = \left\{x|I \cup \{x\} \in I_2\right\}</tex>. Если <tex>S \cap T \ne \varnothing</tex>, добавим их пересечение в <tex>I</tex>.<br />
<br />
Построим [[Граф замен для двух матроидов|граф замен]] <tex>G_I</tex>. Добавим вершину <tex>z</tex>, не влияющую на независимость в первом матроиде {{---}} из неё будут вести рёбра во все вершины множества <tex>S</tex>. Пусть <tex>p</tex> {{---}} кратчайший путь из <tex>S</tex> в <tex>T</tex>, <tex>p_1</tex> {{---}} путь <tex>p</tex> с добавленным в начало ребром из <tex>z</tex>. По [[Лемма о единственном паросочетании в графе замен|лемме о единственном паросочетании]] и [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем|лемме о единственном паросочетании, индуцированном кратчайшем путём]] <tex>I \bigtriangleup p_1 \in I_2</tex>. Теперь добавим вершину <tex>u</tex>, не влияющую на независимость во втором матроиде {{---}} в неё будут вести рёбра из всех вершин множества <tex>T</tex>. Тогда <tex>p_2</tex> (путь <tex>p</tex> с добавленным ребром в <tex>u</tex>) — кратчайший путь из <tex>S</tex> в <tex>u</tex>. Аналогично, <tex>I \bigtriangleup p_2 \in I_1</tex>. Отсюда следует, что <tex>I \bigtriangleup p \in I_1 \cap I_2</tex>, причём <tex>|I \bigtriangleup p| = |I| + 1</tex>.</div><br />
<br />
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось.<br />
Введём обозначение: <tex>A = \{u|u \rightsquigarrow T\}</tex>. <br />
<br />
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного.<br />
Пусть <tex>r_1(A) > |I \cap A|</tex>, тогда существует <tex>w \in A \setminus (I \cap A)</tex>, такое, что <tex>(I \cap A) \cup \{w\} \in I_1</tex>. Если <tex>I \cup \{w\} \in I_1</tex>, то <tex>w \in S</tex> и из <tex>S</tex> есть путь в <tex>A</tex>. Значит, <tex>I \cup \{w\} \notin I_1</tex>. Отсюда следует, что существует <tex>y \in I \setminus A</tex>, такое что <tex>I \setminus \{y\} \cup \{w\} \in I_1</tex>. Но тогда ребро <tex>yw</tex> имеется в графе, то есть из <tex>y</tex> существует путь в <tex>T</tex>, что противоречит условию <tex>y \in I \setminus A</tex>.<br />
<br />
Следовательно, <tex>r_1(A) = |I \cap A|</tex>. Аналогично, <tex>r_2(\overline A) = |I \cap \overline A|</tex>. Отсюда <tex>r_1(A) + r_2(\overline A) = |I|</tex>, то есть при найденных <tex>I</tex> и <tex>A</tex> достигается равенство.<br />
<br />
Построен пример равенства, значит, теорема доказана. <br />
}}<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization'''], c. 2-4</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48014Пересечение матроидов, определение, примеры2015-06-07T18:39:04Z<p>DariaYakovleva: /* Примеры */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, I_1\rangle</tex> и <tex>M_2 = \langle X, I_2 \rangle</tex>. '''Пересечением матроидов''' <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, I \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> I = I_1 \cap I_2</tex>.<br />
}}<br />
<br />
==Примеры==<br />
<br />
# <tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} '''разноцветный матроид''' (англ. ''multicolored matroid'') (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение {{---}} это разноцветный лес (англ. ''rainbow forests'').<br />
# Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, I_1 \rangle</tex>, <tex>M_2 = \langle X, I_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>I_1 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in L \}</tex>, <tex>I_2 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа. Заметим, что пересечение данных матроидов не является матроидом.<br />
# Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, I_1 \rangle, M_2 = \langle A, I_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>I_2 = \{F \subseteq X: deg^-(v) \le 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
==Источники==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=48012Алгоритм построения базы в пересечении матроидов2015-06-07T18:33:25Z<p>DariaYakovleva: /* Псевдокод */</p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае <tex>J + z \in I_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1, G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = ''false''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = ''true''<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48010Пересечение матроидов, определение, примеры2015-06-07T18:28:22Z<p>DariaYakovleva: /* Примеры */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, I_1\rangle</tex> и <tex>M_2 = \langle X, I_2 \rangle</tex>. '''Пересечением матроидов''' <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, I \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> I = I_1 \cap I_2</tex>.<br />
}}<br />
<br />
==Примеры==<br />
<br />
# <tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} «разноцветный» матроид (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение — это разноцветный лес (англ. rainbow forests).<br />
# Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, I_1 \rangle</tex>, <tex>M_2 = \langle X, I_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>I_1 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in L \}</tex>, <tex>I_2 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа. Заметим, что пересечение данных матроидов не является матроидом.<br />
# Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, I_1 \rangle</tex>, <tex>M_2 = \langle A, I_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>I_2 = \{F \subseteq X: deg^-(v) \le 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
==Источники==<br />
* Асанов М. О., Баранский В. А., Расин В. В. {{---}} Дискретная математика: Графы, матроиды, алгоритмы (глава 4. Матроиды)<br />
* [http://www-math.mit.edu/~goemans/18433S09/matroid-intersect-notes.pdf Lecture notes on matroid intersection]<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48008Пересечение матроидов, определение, примеры2015-06-07T18:19:04Z<p>DariaYakovleva: /* Примеры */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, I_1\rangle</tex> и <tex>M_2 = \langle X, I_2 \rangle</tex>. '''Пересечением матроидов''' <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, I \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> I = I_1 \cap I_2</tex>.<br />
}}<br />
<br />
==Примеры==<br />
<br />
# <tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} «разноцветный» матроид (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение — это разноцветный лес (англ. rainbow forests).<br />
# Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, I_1 \rangle</tex>, <tex>M_2 = \langle X, I_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>I_1 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in L \}</tex>, <tex>I_2 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа. Заметим, что пересечение данных матроидов не является матроидом.<br />
# Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, I_1 \rangle</tex>, <tex>M_2 = \langle A, I_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>I_2 = \{F \subseteq X: deg^-(v) \le 1 \: \forall v \in V \setminus \{r\} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=48007Пересечение матроидов, определение, примеры2015-06-07T18:17:48Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, I_1\rangle</tex> и <tex>M_2 = \langle X, I_2 \rangle</tex>. '''Пересечением матроидов''' <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, I \rangle</tex>, где <tex>X</tex> {{---}} носитель исходных матроидов, а <tex> I = I_1 \cap I_2</tex>.<br />
}}<br />
<br />
==Примеры==<br />
<br />
# <tex>M_1</tex> {{---}} графовый матроид, <tex>M_2</tex> {{---}} «разноцветный» матроид (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение — это разноцветный лес (англ. rainbow forests).<br />
# Пусть <tex>G</tex> {{---}} двудольный граф и заданы два матроида <tex>M_1 = \langle X, I_1 \rangle</tex>, <tex>M_2 = \langle X, I_2 \rangle</tex>, где <tex>X</tex> {{---}} множество ребёр графа, <tex>I_1 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in L \}</tex>, <tex>I_2 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in R \}</tex>. Тогда их пересечение {{---}} это множество всевозможных паросочетаний графа. Заметим, что пересечение данных матроидов не является матроидом.<br />
# Пусть <tex>D = \langle V, A \rangle </tex> {{---}} <tex>r</tex>-ориентированное дерево. Пусть граф <tex>G</tex> {{---}} неориентированный граф, соответствующий графу <tex>D</tex>. Тогда рассмотрим два матроида <tex>M_1 = \langle A, I_1 \rangle</tex>, <tex>M_2 = \langle A, I_2 \rangle</tex>, где <tex>A</tex> {{---}} множество ребёр графа, <tex>M_1</tex> {{---}} графовый матроид <tex>G</tex>, <tex>I_2 = \{F \subseteq X: deg(v)^- \le 1 \: \forall v \in V \setminus {r} \}</tex>. Пересечения данных матроидов является ориентированным деревом.<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2,_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B&diff=47993Пересечение матроидов, определение, примеры2015-06-07T16:54:19Z<p>DariaYakovleva: /* Примеры */</p>
<hr />
<div>{{Определение<br />
|definition =<br />
Пусть даны два матроида <tex>M_1 = \langle X, I_1\rangle</tex> и <tex>M_2 = \langle X, I_2 \rangle</tex>. '''Пересечением матроидов''' <tex>M_1</tex> и <tex>M_2</tex> называется пара <tex>M_1 \cap M_2 = \langle X, I \rangle</tex>, где <tex>X</tex> — носитель исходных матроидов, а <tex> I = I_1 \cap I_2</tex>.<br />
}}<br />
<br />
==Примеры==<br />
<br />
# <tex>M_1</tex> — графовый матроид, <tex>M_2</tex> — «разноцветный» матроид (Множество независимо, если в нём нет двух ребер одного цвета). Тогда их пересечение — это разноцветный лес (англ. rainbow forests).<br />
# Пусть <tex>G</tex> — двудольный граф и заданы два матроида <tex>M_1 = \langle X, I_1 \rangle</tex>, <tex>M_2 = \langle X, I_2 \rangle</tex>, где <tex>X</tex> — множество ребёр графа, <tex>I_1 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in L \}</tex>, <tex>I_2 = \{F \subseteq X: deg(v) \le 1 \: \forall v \in R \}</tex>. Тогда их пересечение — это множество всевозможных паросочетаний графа. Заметим, что пересечение данных матроидов не является матроидом.<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=47954Алгоритм построения базы в пересечении матроидов2015-06-07T11:03:41Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае <tex>J + z \in I_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Graph_DY.png|400px|thumb|right|Граф замен]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1, G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = '''false'''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = '''true'''<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph_DY.png&diff=47953Файл:Graph DY.png2015-06-07T10:58:03Z<p>DariaYakovleva: </p>
<hr />
<div></div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=47791Алгоритм построения базы в пересечении матроидов2015-06-06T15:46:04Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex>.<br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex>.<br />
<br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать.<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U) : (J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае <tex>J + z \in I_1, z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U : J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит факту <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J : J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения <tex>\exists y \in J \setminus (S \setminus U) : J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U), |J| = r_1 (U) + r_2 (S \setminus U)</tex>. Следовательно, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Intersection2.jpg|right]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t; G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S, |G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1\ z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1, G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично <tex>G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}), J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = '''false'''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = '''true'''<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=47790Алгоритм построения базы в пересечении матроидов2015-06-06T15:26:09Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex><br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = (S, A(J))</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex><br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U)</tex> : <tex>(J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае (<tex>J + z \in I_1</tex>), <tex>z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U</tex> : <tex>J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит тому факту, что <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J</tex> : <tex>J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения, <tex>\exists y \in J \setminus (S \setminus U)</tex> : <tex>J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U)</tex>, <tex>|J| = r_1 (U) + r_2 (S \setminus U)</tex>. Таким образом, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Intersection2.jpg|right]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t</tex>, <tex>G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S</tex>, <tex>|G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1 z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1</tex>, <tex>G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично<tex>(G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}))</tex>, <tex>J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
<br />
=== Псевдокод ===<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = '''false'''<br />
'''while''' '''not''' isMaximal<br />
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex><br />
<tex>X_1 \leftarrow \{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2 \leftarrow \{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
'''if''' <tex>P \ne \emptyset</tex><br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
'''else'''<br />
isMaximal = '''true'''<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=47787Алгоритм построения базы в пересечении матроидов2015-06-06T15:11:35Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex><br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = (S, A(J))</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex><br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U)</tex> : <tex>(J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае (<tex>J + z \in I_1</tex>), <tex>z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U</tex> : <tex>J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит тому факту, что <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J</tex> : <tex>J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения, <tex>\exists y \in J \setminus (S \setminus U)</tex> : <tex>J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U)</tex>, <tex>|J| = r_1 (U) + r_2 (S \setminus U)</tex>. Таким образом, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Intersection2.jpg|right]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t</tex>, <tex>G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S</tex>, <tex>|G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1 z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1</tex>, <tex>G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично<tex>(G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}))</tex>, <tex>J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
Таким образом, получаем следующий алгоритм:<br />
*'''Псевдокод'''<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = false<br />
while (not isMaximal) {<br />
<построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex>><br />
<tex>X_1</tex> = <tex>\{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2</tex> = <tex>\{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> = кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
if <tex>(P \ne \emptyset)</tex> {<br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
} else {<br />
isMaximal = true<br />
}<br />
}<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Пересечение матроидов]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=47786Алгоритм построения базы в пересечении матроидов2015-06-06T15:06:31Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex><br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = (S, A(J))</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex><br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> {{---}} множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U)</tex> : <tex>(J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае (<tex>J + z \in I_1</tex>), <tex>z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U</tex> : <tex>J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит тому факту, что <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J</tex> : <tex>J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения, <tex>\exists y \in J \setminus (S \setminus U)</tex> : <tex>J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U)</tex>, <tex>|J| = r_1 (U) + r_2 (S \setminus U)</tex>. Таким образом, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Intersection2.jpg|right]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t</tex>, <tex>G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S</tex>, <tex>|G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1 z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1</tex>, <tex>G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично<tex>(G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}))</tex>, <tex>J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
Таким образом, получаем следующий алгоритм:<br />
*'''Псевдокод'''<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = false<br />
while (not isMaximal) {<br />
<построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex>><br />
<tex>X_1</tex> = <tex>\{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2</tex> = <tex>\{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> = кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
if <tex>(P \ne \emptyset)</tex> {<br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
} else {<br />
isMaximal = true<br />
}<br />
}<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=47785Алгоритм построения базы в пересечении матроидов2015-06-06T15:05:10Z<p>DariaYakovleva: </p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex><br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = (S, A(J))</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex><br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> {{---}} кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> {{---}} искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> {{---}} база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> - множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U)</tex> : <tex>(J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае (<tex>J + z \in I_1</tex>), <tex>z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U</tex> : <tex>J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит тому факту, что <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J</tex> : <tex>J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения, <tex>\exists y \in J \setminus (S \setminus U)</tex> : <tex>J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> {{---}} дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U)</tex>, <tex>|J| = r_1 (U) + r_2 (S \setminus U)</tex>. Таким образом, <tex>J</tex> {{---}} максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Intersection2.jpg|right]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t</tex>, <tex>G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S</tex>, <tex>|G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1 z_i \notin X_1</tex>, иначе <tex>P</tex> {{---}} не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1</tex>, <tex>G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично<tex>(G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}))</tex>, <tex>J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
Таким образом, получаем следующий алгоритм:<br />
*'''Псевдокод'''<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = false<br />
while (not isMaximal) {<br />
<построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex>><br />
<tex>X_1</tex> = <tex>\{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2</tex> = <tex>\{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> = кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
if <tex>(P \ne \emptyset)</tex> {<br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
} else {<br />
isMaximal = true<br />
}<br />
}<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BF%D0%BE%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B2_%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BC%D0%B0%D1%82%D1%80%D0%BE%D0%B8%D0%B4%D0%BE%D0%B2&diff=47784Алгоритм построения базы в пересечении матроидов2015-06-06T14:56:37Z<p>DariaYakovleva: /* Постановка задачи */</p>
<hr />
<div>==Постановка задачи==<br />
Даны матроиды <tex>M_1 = \langle S, I_1 \rangle</tex> и <tex>M_2 = \langle S, I_2 \rangle</tex>. Необходимо найти максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
<br />
==Алгоритм решения==<br />
Пусть множество <tex>J \in (I_1 \cap I_2)</tex><br />
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = (S, A(J))</tex>, где <br />
<tex>A(J) = \{(y, z) | y \in J, z \in S\setminus J, J - y + z \in I_1 \} </tex> <br />
<tex>\cup \{ (z', y') | z' \in S \setminus J, y' \in J, J - y' + z' \in I_2 \}</tex><br />
Пусть <tex>X_1 = \{ z \in S \setminus J | J + z \in I_1 \}</tex>, <tex>X_2 = \{ z \in S \setminus J | J + z \in I_2 \}</tex>, <tex>P</tex> - кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> в графе <tex>D_{M_1, M_2}(J)</tex>. <tex>P</tex> может и не существовать<br />
{{Лемма<br />
|statement =<br />
Если в графе <tex>D_{M_1, M_2}(J)</tex> нет пути из <tex>X_1</tex> в <tex>X_2</tex>, то <tex>J</tex> - искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex><br />
|proof =<br />
Отметим, что если <tex>X_1</tex> или <tex>X_2</tex> пустые, то <tex>J</tex> - база в одном из исходных матроидов <tex>M_1</tex> или <tex>M_2</tex> и, следовательно, искомое максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>. Таким образом, предположим, что <tex>X_1</tex> и <tex>X_2</tex> непусты. Пусть <tex>U</tex> - множество вершин, из которых достижимы вершины из <tex>X_2</tex>. Отсутствие пути из <tex>X_1</tex> в <tex>X_2</tex> означает, что <tex>X_1 \cap U = \emptyset</tex>, <tex>X_2 \subseteq U</tex> и <tex>\delta^- (U) = \emptyset</tex> (т.е. в <tex>U</tex> не входит ни одной дуги). Тогда:<br />
{{Утверждение<br />
|statement =<br />
<tex>r_1 (U) \le |J \cap U|</tex><br />
|proof =<br />
От противного. Пусть <tex>r_1 (U) > |J \cap U|</tex>, тогда <tex>\exists z \in U \setminus (J \cap U)</tex> : <tex>(J \cap U) + z \in I_1</tex> при том, что <tex>J + z \notin I_1</tex>. В противном случае (<tex>J + z \in I_1</tex>), <tex>z \in X_1</tex>, то есть <tex>X_1 \cap U \ne \emptyset</tex>, что противоречит отсутствию пути из <tex>X_1</tex> в <tex>X_2</tex>. Так как <tex>(J \cap U) + z \in I_1</tex>, а <tex>J + z \notin I_1</tex>, <br />
<tex>\exists y \in J \setminus U</tex> : <tex>J - y + z \in I_1</tex>. Однако, тогда <tex>(y, z) \in A(J)</tex>, что противоречит тому факту, что <tex>\delta^- (U) = \emptyset</tex>.<br />
}}<br />
{{Утверждение<br />
|statement =<br />
<tex>r_2 (S \setminus U) \le |J \cap (S \setminus U)|</tex><br />
|proof =<br />
От противного. Пусть <tex>\exists z \in (S \setminus U) \setminus J</tex> : <tex>J \cap (S \setminus U) + z \in I_2</tex>. Аналогично доказательству предыдущего утверждения, <tex>\exists y \in J \setminus (S \setminus U)</tex> : <tex>J - y + z \in I_2</tex>. Однако <tex>J \setminus (S \setminus U) = J \cap U</tex>, то есть <tex>(z, y)</tex> - дуга в <tex>D_{M_1, M_2}(J)</tex>, поэтому <tex>z \in U</tex> (т.к. <tex>y \in U</tex>). Противоречие.<br />
}}<br />
Так как <tex>|J| = |J \cap U| + |J \setminus U| \ge r_1 (U) + r_2 (S \setminus U)</tex>, <tex>|J| = r_1 (U) + r_2 (S \setminus U)</tex>. Таким образом, <tex>J</tex> - максимальное по мощности независимое множество в пересечении <tex>M_1</tex> и <tex>M_2</tex>.<br />
}}<br />
{{Лемма<br />
|statement =<br />
<tex>J' = J \bigtriangleup V(P) \in I_1 \cap I_2</tex><br />
|proof =<br />
[[Файл:Intersection2.jpg|right]]<br />
Пусть <tex>P = z_0, y_1, z_1, ..., y_t, z_t</tex>, <tex>G = \{ z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \})</tex>. Тогда <tex>G \subseteq S</tex>, <tex>|G| = |J|</tex> и дуги из <tex>\{ y_1, ..., y_t \}</tex> в <br />
<tex>\{ z_1, ..., z_t \}</tex> составляют единственное полное паросочетание в <tex>J \bigtriangleup G</tex>. То есть, согласно [[Лемма о единственном паросочетании в графе замен | лемме о единственном паросочетании в подграфе замен]], <tex>G \in I_1</tex>.<br />
К тому же, <tex>\forall i \ge 1 z_i \notin X_1</tex>, иначе <tex>P</tex> - не кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex>. Это означает, что <tex>z_i + J \notin I_1</tex>, то есть <br />
<tex>r_1 (J \cup G) = r_1 (J) = r_1 (G) = |G| = |J|</tex>. Так как <tex>J + z_0 \in I_1</tex>, <tex>G + z_0 \in I_1</tex> (т.е. <tex>J' = \{ z_0, z_1, ..., z_t \} \cup (J \setminus \{ y_1, ..., y_t \}) \in I_1</tex>.<br />
Симметрично<tex>(G = \{ z_0, ..., z_{t - 1} \} \cup (J \setminus \{ y_1, ..., y_t \}))</tex>, <tex>J' \in I_2</tex> и, следовательно, <tex>J' \in (I_1 \cap I_2)</tex>.<br />
}}<br />
Таким образом, получаем следующий алгоритм:<br />
*'''Псевдокод'''<br />
<tex>J</tex> = <tex>\emptyset</tex><br />
isMaximal = false<br />
while (not isMaximal) {<br />
<построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex>><br />
<tex>X_1</tex> = <tex>\{ z \in S \setminus J | J + z \in I_1 \}</tex><br />
<tex>X_2</tex> = <tex>\{ z \in S \setminus J | J + z \in I_2 \}</tex><br />
<tex>P</tex> = кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex><br />
if <tex>(P \ne \emptyset)</tex> {<br />
<tex>J</tex> = <tex>J \bigtriangleup V(P)</tex><br />
} else {<br />
isMaximal = true<br />
}<br />
}<br />
<br />
== Источник ==<br />
''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization''']</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8&diff=44194Использование обхода в глубину для топологической сортировки2015-01-11T19:25:37Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|id=topsort_def<br />
|definition=<br />
'''Топологическая сортировка''' (англ. ''topological sort'') [[Ориентированный граф|ориентированного]] [[Основные определения теории графов|ациклического графа]] <tex>G = (V, E)</tex> представляет собой упорядочивание [[Основные определения теории графов|вершин]] таким образом, что для любого ребра <tex>(u, v) \in E(G)</tex> номер вершины <tex>u</tex> меньше номера вершины <tex>v\ </tex>. <br />
}}<br />
<br />
== Применение ==<br />
Топологическая сортировка применяется в самых разных ситуациях, например при создании параллельных алгоритмов, когда по некоторому описанию алгоритма нужно составить граф зависимостей его операций и, отсортировав его топологически, определить, какие из операций являются независимыми и могут выполняться параллельно (одновременно). Примером использования топологической сортировки может служить создание карты сайта, где имеет место древовидная система разделов. Также топологическая сортировка применяется при обработке исходного кода программы в некоторых компиляторах и IDE, где строится граф зависимостей между сущностями, после чего они инициализируются в нужном порядке, либо выдается ошибка о циклической зависимости.<br />
<br />
Также с помощью топологической сортировки можно найти [[Гамильтоновы графы|гамильтонов путь]] в ациклическом графе.<br />
<br />
== Постановка задачи ==<br />
{{Теорема<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>\exists \ \varphi : V \to \{ 1..n \} , uv \in E \Rightarrow \varphi (u) < \varphi (v) </tex> <br />
|proof=<br />
Определим <tex>leave[u]</tex> как порядковый номер окраски вершины <tex>u</tex> в черный цвет в результате работы [[Обход в глубину, цвета вершин|алгоритма dfs]]. Рассмотрим функцию <tex>\varphi = n + 1 - leave[u] </tex>. Очевидно, что такая функция подходит под критерий функции <tex>\varphi</tex> из условия теоремы, если выполняется следующее утверждение:<br />
{{Лемма<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>uv \in E \Rightarrow leave[u] > leave[v]</tex><br />
|proof=<br />
Рассмотрим произвольное [[Основные определения теории графов|ребро]] <tex>(u, v)</tex>, исследуемое процедурой <tex>dfs</tex>. При исследовании вершина <tex>v</tex> не может быть серой, так как серые вершины в процессе работы <tex>dfs</tex> всегда образуют простой путь в графе, и факт попадания в серую вершину <tex>v</tex> означает, что в графе есть цикл из серых вершин, что противоречит условию утверждения. Следовательно, вершина <tex>v</tex> должна быть белой либо черной. Если вершина <tex>v</tex> — белая, то она становится потомком <tex>u</tex>, так что <tex>leave[u] > leave[v]</tex>. Если <tex>v</tex> — черная, значит, работа с ней уже завершена и значение <tex>leave[v]</tex> уже установлено. Поскольку мы все еще работаем с вершиной <tex>u</tex>, значение <tex>leave[u]</tex> еще не определено, так что, когда это будет сделано, будет выполняться неравенство <tex>leave[u] > leave[v]</tex>. Следовательно, для любого ребра <tex>(u, v)</tex> ориентированного ациклического графа выполняется условие <tex>leave[u] > leave[v]</tex>.<br />
}}<br />
Таким образом, теорема доказана.<br />
}}<br />
<br />
== Алгоритм ==<br />
Из определения функции <tex>\varphi</tex> мгновенно следует алгоритм топологической сортировки:<br />
<br />
<font color=green>// <tex>G</tex> {{---}} исходный граф</font><br />
'''function''' <tex>\mathtt{topologicalSort}():</tex><br />
[[Использование обхода в глубину для поиска цикла|проверить граф <tex>G</tex> на ацикличность]]<br />
<tex>fill(\mathtt{visited}, false)</tex><br />
'''for''' <tex>v \in V(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{reverse}() </tex><br />
<br />
'''function''' <tex>\mathtt{dfs}(u):</tex><br />
<tex>\mathtt{visited}[u] = true </tex><br />
'''for''' <tex>uv \in E(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{pushBack}(u) </tex><br />
<br />
<br />
Время работы этого алгоритма соответствует времени работы алгоритма поиска в глубину, то есть равно <tex>O(|V| + |E|)</tex>.<br />
<br />
==Пример==<br />
Распространённая задача на топологическую сортировку {{---}} следующая. Есть <tex>n</tex> переменных, значения которых нам неизвестны. Известно лишь про некоторые пары переменных, что одна переменная меньше другой. Требуется проверить, не противоречивы ли эти неравенства, и если нет, выдать переменные в порядке их возрастания (если решений несколько — выдать любое). Легко заметить, что это в точности и есть задача о поиске топологической сортировки в графе из <tex>n</tex> вершин.<br />
<br />
==См. также==<br />
* [[Использование обхода в глубину для поиска цикла]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
== Источники информации ==<br />
*Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — с.653 — 656.— ISBN 978-5-8459-0857-5 (рус.)<br />
* [http://habrahabr.ru/blogs/algorithm/100953/#habracut Топологическая сортировка на habrahabr]<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo :: Топологическая сортировка]<br />
* [http://informatics.mccme.ru/mod/statements/view3.php?id=256&chapterid=166# Пример задачи на топологическую сортировку]<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8&diff=44193Использование обхода в глубину для топологической сортировки2015-01-11T19:25:07Z<p>DariaYakovleva: /* Применение */</p>
<hr />
<div>{{Определение<br />
|id=topsort_def<br />
|definition=<br />
'''Топологическая сортировка''' (англ. ''topological sort'') [[Ориентированный граф|ориентированного]] [[Основные определения теории графов|ациклического графа]] <tex>G = (V, E)</tex> представляет собой упорядочивание [[Основные определения теории графов|вершин]] таким образом, что для любого ребра <tex>(u, v) \in E(G)</tex> номер вершины <tex>u</tex> меньше номера вершины <tex>v\ </tex>. <br />
}}<br />
<br />
== Применение ==<br />
Топологическая сортировка применяется в самых разных ситуациях, например при создании параллельных алгоритмов, когда по некоторому описанию алгоритма нужно составить граф зависимостей его операций и, отсортировав его топологически, определить, какие из операций являются независимыми и могут выполняться параллельно (одновременно). Примером использования топологической сортировки может служить создание карты сайта, где имеет место древовидная система разделов. Также топологическая сортировка применяется при обработке исходного кода программы в некоторых компиляторах и IDE, где строится граф зависимостей между сущностями, после чего они инициализируются в нужном порядке, либо выдается ошибка о циклической зависимости.<br />
<br />
Также с помощью топологической сортировки можно найти [[Гамильтоновы графы|гамильтонов путь]]в ациклическом графе.<br />
<br />
== Постановка задачи ==<br />
{{Теорема<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>\exists \ \varphi : V \to \{ 1..n \} , uv \in E \Rightarrow \varphi (u) < \varphi (v) </tex> <br />
|proof=<br />
Определим <tex>leave[u]</tex> как порядковый номер окраски вершины <tex>u</tex> в черный цвет в результате работы [[Обход в глубину, цвета вершин|алгоритма dfs]]. Рассмотрим функцию <tex>\varphi = n + 1 - leave[u] </tex>. Очевидно, что такая функция подходит под критерий функции <tex>\varphi</tex> из условия теоремы, если выполняется следующее утверждение:<br />
{{Лемма<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>uv \in E \Rightarrow leave[u] > leave[v]</tex><br />
|proof=<br />
Рассмотрим произвольное [[Основные определения теории графов|ребро]] <tex>(u, v)</tex>, исследуемое процедурой <tex>dfs</tex>. При исследовании вершина <tex>v</tex> не может быть серой, так как серые вершины в процессе работы <tex>dfs</tex> всегда образуют простой путь в графе, и факт попадания в серую вершину <tex>v</tex> означает, что в графе есть цикл из серых вершин, что противоречит условию утверждения. Следовательно, вершина <tex>v</tex> должна быть белой либо черной. Если вершина <tex>v</tex> — белая, то она становится потомком <tex>u</tex>, так что <tex>leave[u] > leave[v]</tex>. Если <tex>v</tex> — черная, значит, работа с ней уже завершена и значение <tex>leave[v]</tex> уже установлено. Поскольку мы все еще работаем с вершиной <tex>u</tex>, значение <tex>leave[u]</tex> еще не определено, так что, когда это будет сделано, будет выполняться неравенство <tex>leave[u] > leave[v]</tex>. Следовательно, для любого ребра <tex>(u, v)</tex> ориентированного ациклического графа выполняется условие <tex>leave[u] > leave[v]</tex>.<br />
}}<br />
Таким образом, теорема доказана.<br />
}}<br />
<br />
== Алгоритм ==<br />
Из определения функции <tex>\varphi</tex> мгновенно следует алгоритм топологической сортировки:<br />
<br />
<font color=green>// <tex>G</tex> {{---}} исходный граф</font><br />
'''function''' <tex>\mathtt{topologicalSort}():</tex><br />
[[Использование обхода в глубину для поиска цикла|проверить граф <tex>G</tex> на ацикличность]]<br />
<tex>fill(\mathtt{visited}, false)</tex><br />
'''for''' <tex>v \in V(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{reverse}() </tex><br />
<br />
'''function''' <tex>\mathtt{dfs}(u):</tex><br />
<tex>\mathtt{visited}[u] = true </tex><br />
'''for''' <tex>uv \in E(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{pushBack}(u) </tex><br />
<br />
<br />
Время работы этого алгоритма соответствует времени работы алгоритма поиска в глубину, то есть равно <tex>O(|V| + |E|)</tex>.<br />
<br />
==Пример==<br />
Распространённая задача на топологическую сортировку {{---}} следующая. Есть <tex>n</tex> переменных, значения которых нам неизвестны. Известно лишь про некоторые пары переменных, что одна переменная меньше другой. Требуется проверить, не противоречивы ли эти неравенства, и если нет, выдать переменные в порядке их возрастания (если решений несколько — выдать любое). Легко заметить, что это в точности и есть задача о поиске топологической сортировки в графе из <tex>n</tex> вершин.<br />
<br />
==См. также==<br />
* [[Использование обхода в глубину для поиска цикла]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
== Источники информации ==<br />
*Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — с.653 — 656.— ISBN 978-5-8459-0857-5 (рус.)<br />
* [http://habrahabr.ru/blogs/algorithm/100953/#habracut Топологическая сортировка на habrahabr]<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo :: Топологическая сортировка]<br />
* [http://informatics.mccme.ru/mod/statements/view3.php?id=256&chapterid=166# Пример задачи на топологическую сортировку]<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8&diff=44190Использование обхода в глубину для топологической сортировки2015-01-11T19:01:55Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|id=topsort_def<br />
|definition=<br />
'''Топологическая сортировка''' (англ. ''topological sort'') [[Ориентированный граф|ориентированного]] [[Основные определения теории графов|ациклического графа]] <tex>G = (V, E)</tex> представляет собой упорядочивание [[Основные определения теории графов|вершин]] таким образом, что для любого ребра <tex>(u, v) \in E(G)</tex> номер вершины <tex>u</tex> меньше номера вершины <tex>v\ </tex>. <br />
}}<br />
<br />
== Применение ==<br />
Топологическая сортировка применяется в самых разных ситуациях, например при создании параллельных алгоритмов, когда по некоторому описанию алгоритма нужно составить граф зависимостей его операций и, отсортировав его топологически, определить, какие из операций являются независимыми и могут выполняться параллельно (одновременно). Примером использования топологической сортировки может служить создание карты сайта, где имеет место древовидная система разделов. Также топологическая сортировка применяется при обработке исходного кода программы в некоторых компиляторах и IDE, где строится граф зависимостей между сущностями, после чего они инициализируются в нужном порядке, либо выдается ошибка о циклической зависимости.<br />
<br />
== Постановка задачи ==<br />
{{Теорема<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>\exists \ \varphi : V \to \{ 1..n \} , uv \in E \Rightarrow \varphi (u) < \varphi (v) </tex> <br />
|proof=<br />
Определим <tex>leave[u]</tex> как порядковый номер окраски вершины <tex>u</tex> в черный цвет в результате работы [[Обход в глубину, цвета вершин|алгоритма dfs]]. Рассмотрим функцию <tex>\varphi = n + 1 - leave[u] </tex>. Очевидно, что такая функция подходит под критерий функции <tex>\varphi</tex> из условия теоремы, если выполняется следующее утверждение:<br />
{{Лемма<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>uv \in E \Rightarrow leave[u] > leave[v]</tex><br />
|proof=<br />
Рассмотрим произвольное [[Основные определения теории графов|ребро]] <tex>(u, v)</tex>, исследуемое процедурой <tex>dfs</tex>. При исследовании вершина <tex>v</tex> не может быть серой, так как серые вершины в процессе работы <tex>dfs</tex> всегда образуют простой путь в графе, и факт попадания в серую вершину <tex>v</tex> означает, что в графе есть цикл из серых вершин, что противоречит условию утверждения. Следовательно, вершина <tex>v</tex> должна быть белой либо черной. Если вершина <tex>v</tex> — белая, то она становится потомком <tex>u</tex>, так что <tex>leave[u] > leave[v]</tex>. Если <tex>v</tex> — черная, значит, работа с ней уже завершена и значение <tex>leave[v]</tex> уже установлено. Поскольку мы все еще работаем с вершиной <tex>u</tex>, значение <tex>leave[u]</tex> еще не определено, так что, когда это будет сделано, будет выполняться неравенство <tex>leave[u] > leave[v]</tex>. Следовательно, для любого ребра <tex>(u, v)</tex> ориентированного ациклического графа выполняется условие <tex>leave[u] > leave[v]</tex>.<br />
}}<br />
Таким образом, теорема доказана.<br />
}}<br />
<br />
== Алгоритм ==<br />
Из определения функции <tex>\varphi</tex> мгновенно следует алгоритм топологической сортировки:<br />
<br />
<font color=green>// <tex>G</tex> {{---}} исходный граф</font><br />
'''function''' <tex>\mathtt{topologicalSort}():</tex><br />
[[Использование обхода в глубину для поиска цикла|проверить граф <tex>G</tex> на ацикличность]]<br />
<tex>fill(\mathtt{visited}, false)</tex><br />
'''for''' <tex>v \in V(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{reverse}() </tex><br />
<br />
'''function''' <tex>\mathtt{dfs}(u):</tex><br />
<tex>\mathtt{visited}[u] = true </tex><br />
'''for''' <tex>uv \in E(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{pushBack}(u) </tex><br />
<br />
<br />
Время работы этого алгоритма соответствует времени работы алгоритма поиска в глубину, то есть равно <tex>O(|V| + |E|)</tex>.<br />
<br />
==Пример==<br />
Распространённая задача на топологическую сортировку {{---}} следующая. Есть <tex>n</tex> переменных, значения которых нам неизвестны. Известно лишь про некоторые пары переменных, что одна переменная меньше другой. Требуется проверить, не противоречивы ли эти неравенства, и если нет, выдать переменные в порядке их возрастания (если решений несколько — выдать любое). Легко заметить, что это в точности и есть задача о поиске топологической сортировки в графе из <tex>n</tex> вершин.<br />
<br />
==См. также==<br />
* [[Использование обхода в глубину для поиска цикла]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
== Источники информации ==<br />
*Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — с.653 — 656.— ISBN 978-5-8459-0857-5 (рус.)<br />
* [http://habrahabr.ru/blogs/algorithm/100953/#habracut Топологическая сортировка на habrahabr]<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo :: Топологическая сортировка]<br />
* [http://informatics.mccme.ru/mod/statements/view3.php?id=256&chapterid=166# Пример задачи на топологическую сортировку]<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>DariaYakovlevahttp://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%B3%D0%BB%D1%83%D0%B1%D0%B8%D0%BD%D1%83_%D0%B4%D0%BB%D1%8F_%D1%82%D0%BE%D0%BF%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8&diff=44183Использование обхода в глубину для топологической сортировки2015-01-11T17:37:56Z<p>DariaYakovleva: </p>
<hr />
<div>{{Определение<br />
|id=topsort_def<br />
|definition=<br />
'''Топологическая сортировка''' [[Ориентированный граф|ориентированного]] [[Основные определения теории графов|ациклического графа]] <tex>G = (V, E)</tex> представляет собой упорядочение [[Основные определения теории графов|вершин]] таким образом, что для любого ребра <tex>(u, v) \in E(G)</tex> номер вершины <tex>u</tex> меньше номера вершины <tex>v\ </tex>. <br />
}}<br />
<br />
== Применение ==<br />
Топологическая сортировка применяется в самых разных ситуациях, например при создании параллельных алгоритмов, когда по некоторому описанию алгоритма нужно составить граф зависимостей его операций и, отсортировав его топологически, определить, какие из операций являются независимыми и могут выполняться параллельно (одновременно). Примером использования топологической сортировки может служить создание карты сайта, где имеет место древовидная система разделов. Также топологическая сортировка применяется при обработке исходного кода программы в некоторых компиляторах и IDE, где строится граф зависимостей между сущностями, после чего они инициализируются в нужном порядке, либо выдается ошибка о циклической зависимости.<br />
<br />
== Постановка задачи ==<br />
{{Теорема<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>\exists \ \varphi : V \to \{ 1..n \} , uv \in E \Rightarrow \varphi (u) < \varphi (v) </tex> <br />
|proof=<br />
Определим <tex>leave[u]</tex> как порядковый номер окраски вершины <tex>u</tex> в черный цвет в результате работы [[Обход в глубину, цвета вершин|алгоритма dfs]]. Рассмотрим функцию <tex>\varphi = n + 1 - leave[u] </tex>. Очевидно, что такая функция подходит под критерий функции <tex>\varphi</tex> из условия теоремы, если выполняется следующее утверждение:<br />
{{Лемма<br />
|statement=<tex>G</tex> — ациклический ориентированный граф, тогда <tex>uv \in E \Rightarrow leave[u] > leave[v]</tex><br />
|proof=<br />
Рассмотрим произвольное [[Основные определения теории графов|ребро]] <tex>(u, v)</tex>, исследуемое процедурой <tex>dfs</tex>. При исследовании вершина <tex>v</tex> не может быть серой, так как серые вершины в процессе работы <tex>dfs</tex> всегда образуют простой путь в графе, и факт попадания в серую вершину <tex>v</tex> означает, что в графе есть цикл из серых вершин, что противоречит условию утверждения. Следовательно, вершина <tex>v</tex> должна быть белой либо черной. Если вершина <tex>v</tex> — белая, то она становится потомком <tex>u</tex>, так что <tex>leave[u] > leave[v]</tex>. Если <tex>v</tex> — черная, значит, работа с ней уже завершена и значение <tex>leave[v]</tex> уже установлено. Поскольку мы все еще работаем с вершиной <tex>u</tex>, значение <tex>leave[u]</tex> еще не определено, так что, когда это будет сделано, будет выполняться неравенство <tex>leave[u] > leave[v]</tex>. Следовательно, для любого ребра <tex>(u, v)</tex> ориентированного ациклического графа выполняется условие <tex>leave[u] > leave[v]</tex>.<br />
}}<br />
Таким образом, теорема доказана.<br />
}}<br />
<br />
== Алгоритм ==<br />
Из определения функции <tex>\varphi</tex> мгновенно следует алгоритм топологической сортировки:<br />
<br />
<font color=green>// <tex>G</tex> {{---}} исходный граф</font><br />
'''function''' <tex>\mathtt{topologicalSort}():</tex><br />
проверить граф <tex>G</tex> на ацикличность<br />
<tex>fill(\mathtt{visited}, false)</tex><br />
'''for''' <tex>v \in V(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{reverse}() </tex><br />
<br />
'''function''' <tex>\mathtt{dfs}(u):</tex><br />
<tex>\mathtt{visited}[u] = true </tex><br />
'''for''' <tex>uv \in E(G)</tex><br />
'''if''' '''not''' <tex>\mathtt{visited}[v] </tex><br />
<tex>\mathtt{dfs}(v) </tex><br />
<tex>\mathtt{ans}.\mathtt{pushBack}(u) </tex><br />
<br />
<br />
Время работы этого алгоритма соответствует времени работы алгоритма поиска в глубину, то есть равно <tex>O(V+E)</tex>.<br />
<br />
==Пример==<br />
Распространённая задача на топологическую сортировку {{---}} следующая. Есть <tex>n</tex> переменных, значения которых нам неизвестны. Известно лишь про некоторые пары переменных, что одна переменная меньше другой. Требуется проверить, не противоречивы ли эти неравенства, и если нет, выдать переменные в порядке их возрастания (если решений несколько — выдать любое). Легко заметить, что это в точности и есть задача о поиске топологической сортировки в графе из <tex>n</tex> вершин.<br />
<br />
==См. также==<br />
* [[Использование обхода в глубину для поиска цикла]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
<br />
== Источники ==<br />
*Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — с.653 — 656.— ISBN 978-5-8459-0857-5 (рус.)<br />
* [http://habrahabr.ru/blogs/algorithm/100953/#habracut Топологическая сортировка на habrahabr]<br />
* [http://e-maxx.ru/algo/finding_cycle MAXimal :: algo {{---}} «Топологическая сортировка»]<br />
* [http://informatics.mccme.ru/mod/statements/view3.php?id=256&chapterid=166# Пример задачи на топологическую сортировку]<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Обход в глубину]]</div>DariaYakovleva