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

Материал из Викиконспекты
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
{{Определение
 
{{Определение
 
|definition=
 
|definition=
Объединение матроидов M = <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>
 
}}
 
}}
  
Строка 8: Строка 8:
 
Для каждого <tex>M_i</tex> построим двудольный ориентированный граф <tex>D_{M_i}(I_i)</tex>, такой что в левой доле находятся вершины из <tex>I_i</tex>, а в правой - вершины из <tex>S_i \setminus I_i</tex>. Построим ориентированные ребра из <tex>y \in I_i</tex> в <tex>x \in S_i \setminus I_i</tex>, при условии, что <tex>I_i - y + x \in J_i</tex>.
 
Для каждого <tex>M_i</tex> построим двудольный ориентированный граф <tex>D_{M_i}(I_i)</tex>, такой что в левой доле находятся вершины из <tex>I_i</tex>, а в правой - вершины из <tex>S_i \setminus I_i</tex>. Построим ориентированные ребра из <tex>y \in I_i</tex> в <tex>x \in S_i \setminus I_i</tex>, при условии, что <tex>I_i - y + x \in J_i</tex>.
 
}}
 
}}
 +
 +
Объединим все <tex>D_{M_i}(I_i)</tex> в один граф <tex>D</tex>, котороый будет суперпозицией ребер из этих графов.
 +
 +
{{Определение
 +
|definition=
 +
<tex>F_i</tex> = { <tex>x \in S_i \setminus I_i</tex> : <tex>I_i + x \in J_i </tex>}.
 +
}}
 +
 +
{{Теорема
 +
|statement=
 +
Для любого <tex>s \in S \setminus I</tex> имеем <tex>I + x \in J_i  \Leftrightarrow </tex> существует ориентированный путь из <tex>F</tex> в <tex>s</tex> по ребрам <tex>D</tex>.
 +
|proof=
 +
}}
 +
 +
 +
== Алгоритм ==
 +
 +
В жадном алгоритме трудность может представлять шаг поиска нового элемента не из текущего множества, который оставит текущее множество независимым.
 +
Здесь мы обозначили текущее множество как <tex>I</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>D</tex> и поиске такого пути.

Версия 07:21, 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]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]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] и поиске такого пути.