Алгоритм построения базы в пересечении матроидов — различия между версиями
м (rollbackEdits.php mass rollback) |
|||
(не показано 7 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | {{Задача | |
− | Даны матроиды <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>. | + | |definition= |
+ | Даны матроиды <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>. | ||
+ | }} | ||
==Алгоритм решения== | ==Алгоритм решения== | ||
Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>. | Пусть множество <tex>J \in (\mathcal{I}_1 \cap \mathcal{I}_2)</tex>. | ||
<br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где | <br>Определим [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J) = \langle S, A(J) \rangle</tex>, где | ||
− | <tex>A(J) = \{(y, z) | + | <tex>A(J) = \{(y, z) \mid y \in J, z \in S\setminus J, J - y + z \in \mathcal{I}_1 \} </tex> |
− | <tex>\cup \{ (z', y') | + | <tex>\cup \{ (z', y') \mid z' \in S \setminus J, y' \in J, J - y' + z' \in \mathcal{I}_2 \}</tex>. |
− | Пусть <tex>X_1 = \{ z \in S \setminus J | + | Пусть <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> может и не существовать. |
{{Лемма | {{Лемма | ||
|statement = | |statement = | ||
Строка 46: | Строка 48: | ||
'''while''' '''not''' isMaximal | '''while''' '''not''' isMaximal | ||
построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex> | построить [[Граф замен для двух матроидов|граф замен]] <tex>D_{M_1, M_2}(J)</tex> | ||
− | <tex>X_1 \leftarrow \{ z \in S \setminus J | + | <tex>X_1 \leftarrow \{ z \in S \setminus J \mid J + z \in \mathcal{I}_1 \}</tex> |
− | <tex>X_2 \leftarrow \{ z \in S \setminus J | + | <tex>X_2 \leftarrow \{ z \in S \setminus J \mid J + z \in \mathcal{I}_2 \}</tex> |
<tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> | <tex>P</tex> <tex>\leftarrow</tex> кратчайший путь из <tex>X_1</tex> в <tex>X_2</tex> | ||
'''if''' <tex>P \ne \emptyset</tex> | '''if''' <tex>P \ne \emptyset</tex> | ||
Строка 54: | Строка 56: | ||
isMaximal = ''true'' | isMaximal = ''true'' | ||
− | == Теорема Эдмондса - Лоулера == | + | ==== Подсказки ==== |
+ | * Воспользуйтесь одним массивом для проверки множества на независимость по цветам, | ||
+ | * для проверки ацикличности графа при добавлении ребра можно использовать [[СНМ_(наивные_реализации)|СНМ]] или [[Обход_в_глубину,_цвета_вершин|обходом в глубину]], | ||
+ | * для нахождения кратчайшего пути можно использовать [[Обход_в_ширину|обход в ширину]], первоначально добавив фиктивную вершину, соединив её с вершинами из множества <tex>X_1</tex>. | ||
+ | |||
+ | == Теорема Эдмондса-Лоулера == | ||
{{Теорема | {{Теорема | ||
|about= | |about= | ||
− | Эдмондса - Лоулера | + | Эдмондса-Лоулера |
|statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <br> | |statement= Пусть <tex>M_1=\langle X, \mathcal{I}_1\rangle</tex>, <tex>M_2=\langle X, \mathcal{I}_2\rangle</tex> {{---}} матроиды. Тогда <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>. | <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>. | ||
Строка 87: | Строка 94: | ||
Конструктивно построим <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>. | Конструктивно построим <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>. | ||
− | Обозначим <tex>S = \left\{x | + | Обозначим <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>. |
Построим [[Граф замен для двух матроидов|граф замен]] <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> | Построим [[Граф замен для двух матроидов|граф замен]] <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> | ||
Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось. | Будем таким образом увеличивать <tex>I</tex>, пока существует путь <tex>p</tex>. Рассмотрим момент, когда такого пути не нашлось. | ||
− | Введём обозначение: <tex>A = \{u | + | Введём обозначение: <tex>A = \{u \mid u \rightsquigarrow T\}</tex>. |
Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного. | Докажем, что <tex>r_1(A) = |I \cap A|</tex> от противного. | ||
Строка 103: | Строка 110: | ||
== См. также== | == См. также== | ||
− | * [[ | + | * [[Пересечение матроидов, определение, примеры]] |
− | * [[ | + | * [[Алгоритм построения базы в объединении матроидов]] |
== Источники информации == | == Источники информации == | ||
− | ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization'''] | + | * ''Chandra Chekuri'' — [http://www.cs.illinois.edu/class/sp10/cs598csc/Lectures/Lecture17.pdf '''Combinatorial Optimization'''] |
[[Категория:Алгоритмы и структуры данных]] | [[Категория:Алгоритмы и структуры данных]] | ||
[[Категория:Матроиды]] | [[Категория:Матроиды]] |
Текущая версия на 19:30, 4 сентября 2022
Задача: |
Даны матроиды пересечении и . | и . Необходимо найти максимальное по мощности независимое множество в
Содержание
Алгоритм решения
Пусть множество
Определим граф замен , где
.
Пусть
, , — кратчайший путь из в в графе . может и не существовать.Лемма: | ||||||||||
Если в графе нет пути из в , то — искомое максимальное по мощности независимое множество в пересечении и . | ||||||||||
Доказательство: | ||||||||||
Отметим, что если или пустые, то — база в одном из исходных матроидов или и, следовательно, искомое максимальное по мощности независимое множество в пересечении и . Таким образом, предположим, что и непусты. Пусть — множество вершин, из которых достижимы вершины из . Отсутствие пути из в означает, что , и (т.е. в не входит ни одной дуги). Тогда:
| ||||||||||
Лемма: |
Доказательство: |
Пусть лемме о единственном паросочетании в подграфе замен, . К тому же, , иначе — не кратчайший путь из в . Это означает, что , то есть . Так как (т.е. . Симметрично . Тогда и дуги из в составляют единственное полное паросочетание в . То есть, согласно и, следовательно, . |
Псевдокод
граф замен кратчайший путь из в if = else isMaximal = true= isMaximal = false while not isMaximal построить
Подсказки
- Воспользуйтесь одним массивом для проверки множества на независимость по цветам,
- для проверки ацикличности графа при добавлении ребра можно использовать СНМ или обходом в глубину,
- для нахождения кратчайшего пути можно использовать обход в ширину, первоначально добавив фиктивную вершину, соединив её с вершинами из множества .
Теорема Эдмондса-Лоулера
Теорема (Эдмондса-Лоулера): |
Пусть , — матроиды. Тогда Где . и — ранговые функции в первом и втором матроиде соответственно. |
Доказательство: |
Докажем неравенство Выберем произвольные , , тогда
и — независимые в обоих матроидах (как подмножества независимового ), значит
Но и , значит
В силу произвольности и получаем
Обозначим Построим , . Если , добавим их пересечение в . граф замен . Добавим вершину , не влияющую на независимость в первом матроиде — из неё будут вести рёбра во все вершины множества . Пусть — кратчайший путь из в , — путь с добавленным в начало ребром из . По лемме о единственном паросочетании и лемме о единственном паросочетании, индуцированном кратчайшем путём . Теперь добавим вершину , не влияющую на независимость во втором матроиде — в неё будут вести рёбра из всех вершин множества . Тогда (путь с добавленным ребром в ) — кратчайший путь из в . Аналогично, . Отсюда следует, что , причём .Будем таким образом увеличивать , пока существует путь . Рассмотрим момент, когда такого пути не нашлось. Введём обозначение: .Докажем, что от противного. Пусть , тогда существует , такое, что . Если , то и из есть путь в . Значит, . Отсюда следует, что существует , такое что . Но тогда ребро имеется в графе, то есть из существует путь в , что противоречит условию .Следовательно, Построен пример равенства, значит, теорема доказана. . Аналогично, . Отсюда , то есть при найденных и достигается равенство. |
См. также
Источники информации
- Chandra Chekuri — Combinatorial Optimization