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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Объединение матроидов <tex>M</tex> = <tex>\langle S,J \rangle</tex> = <tex>\cup _{k=1}^{n}</tex> <tex>M_i</tex>
+
Объединение матроидов <tex>M</tex> = <tex>\langle S,J \rangle</tex> = <tex>\cup _{k=1}^{n}</tex> <tex>M_i</tex>, где <tex>M_i</tex> = <tex>\langle S_i,J_i \rangle</tex>
 
}}
 
}}
  
Строка 9: Строка 9:
 
}}
 
}}
  
Объединим все <tex>D_{M_i}(I_i)</tex> в один граф <tex>D</tex>, котороый будет суперпозицией ребер из этих графов.
+
Объединим все <tex>D_{M_i}(I_i)</tex> в один граф <tex>D</tex>, который будет суперпозицией ребер из этих графов.
  
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
<tex>F_i</tex> = { <tex>x \in S_i \setminus I_i</tex> : <tex>I_i + x \in J_i </tex>}.
+
<tex>F_i</tex> = { <tex>x \in S_i \setminus I_i</tex> : <tex>I_i + x \in J_i </tex>}. <tex>F</tex> = <tex>\cup _{k=1}^{n}</tex> <tex>F_i</tex>
 
}}
 
}}
  

Версия 07:50, 27 июня 2011

Определение:
Объединение матроидов [math]M[/math] = [math]\langle S,J \rangle[/math] = [math]\cup _{k=1}^{n}[/math] [math]M_i[/math], где [math]M_i[/math] = [math]\langle S_i,J_i \rangle[/math]


Определение:
Для каждого [math]M_i[/math] построим двудольный ориентированный граф [math]D_{M_i}(I_i)[/math], такой что в левой доле находятся вершины из [math]I_i[/math], а в правой - вершины из [math]S_i \setminus I_i[/math]. Построим ориентированные ребра из [math]y \in I_i[/math] в [math]x \in S_i \setminus I_i[/math], при условии, что [math]I_i - y + x \in J_i[/math].


Объединим все [math]D_{M_i}(I_i)[/math] в один граф [math]D[/math], который будет суперпозицией ребер из этих графов.


Определение:
[math]F_i[/math] = { [math]x \in S_i \setminus I_i[/math] : [math]I_i + x \in J_i [/math]}. [math]F[/math] = [math]\cup _{k=1}^{n}[/math] [math]F_i[/math]


Теорема:
Для любого [math]s \in S \setminus I[/math] имеем [math]I + x \in J_i \Leftrightarrow [/math] существует ориентированный путь из [math]F[/math] в [math]s[/math] по ребрам [math]D[/math].

Алгоритм

Нам известно, что объединение матроидов - матроид. При поиске базы матроида используется жадный алгоритм. В нем трудность может представлять шаг поиска нового элемента не из текущего множества, который оставит текущее множество независимым. Здесь мы обозначили текущее множество как [math]I[/math]. Тогда нужно найти такой элемент [math]s \in S \setminus I[/math], что [math]I + s[/math] - снова независимо. Все наши кандидаты находятся в [math]S \setminus I[/math]. Если мы найдем путь из [math]F[/math] в [math]S \setminus I[/math], то элемент [math]s[/math], которым путь закончился, можно будет добавить в [math]I[/math]. То есть шаг жадного алгоритма заключается в создании нового [math]D[/math] и поиске такого пути.


Источник

Michel X. Goemans. Advanced Combinatorial Optimization. Lecture 13