Алгоритм построения базы в объединении матроидов — различия между версиями
Vsklamm (обсуждение | вклад) м |
Vsklamm (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Объединение матроидов''' <tex>M</tex> = <tex>\langle S, | + | '''Объединение матроидов''' <tex>M</tex> = <tex>\langle S,\mathcal{I} \rangle</tex> = <tex>\bigcup\limits_{k=1}^{n}</tex> <tex>M_i</tex>, где <tex>M_i</tex> = <tex>\langle S,\mathcal{I}_i \rangle</tex> |
}} | }} | ||
== Алгоритм == | == Алгоритм == | ||
− | Определим [[Граф замен|граф замен]]: для каждого <tex>M_i</tex> построим двудольный ориентированный граф <tex>D_{M_i}(I_i)</tex>, где <tex>I_i \in | + | Определим [[Граф замен|граф замен]]: для каждого <tex>M_i</tex> построим двудольный ориентированный граф <tex>D_{M_i}(I_i)</tex>, где <tex>I_i \in \mathcal{I}_i</tex>, такой что в левой доле находятся вершины из <tex>I_i</tex>, а в правой — вершины из <tex>S \setminus I_i</tex>. Построим ориентированные ребра из <tex>y \in I_i</tex> в <tex>x \in S \setminus I_i</tex>, при условии, что <tex>(I_i \setminus y) \cup x \in \mathcal{I}_i</tex>. |
Объединим все <tex>D_{M_i}(I_i)</tex> в один граф <tex>D</tex>, который будет суперпозицией ребер из этих графов. Пусть для каждого <tex>i:</tex> <tex>F_i</tex> - множество вершин из <tex>S_i \setminus I_i</tex>, которые могут быть добавлены в <tex>I_i</tex> таким образом, что <tex>I_i + x</tex> независимое множество в <tex>M_i</tex>. Или формально: | Объединим все <tex>D_{M_i}(I_i)</tex> в один граф <tex>D</tex>, который будет суперпозицией ребер из этих графов. Пусть для каждого <tex>i:</tex> <tex>F_i</tex> - множество вершин из <tex>S_i \setminus I_i</tex>, которые могут быть добавлены в <tex>I_i</tex> таким образом, что <tex>I_i + x</tex> независимое множество в <tex>M_i</tex>. Или формально: | ||
− | <tex>F_i = \{ x \in S \setminus I_i : I_i + x \in | + | <tex>F_i = \{ x \in S \setminus I_i : I_i + x \in \mathcal{I}_i \}</tex>. <tex>F</tex> = <tex>\bigcup\limits_{k=1}^{n}</tex> <tex>F_i</tex> |
− | Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. Иначе говоря, на каждом шаге мы выбираем элемент не из текущего множества, который оставит текущее множество независимым ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как <tex>I</tex>. | + | Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. Иначе говоря, на каждом шаге мы выбираем элемент не из текущего множества, который оставит построить [[Граф замен|граф замен]] <tex>D_{M_i}(I_i)</tex>текущее множество независимым ([[Алгоритм построения базы в объединении матроидов#th_1|следующая теорема]] отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как <tex>I</tex>. |
Тогда нужно найти такой элемент <tex>s \in S \setminus I</tex>, что <tex>I + s</tex> — снова независимо. | Тогда нужно найти такой элемент <tex>s \in S \setminus I</tex>, что <tex>I + s</tex> — снова независимо. | ||
Все наши кандидаты находятся в <tex>S \setminus I</tex>. Если мы найдем путь из <tex>F</tex> в <tex>S \setminus I</tex>, то элемент <tex>s</tex>, которым путь закончился, можно будет добавить в <tex>I</tex>. | Все наши кандидаты находятся в <tex>S \setminus I</tex>. Если мы найдем путь из <tex>F</tex> в <tex>S \setminus I</tex>, то элемент <tex>s</tex>, которым путь закончился, можно будет добавить в <tex>I</tex>. | ||
Строка 24: | Строка 24: | ||
=== Псевдокод === | === Псевдокод === | ||
<tex>J</tex> = <tex>\emptyset</tex> | <tex>J</tex> = <tex>\emptyset</tex> | ||
− | + | '''for''' <tex>i \leftarrow 0</tex> '''to''' <tex>n - 1</tex> | |
− | + | построить [[Граф замен|граф замен]] <tex>D_{M_i}(I_i)</tex> | |
− | построить [[Граф замен | + | '''if''' <tex>I_i + x \in \mathcal{I}_i</tex> |
− | + | <tex>J \leftarrow I_i + x</tex> | |
− | |||
− | |||
− | '''if''' <tex> | ||
− | |||
− | |||
− | |||
Версия 21:40, 21 октября 2018
Задача: |
Даны матроиды | и . Необходимо найти максимальное по мощности независимое множество в объединении и .
Определение: |
Объединение матроидов | = = , где =
Содержание
Алгоритм
Определим граф замен: для каждого построим двудольный ориентированный граф , где , такой что в левой доле находятся вершины из , а в правой — вершины из . Построим ориентированные ребра из в , при условии, что .
Объединим все
в один граф , который будет суперпозицией ребер из этих графов. Пусть для каждого - множество вершин из , которые могут быть добавлены в таким образом, что независимое множество в . Или формально:. =
Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. Иначе говоря, на каждом шаге мы выбираем элемент не из текущего множества, который оставит построить граф замен текущее множество независимым (следующая теорема отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как . Тогда нужно найти такой элемент , что — снова независимо. Все наши кандидаты находятся в . Если мы найдем путь из в , то элемент , которым путь закончился, можно будет добавить в . То есть шаг жадного алгоритма заключается в создании нового и поиске такого пути.
Псевдокод
граф замен if= for to построить
Теорема: |
Для любого имеем существует ориентированный путь из в по ребрам . |
Доказательство: |
Пусть существует путь из в и — самый короткий такой путь. Запишем его вершины как { }. , так что не умаляя общности можно сказать, что . Для каждого определим множество вершин { }, где пробегает от до . Положим, что , для всех положим . Ясно, что . Для того, чтобы показать независимость в объединении матроидов нужно показать, что для всех . Заметим, что так как мы выбирали путь таким, что он будет наименьшим, для каждого существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать . Так как паросочетание единственно, . Аналогично , значит . Следовательно независимо в объединении матроидов.
Пусть нет пути из в по ребрам . Тогда пусть существует множество , состоящее из вершин , из которого мы можем достичь : по допущению . Утверждается, что для всех (что означает, что — максимальное подмножество , независимое в ).Предположим, что это не так. , это возможно только если . Значит существует такой , для которого . Но (по предположению вначале доказательства), значит . Из этого следует, что содержит единственный цикл. Значит существует , такой что . Получается, что — ребро в и оно содержит этот , что противоречит тому как был выбран . Следовательно для всех нам известно : . У нас есть и . Из определния функции ранга объединения матроидов имеем :
и значит — противоречие. |
См. также
Источники информации
Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13