Алгоритм построения базы в объединении матроидов

Материал из Викиконспекты
Версия от 18:53, 27 октября 2018; Vsklamm (обсуждение | вклад) (англ термин)
Перейти к: навигация, поиск
Задача:
Даны матроиды M1=S,I1 и M2=S,I2. Необходимо найти максимальное по мощности независимое множество в объединении M1 и M2.


Определение:
Объединение матроидов (англ. matroid union) M = S,I = nk=1 Mi, где Mi = S,Ii


Алгоритм

Определим граф замен: для каждого Mi построим двудольный ориентированный граф DMi(Ii), где IiIi, такой что в левой доле находятся вершины из Ii, а в правой — вершины из SIi. Построим ориентированные ребра из yIi в xSIi, при условии, что (Iiy)xIi.

Объединим все DMi(Ii) в один граф D, который будет суперпозицией ребер из этих графов. Пусть для каждого i: Fi - множество вершин из SiIi, которые могут быть добавлены в Ii таким образом, что Ii+x независимое множество в Mi. Или формально:

Fi={xSIi:Ii+xIi}. F = nk=1 Fi

Нам известно, что объединение матроидов — матроид. При поиске базы матроида используется жадный алгоритм. На каждом шаге мы выбираем элемент не из текущего множества в новом графе замен DMi(Ii) (следующая теорема отвечает на вопрос, как представить это в графе). Здесь мы обозначим текущее множество как I. Тогда нужно найти такой элемент sSI, что I+s — снова независимо. Все наши кандидаты находятся в SI. Если мы найдем путь из F в SI, то элемент s, которым путь закончился, можно будет добавить в I. То есть шаг жадного алгоритма заключается в создании нового D и поиске такого пути.

Псевдокод

 J = 
 for i0 to n1
     построить граф замен DMi(Ii)
     if Ii+xIi
         JIi+x


Теорема:
Для любого sSI имеем I+sJ существует ориентированный путь из F в s по ребрам D.
Доказательство:

Пусть существует путь из F в s и P — самый короткий такой путь. Запишем его вершины как {s0,s1,...sp}. s0F, так что не умаляя общности можно сказать, что s0F1. Для каждого j=1...k определим множество вершин Sj= {si,si+1:(si,si+1)DMj(Ij)}, где i пробегает от 0 до p1. Положим, что I1=(I1S1){s0}, для всех j>1 положим Ij=(IjSj). Ясно, что jIj=I+s. Для того, чтобы показать независимость I+s в объединении матроидов нужно показать, что IjJj для всех j. Заметим, что так как мы выбирали путь P таким, что он будет наименьшим, для каждого j>1 существует единственное паросочетание между элементами, которые мы добавляли и удаляли, чтобы сконструировать Ij=IjSj. Так как паросочетание единственно, IjJj. Аналогично s0F1, значит I1J1. Следовательно I+s независимо в объединении матроидов.

Пусть нет пути из F в s по ребрам D. Тогда пусть существует множество T, состоящее из вершин D, из которого мы можем достичь s : T={x,xs} по допущению FT=. Утверждается, что для всех i:|IiT|=ri(T)(что означает, что IiT — максимальное подмножество T, независимое в Mi).

Предположим, что это не так. |IiT|=ri(IiT)ri(T), это возможно только если |IiT|<ri(T). Значит существует такой xT(SIi), для которого (IiT)+xJi. Но xF (по предположению вначале доказательства), значит Ii+xJi. Из этого следует, что Ii+x содержит единственный цикл. Значит существует yIiT, такой что Ii+xyJi. Получается, что (y,x) — ребро в DMi(Ii) и оно содержит этот yT, что противоречит тому как был выбран yIiT. Следовательно для всех i нам известно : |IiT|=ri(T). У нас есть sT и (I+s)T=(Ii+s)T=(IiT)+s. Из определния функции ранга объединения матроидов имеем :

rM(I+s)(|(I+s)T|+nk=1ri(T))

rM(I+s)|(I+s)T|+nk=1|IiT|=|IT|+nk=1|IiT|=|I|<|I+s|

и значит (I+s)J — противоречие.

См. также

Источники информации

Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13