http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&user=Shiplayer&feedformat=atomВикиконспекты - Вклад участника [ru]2024-03-28T22:39:15ZВклад участникаMediaWiki 1.30.0http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48570Покрытия, закрытые множества2015-06-16T08:53:36Z<p>Shiplayer: /* Закрытые множества */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Пусть S {{---}} конечное множество. Функция <tex> span : \mathcal P (S) \rightarrow \mathcal P (S) </tex> является покрытием матроида тогда и только тогда, когда удовлетворяет следующим свойствам:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) \leqslant r(T \cup U \cup {s}) \leqslant r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \notin span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {{---}} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. <br />
<br />
Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = \mathcal {f} i \mathcal {g}</tex> и <tex>J \setminus I = \mathcal {f} {j_1, j_2} \mathcal {g}</tex>. Предположим, что <tex> I \cup {j_1} \notin L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \notin L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \notin span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \notin L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Пусть <tex> S </tex> {{---}} какое-то множество и <tex> \mathcal L \subseteq S </tex>. Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof ='''Необходимость'''. Пусть <tex> \mathcal L </tex> семейство закрытых множеств матроида <tex> M = (S, \mathcal I) </tex>. 1 свойство следует из <tex> span(A \cap B) \subseteq span(A) \cap span(B) = A \cap B </tex>, по определению закрытого множества мы получаем, что пересечение закрытых множеств закрыто. Посмотрим на 2 свойства, допустим, что такой <tex> F'' </tex> существует, и выберем <tex> s \in F'' \setminus F </tex>. Таким образом <tex> s \notin span(F)</tex>. Согласно тому, что <tex> F' \not\subseteq F'' </tex>, мы получаем, что <tex> t \notin span(F \cup s)</tex>. Поэтому, по 2 свойству покрывающего множества для <tex> T := F </tex> получаем противоречие, т.к. <tex> s \notin span(F) = F'</tex>.<br />
<br />
'''Достаточность'''. Пусть <tex> \mathcal L </tex> удовлетворяет свойствам закрытого множества и <tex> span(Y) </tex> будет наименьшем множеством в <tex> \mathcal L </tex> содержащий <tex> Y </tex>, для <tex> F \subseteq S </tex>. Поскольку <tex> F \in \mathcal L \Longleftrightarrow span(F) = F </tex>, этого достаточно, чтобы увидеть, что <tex> span </tex> удовлетворяет свойствам покрытого множества. 1 свойство тривиально. Рассмотрим 2 свойство, пусть <tex>T \subseteq S, t \in S \setminus T, </tex> и <tex> s \in span(T \cup t) \setminus span(T) </tex>. Тогда <tex> span(T ) \subset span(T \cup s) \subseteq span(T \cup t) </tex>. Следовательно, по 2 свойству, <tex>span(T \cup s) = span(T \cup t) </tex>, и следовательно, <tex> t \in span(T \cup s)</tex>.<br />
<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
*''Alexander Schrijver'' {{---}} Combinatorial Optimization. Polyhedra and Efficiency<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48559Покрытия, закрытые множества2015-06-15T21:14:00Z<p>Shiplayer: /* Источники информации */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Пусть S {{---}} конечное множество. Функция <tex> span : \mathcal P (S) \rightarrow \mathcal P (S) </tex> является покрытием матроида тогда и только тогда, когда удовлетворяет следующим свойствам:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) \leqslant r(T \cup U \cup {s}) \leqslant r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \notin span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {{---}} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. <br />
<br />
Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = \mathcal {f} i \mathcal {g}</tex> и <tex>J \setminus I = \mathcal {f} {j_1, j_2} \mathcal {g}</tex>. Предположим, что <tex> I \cup {j_1} \notin L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \notin L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \notin span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \notin L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Пусть <tex> S </tex> {{---}} какое-то множество и <tex> \mathcal L \subseteq S </tex>. Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof ='''Необходимость'''. Пусть <tex> \mathcal L </tex> семейство закрытых множеств матроида <tex> M = (S, \mathcal I) </tex>. 1 свойство следует из <tex> span(A \cap B) \subseteq span(A) \cap span(B) = A \cap B </tex>, по определению закрытого множества мы получаем, что пересечение закрытого множества закрыто. Посмотрим на 2 свойства, допустим, что такой <tex> F'' </tex> существует, и выберем <tex> s \in F'' \setminus F </tex>. Таким образом <tex> s \notin span(F)</tex>. Согласно тому, что <tex> F' \not\subseteq F'' </tex>, мы получаем, что <tex> t \notin span(F \cup s)</tex>. Поэтому, по 2 свойству покрывающего множества для <tex> T := F </tex> получаем противоречие, т.к. <tex> s \notin span(F) = F'</tex>.<br />
<br />
'''Достаточность'''. Пусть <tex> \mathcal L </tex> удовлетворяет свойствам закрытого множества и <tex> span(Y) </tex> будет наименьшем множеством в <tex> \mathcal L </tex> содержащий <tex> Y </tex>, для <tex> F \subseteq S </tex>. Поскольку <tex> F \in \mathcal L \Longleftrightarrow span(F) = F </tex>, этого достаточно, чтобы увидеть, что <tex> span </tex> удовлетворяет свойствам покрытого множества. 1 свойство тривиально. Рассмотрим 2 свойство, пусть <tex>T \subseteq S, t \in S \setminus T, </tex> и <tex> s \in span(T \cup t) \setminus span(T) </tex>. Тогда <tex> span(T ) \subset span(T \cup s) \subseteq span(T \cup t) </tex>. Следовательно, по 2 свойству, <tex>span(T \cup s) = span(T \cup t) </tex>, и следовательно, <tex> t \in span(T \cup s)</tex>.<br />
<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
*''Alexander Schrijver'' {{---}} Combinatorial Optimization. Polyhedra and Efficiency<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48556Покрытия, закрытые множества2015-06-15T21:09:47Z<p>Shiplayer: /* Покрытие */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Пусть S {{---}} конечное множество. Функция <tex> span : \mathcal P (S) \rightarrow \mathcal P (S) </tex> является покрытием матроида тогда и только тогда, когда удовлетворяет следующим свойствам:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) \leqslant r(T \cup U \cup {s}) \leqslant r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \notin span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {{---}} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. <br />
<br />
Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = \mathcal {f} i \mathcal {g}</tex> и <tex>J \setminus I = \mathcal {f} {j_1, j_2} \mathcal {g}</tex>. Предположим, что <tex> I \cup {j_1} \notin L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \notin L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \notin span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \notin L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Пусть <tex> S </tex> {{---}} какое-то множество и <tex> \mathcal L \subseteq S </tex>. Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof ='''Необходимость'''. Пусть <tex> \mathcal L </tex> семейство закрытых множеств матроида <tex> M = (S, \mathcal I) </tex>. 1 свойство следует из <tex> span(A \cap B) \subseteq span(A) \cap span(B) = A \cap B </tex>, по определению закрытого множества мы получаем, что пересечение закрытого множества закрыто. Посмотрим на 2 свойства, допустим, что такой <tex> F'' </tex> существует, и выберем <tex> s \in F'' \setminus F </tex>. Таким образом <tex> s \notin span(F)</tex>. Согласно тому, что <tex> F' \not\subseteq F'' </tex>, мы получаем, что <tex> t \notin span(F \cup s)</tex>. Поэтому, по 2 свойству покрывающего множества для <tex> T := F </tex> получаем противоречие, т.к. <tex> s \notin span(F) = F'</tex>.<br />
<br />
'''Достаточность'''. Пусть <tex> \mathcal L </tex> удовлетворяет свойствам закрытого множества и <tex> span(Y) </tex> будет наименьшем множеством в <tex> \mathcal L </tex> содержащий <tex> Y </tex>, для <tex> F \subseteq S </tex>. Поскольку <tex> F \in \mathcal L \Longleftrightarrow span(F) = F </tex>, этого достаточно, чтобы увидеть, что <tex> span </tex> удовлетворяет свойствам покрытого множества. 1 свойство тривиально. Рассмотрим 2 свойство, пусть <tex>T \subseteq S, t \in S \setminus T, </tex> и <tex> s \in span(T \cup t) \setminus span(T) </tex>. Тогда <tex> span(T ) \subset span(T \cup s) \subseteq span(T \cup t) </tex>. Следовательно, по 2 свойству, <tex>span(T \cup s) = span(T \cup t) </tex>, и следовательно, <tex> t \in span(T \cup s)</tex>.<br />
<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48553Покрытия, закрытые множества2015-06-15T21:00:20Z<p>Shiplayer: /* Закрытые множества */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Покрытие обладает следующими свойствами:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) \leqslant r(T \cup U \cup {s}) \leqslant r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \notin span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {{---}} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. <br />
<br />
Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = \mathcal {f} i \mathcal {g}</tex> и <tex>J \setminus I = \mathcal {f} {j_1, j_2} \mathcal {g}</tex>. Предположим, что <tex> I \cup {j_1} \notin L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \notin L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \notin span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \notin L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Пусть <tex> S </tex> {{---}} какое-то множество и <tex> \mathcal L \subseteq S </tex>. Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof ='''Необходимость'''. Пусть <tex> \mathcal L </tex> семейство закрытых множеств матроида <tex> M = (S, \mathcal I) </tex>. 1 свойство следует из <tex> span(A \cap B) \subseteq span(A) \cap span(B) = A \cap B </tex>, по определению закрытого множества мы получаем, что пересечение закрытого множества закрыто. Посмотрим на 2 свойства, допустим, что такой <tex> F'' </tex> существует, и выберем <tex> s \in F'' \setminus F </tex>. Таким образом <tex> s \notin span(F)</tex>. Согласно тому, что <tex> F' \not\subseteq F'' </tex>, мы получаем, что <tex> t \notin span(F \cup s)</tex>. Поэтому, по 2 свойству покрывающего множества для <tex> T := F </tex> получаем противоречие, т.к. <tex> s \notin span(F) = F'</tex>.<br />
<br />
'''Достаточность'''. Пусть <tex> \mathcal L </tex> удовлетворяет свойствам закрытого множества и <tex> span(Y) </tex> будет наименьшем множеством в <tex> \mathcal L </tex> содержащий <tex> Y </tex>, для <tex> F \subseteq S </tex>. Поскольку <tex> F \in \mathcal L \Longleftrightarrow span(F) = F </tex>, этого достаточно, чтобы увидеть, что <tex> span </tex> удовлетворяет свойствам покрытого множества. 1 свойство тривиально. Рассмотрим 2 свойство, пусть <tex>T \subseteq S, t \in S \setminus T, </tex> и <tex> s \in span(T \cup t) \setminus span(T) </tex>. Тогда <tex> span(T ) \subset span(T \cup s) \subseteq span(T \cup t) </tex>. Следовательно, по 2 свойству, <tex>span(T \cup s) = span(T \cup t) </tex>, и следовательно, <tex> t \in span(T \cup s)</tex>.<br />
<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48524Покрытия, закрытые множества2015-06-15T18:20:34Z<p>Shiplayer: /* Покрытие */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Покрытие обладает следующими свойствами:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) \leqslant r(T \cup U \cup {s}) \leqslant r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \notin span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {{---}} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. <br />
<br />
Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = \mathcal {f} i \mathcal {g}</tex> и <tex>J \setminus I = \mathcal {f} {j_1, j_2} \mathcal {g}</tex>. Предположим, что <tex> I \cup {j_1} \notin L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \notin L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \notin span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \notin L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Пусть <tex> S </tex> {{---}} какое-то множество и <tex> \mathcal L \subseteq S </tex>. Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof ='''Необходимость'''. Пусть <tex> \mathcal L </tex> семейство закрытых множеств матроида <tex> M = (S, \mathcal I) </tex>. 1 свойство следует из <tex> span(A \cap B) \subseteq span(A) \cap span(B) = A \cap B </tex>. Посмотрим на 2 свойства, допустим, что такой <tex> F'' </tex> существует, и выберем <tex> s \in F'' \setminus F </tex>. Таким образом <tex> s \notin span(F)</tex>. Согласно тому, что <tex> F' \not\subseteq F'' </tex>, мы получаем, что <tex> t \notin span(F \cup s)</tex>. Поэтому, по 2 свойству покрывающего множества для <tex> T := F </tex> получаем противоречие, т.к. <tex> s \notin span(F) = F'</tex>.<br />
<br />
'''Достаточность'''. Пусть <tex> \mathcal L </tex> удовлетворяет свойствам закрытого множества и <tex> span(Y) </tex> будет наименьшем множеством в <tex> \mathcal L </tex> содержащий <tex> Y </tex>, для <tex> F \subseteq S </tex>. Поскольку <tex> F \in \mathcal L \Longleftrightarrow span(F) = F </tex>, этого достаточно, чтобы увидеть, что <tex> span </tex> удовлетворяет свойствам покрытого множества. 1 свойство тривиально. Рассмотрим 2 свойство, пусть <tex>T \subseteq S, t \in S \setminus T, </tex> и <tex> s \in span(T \cup t) \setminus span(T) </tex>. Тогда <tex> span(T ) \subset span(T \cup s) \subseteq span(T \cup t) </tex>. Следовательно, по 2 свойству, <tex>span(T \cup s) = span(T \cup t) </tex>, и следовательно, <tex> t \in span(T \cup s)</tex>.<br />
<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48514Покрытия, закрытые множества2015-06-15T17:19:38Z<p>Shiplayer: /* Закрытые множества */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Покрытие обладает следующими свойствами:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) <= r(T \cup U \cup {s}) <= r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \notin span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {{---}} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. <br />
<br />
Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = \mathcal {f} i \mathcal {g}</tex> и <tex>J \setminus I = \mathcal {f} {j_1, j_2} \mathcal {g}</tex>. Предположим, что <tex> I \cup {j_1} \notin L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \notin L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \notin span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \notin L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Пусть <tex> S </tex> {{---}} какое-то множество и <tex> \mathcal L \subseteq S </tex>. Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof ='''Необходимость'''. Пусть <tex> \mathcal L </tex> семейство закрытых множеств матроида <tex> M = (S, \mathcal I) </tex>. 1 свойство следует из <tex> span(A \cap B) \subseteq span(A) \cap span(B) = A \cap B </tex>. Посмотрим на 2 свойства, допустим, что такой <tex> F'' </tex> существует, и выберем <tex> s \in F'' \setminus F </tex>. Таким образом <tex> s \notin span(F)</tex>. Согласно тому, что <tex> F' \not\subseteq F'' </tex>, мы получаем, что <tex> t \notin span(F \cup s)</tex>. Поэтому, по 2 свойству покрывающего множества для <tex> T := F </tex> получаем противоречие, т.к. <tex> s \notin span(F) = F'</tex>.<br />
<br />
'''Достаточность'''. Пусть <tex> \mathcal L </tex> удовлетворяет свойствам закрытого множества и <tex> span(Y) </tex> будет наименьшем множеством в <tex> \mathcal L </tex> содержащий <tex> Y </tex>, для <tex> F \subseteq S </tex>. Поскольку <tex> F \in \mathcal L \Longleftrightarrow span(F) = F </tex>, этого достаточно, чтобы увидеть, что <tex> span </tex> удовлетворяет свойствам покрытого множества. 1 свойство тривиально. Рассмотрим 2 свойство, пусть <tex>T \subseteq S, t \in S \setminus T, </tex> и <tex> s \in span(T \cup t) \setminus span(T) </tex>. Тогда <tex> span(T ) \subset span(T \cup s) \subseteq span(T \cup t) </tex>. Следовательно, по 2 свойству, <tex>span(T \cup s) = span(T \cup t) </tex>, и следовательно, <tex> t \in span(T \cup s)</tex>.<br />
<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48490Покрытия, закрытые множества2015-06-15T14:45:11Z<p>Shiplayer: /* Покрытие */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Покрытие обладает следующими свойствами:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) <= r(T \cup U \cup {s}) <= r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \notin span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {{---}} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. <br />
<br />
Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = \mathcal {f} i \mathcal {g}</tex> и <tex>J \setminus I = \mathcal {f} {j_1, j_2} \mathcal {g}</tex>. Предположим, что <tex> I \cup {j_1} \notin L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \notin L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \notin span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \notin L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof =<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48480Покрытия, закрытые множества2015-06-15T12:45:16Z<p>Shiplayer: /* Покрытие */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Покрытие обладает следующими свойствами:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) <= r(T \cup U \cup {s}) <= r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \in span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {---} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = {i}</tex> и <tex>J \setminus I = {j_1, j_2}</tex>. Предположим, что <tex> I \cup {j_1} \in L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \in L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \in span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \in L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. В силу максимальности <tex> I </tex>, мы знаем, что <tex>I \cup t \notin L</tex>, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof =<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48479Покрытия, закрытые множества2015-06-15T12:35:58Z<p>Shiplayer: /* Покрытие */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Покрытие обладает следующими свойствами:<br />
# <tex> T, U \subseteq S;\ U \subseteq span(T) \ \Rightarrow \ span(U) \subseteq span(T) </tex><br />
# <tex> T \subseteq S,\ t \in S \setminus T,\ s \in span(T \cup t) \setminus span(T) \ \Rightarrow \ t \in span(T \cup s) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) <= r(T \cup U \cup {s}) <= r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \in span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {---} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = {i}</tex> и <tex>J \setminus I = {j_1, j_2}</tex>. Предположим, что <tex> I \cup {j_1} \in L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \in L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \in span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \in L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. Мы знаем <tex>I \cup t \notin L</tex>, т.к. <tex> I </tex> максимально по включению, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof =<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%BE%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D1%8F,_%D0%B7%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%B0&diff=48478Покрытия, закрытые множества2015-06-15T12:20:49Z<p>Shiplayer: /* Покрытие */</p>
<hr />
<div>== Покрытие ==<br />
<br />
{{Определение<br />
|definition = Пусть <tex>M =\; \langle X,I \rangle</tex> {{---}} матроид. Тогда '''покрытие''' (англ. ''span'') множества <tex>A \subseteq X</tex> {{---}} это множество <tex> span_M(A) = \mathcal {f} x \in X \; |\; r(A) = r(A \cup x) \mathcal {g}</tex><br />
}}<br />
Далее <tex>span_M </tex> будет указываться, как <tex>span</tex><br />
<br />
{{Определение<br />
|definition = <tex> span(A) = A \cup \mathcal {f} x \in X \setminus A \; |\; \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \mathcal {g} </tex> <br />
}}<br />
<br />
{{Утверждение<br />
|statement=Эти определения эквивалентны.<br />
|proof=Понятно, что элементы из <tex> A </tex> подходят под оба определения. Для остальных же <tex> x </tex> равенство <tex> \ r(A) = r(A \cup x) </tex> означает, что не найдётся множеств <tex> S' \subseteq A \cup x :\ S' \in I,\ |S'| > r(A). </tex> Для такого <tex> S' </tex> обязательно будет выполнено <tex> x \in S', </tex> в противном случае <tex> S' \subseteq A, </tex> что приведёт к <tex> r(A) \geqslant |S'|. </tex> Тогда для <tex> S = S' \setminus x </tex> верно <tex> S \subseteq A,\ S \in I. </tex> Из последнего получается, что <tex> r(A) \geqslant |S|, </tex> и учитывая <tex> r(A) < |S'|,\ |S| + 1 = |S'| </tex> имеем <tex> r(A) = |S|. </tex> <br />
<br />
Иначе говоря, не должно существовать множеств <tex> S \subseteq A,\ S \in I,\ |S| = r(A):\ S' = S \cup x \in I. </tex> <br />
}}<br />
<br />
<br />
{{Утверждение<br />
|statement=Для множества <tex> A \subseteq X </tex> выполнено <tex> span(A) \subseteq \langle A \rangle. </tex> <br />
|proof=Покажем, что следующее определение замыкания равносильно тому, которое [[Оператор замыкания для матроидов | было дано]] ранее:<br />
: <tex>\langle A \rangle = A \cup \mathcal {f} x \in X \setminus A \; |\; \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I \mathcal {g}</tex><br />
По сравнению со старым определением появилось два ограничения, нужно убедится в том, что они не существены. Сначала рассмотрим <tex> |H| = r(A). </tex> <br />
: Пусть <tex> \exists H \subseteq A :\ H \in I ,\; H \cup x \notin I, </tex> но <tex> |H| < r(A). </tex> По [[Ранговая функция, полумодулярность | определению ранга]] <tex> \exists D \subseteq A ,\; D \in I :\ |D| = r(A). </tex> Поскольку <tex> |H| < |D| </tex>, можно применить [[Определение матроида | 3-ю аксиому матроидов]] несколько раз и получить <tex> H' \subseteq A :\ H \subseteq H' ,\; H' \in I ,\; |H'| = r(A). </tex> <br />
: <tex> H' \cup x \notin I </tex> также будет выполнено, поскольку в противном случае <tex> H \cup x \notin I </tex> будет неверно (в силу [[Определение матроида | 2-ой аксиомы матроидов]]).<br />
Второе ограничение {{---}} <tex> x \in X \setminus A </tex> можно наложить по той причине, что элементы <tex> x \in A </tex> и так входят в замыкание благодаря левой части объединения.<br />
<br />
В соответствии с этим определением, замыкание множества <tex> A </tex> {{---}} это, кроме всех элементов <tex> A </tex>, все такие <tex> x, </tex> что какое-то из максимальных по мощности независимых подмножеств <tex> A </tex> нельзя дополнить <tex> x </tex>-ом, оставив это множество независимым. Определение покрытия отличается только квантором {{---}} вместо "какое-то" нужно поставить "любое".<br />
<br />
Учитывая, что <tex> S \subseteq A,\ S \in I,\ |S| = r(A) </tex> описывает непустое множество таких <tex> S </tex> (по определению ранга), будет верным следствие:<br />
: <tex> \forall S \subseteq A,\ S \in I,\ |S| = r(A) :\ S \cup x \notin I \ \Rightarrow </tex> <br />
: <tex> \exists H \subseteq A, \; H \in I , \; |H| = r(A) :\ H \cup x \notin I </tex> <br />
Поэтому <tex> x \in span(A) \Rightarrow x \in \langle A \rangle. </tex> <br />
}}<br />
<br />
<br />
{{Теорема<br />
|statement = Покрытие обладает следующими свойствами:<br />
# <tex> A, B \subseteq X;\ A \subseteq span(B) \ \Rightarrow \ span(A) \subseteq span(B) </tex><br />
# <tex> A \subseteq X,\ p \in X \setminus A,\ q \in span(A \cup p) \setminus span(A) \ \Rightarrow \ p \in span(A \cup q) </tex><br />
|proof ='''Необходимое условие'''. Пусть <tex> span </tex> будет функцией покрытия матроида <tex> M = (S, L) </tex> с ранговой функцией <tex> r </tex>. Покажем, что <tex> s \in span(T)</tex>. Пусть <tex>U \subseteq span(T)</tex> и <tex>s \in span(U)</tex>. Предположим, что <tex> s </tex> не принадлежит <tex>T</tex>. Тогда по [[ Ранговая_функция, полумодулярность | полумодулярность ранговой функции]] мы имеем:<br />
: <tex> r(T \cup {s}) <= r(T \cup U \cup {s}) <= r(T \cup U) + r(U \cup {s}) - r(U) = r(T \cup U) = r(T)</tex><br />
Это показывает, что <tex> s \in span(T) </tex>.<br />
<br />
Заметим, что <tex> s \in span(T \cup {t}) \Rightarrow span(T) </tex> эквивалентно таким выражениям: <tex> r(T \cup {t} \cup {s}) = r(T \cup {t}) </tex> и <tex> r(T \cup {s}) > r(T)</tex>. Следовательно<br />
: <tex>r(T \cup t \cup {s}) = r(T \cup {t}) <= r(T) + 1 <= r(T \cup {s}) </tex><br />
то есть, <tex> t \in span(T \cup {s}) </tex>.<br />
<br />
'''Достаточное условие'''. Пусть функция <tex>span</tex> удовлетворяет свойствам и определена, как:<br />
:<tex> L = \mathcal {f} I \subseteq S \; |\; \forall s \in I : s \notin span(I \setminus {s}) \mathcal {g} </tex><br />
Сперва посмотрим на следующее: <br />
:если <tex> I \in L </tex>, тогда <tex>span(I) = I \cup \mathcal {f} t \; | \; I \cup {t} \in L \mathcal {g} </tex>. (1)<br />
<br />
Действительно, если <tex> t \in span(I) \setminus I </tex>, тогда <tex> I \cup {t} \notin L </tex>, по определению независимого множества. С другой стороны, <tex> I \subseteq span(I)</tex>. Кроме того, если <tex> I \cup {t} \notin L </tex>, тогда по определению независимого множества получаем, что <tex> \exists s \in I \cup t : s \in span(I \cup {t} \setminus {s}) </tex>. Если <tex> s = t </tex>, тогда <tex> t \in span(I) </tex>. Предположим, что <tex> s \neq t </tex>, т.е. <tex> s \in I </tex>. Мы знаем, что <tex> s \in span(I \setminus {s}) </tex>, так как <tex> I \in L </tex>. Таким образом по 3 свойству доказывается (для <tex> T \in I \setminus {s} </tex>), <tex> t \in span(I) </tex>.<br />
<br />
Теперь покажем, что <tex> M = (S, L) </tex> {---} матроид. Очевидно, <tex> \emptyset \in L </tex>. Для начала покажем, что <tex> I </tex> закрытое множество под полученным подмножеством, Пусть <tex> I \in L </tex> и <tex> J \subseteq I </tex>. Мы видим, что <tex> J \in I </tex>. Предположим наоборот, что <tex>\exists s \in J : s \in span(J \setminus {s}) </tex>. Тогда по второму свойству <tex> span(J \setminus {s}) \subseteq span(I \setminus {s})</tex>. Следовательно, <tex> s \in span( I \setminus {s})</tex>, что противоречит условию, что <tex> I \in L </tex>. Для того чтобы проверить [[Определение матроида | 3-ю аксиому матроидов]], допустим, что <tex> I, J \in L </tex>, <tex> |I \setminus J| = 1 </tex> и <tex> |J \setminus I| = 2</tex>. Пусть <tex>I \setminus J = {i}</tex> и <tex>J \setminus I = {j_1, j_2}</tex>. Предположим, что <tex> I \cup {j_1} \in L</tex>, т.е. <tex> J \cup {i} \setminus {j_2} \in L</tex>, и так по (1) применяется к <tex>J \setminus {j_2} </tex>, <tex> i \in span(J \setminus {j_2}) </tex>. Поэтому, <tex> I \subseteq span(J \setminus {j_2})</tex> и <tex> span(I) \subseteq span(J \setminus {j_2}) </tex>. Таким образом <tex> j_2 \in span(i) </tex>(как и <tex> J \in L</tex>) и поэтому, (1) применяется к <tex> I </tex> и к <tex> I \cup {j_2} \in L </tex>.<br />
<br />
Таким образом <tex> M </tex> является матроидом. Теперь покажем, что <tex>span = span_M</tex>. Выберем такое множество <tex> T \subseteq S </tex>, чтобы увидеть, что <tex> span(T) = span_M(T) </tex>, пусть <tex> I </tex> будет базой <tex> T </tex> (в <tex> M </tex>). Тогда используя (1), мы получаем:<br />
:<tex>span_M(T) = T \cup \mathcal {f} x \; | \; I \cup {x} \in L \mathcal {g} = span(I) \subseteq(T) </tex><br />
Таким образом, мы показали, что <tex> span(T) \subseteq span(I)</tex> т.е. по 1 свойству <tex> T \subseteq span(I)</tex>. Теперь выберем <tex> t \in T \setminus I</tex>. Мы знаем <tex>I \cup t \notin L</tex>, т.к. <tex> I </tex> максимально по включению, и, следовательно, по (1) получаем, что <tex> t \in span(I) </tex>.<br />
}}<br />
<br />
== Закрытые множества ==<br />
{{Определение<br />
|definition = Множество <tex>A \subseteq X</tex> называется '''закрытым''' (англ. ''closed set'', ''flat''), если <tex> span(A) = A. </tex> Класс закрытых множеств обозначается <tex> \mathcal L. </tex><br />
}}<br />
<br />
{{Теорема<br />
|statement = Закрытые множества обладают следующими свойствами:<br />
# <tex> A, B \in \mathcal L \ \; \Rightarrow \ A \cap B \in \mathcal L </tex><br />
# Если <tex> F \in \mathcal L,\ p \in X \setminus F </tex> и <tex> F' </tex> {{---}} наименьшее закрытое множество, содержащее <tex> F \cup p, </tex> тогда не существует <tex> F'' \in \mathcal L :\ F \subseteq F'' \subseteq F'. </tex> <br />
|proof =<br />
}}<br />
<br />
== См. также ==<br />
* [[Оператор замыкания для матроидов]]<br />
<br />
== Источники информации ==<br />
*''Асанов М. О., Баранский В. А., Расин В. В.'' {{---}} Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
* [http://courses.engr.illinois.edu/cs598csc/sp2010/Lectures/Lecture14.pdf courses.engr.illinois.edu {{---}} Lecture 14, course ''CS 598CSC: Combinatorial optimization'']<br />
<br />
[[Категория:Алгоритмы и структуры данных]]<br />
[[Категория:Матроиды]]<br />
[[Категория:Основные факты теории матроидов]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=1precpmtnrifmax&diff=482991precpmtnrifmax2015-06-10T09:53:04Z<p>Shiplayer: /* Время работы */</p>
<hr />
<div><tex dpi = "200"> 1 \mid prec,pmtn,r_i \mid f_{max}</tex><br />
<br />
{{Задача<br />
|definition=Задача <tex> 1 \mid prec, pmtn, r_i \mid f_{max} </tex> является обобщением [[Правило Лаулера|<tex>1 \mid prec \mid f_{max}</tex>]], но здесь у работ также есть времена появления, раньше которых их делать запрещено, и их можно прерывать.<br />
}}<br />
<br />
== Алгоритм ==<br />
Работу будем обозначать просто ее номером (<tex> i </tex>), при этом, номера работ могут меняться в зависимости от того, по какому параметру они отсортированы. Время появления работы — <tex> r_i </tex>, время, требуемое для ее выполнения — <tex> p_i </tex>. Множество ребер графа обозначается как <tex> E </tex>.<br />
<br />
=== Modify ===<br />
Для начала, модифицируем времена появления работ. Если работа <tex> j </tex> зависит от <tex> i </tex>, то, очевидно, она не может быть начата раньше, чем закончится выполнение <tex> i </tex>, поэтому нужно заменить <tex> r_j </tex> на <tex> \max(r_j, r_i + p_i) </tex>. Алгоритм, делающий это, представлен ниже (работы рассматриваются в порядке топологической сортировки):<br />
<br />
Modify()<br />
'''for''' i <tex> \in \{ 1 \ldots n \} </tex><br />
'''for''' j: ij <tex> \in E </tex><br />
<tex> r_j \leftarrow \max(r_j, r_i + p_i) </tex> <br />
<br />
После выполнения этого алгоритма для любых двух работ <tex> i, j </tex>, таких, что <tex> j </tex> зависит от <tex> i </tex>, выполняется <tex> r_j > r_i </tex>, поэтому, при рассмотрении работ в порядке неубывания времен их появления, они также будут топологически отсортированы.<br />
<br />
=== Blocks ===<br />
Здесь и далее считается, что работы отсортированы в порядке неубывания модифицированных <tex> r_i </tex>.<br />
<br />
Станок, выполняющий работы, выполняет работу в некоторые интервалы времени и простаивает в остальное время. Следующий алгоритм разбивает множество работ на блоки, внутри которых станок работает без простоя.<br />
<br />
Blocks(<tex> \{ 1 \ldots n \} </tex>)<br />
<tex> j \leftarrow 0 </tex><br />
<tex> t \leftarrow 0 </tex><br />
'''for''' <tex> i \in \{ 1 \ldots n \} </tex><br />
'''if''' <tex> t < r_i </tex><br />
<tex> t \leftarrow r_i </tex><br />
<tex> j \leftarrow j + 1 </tex><br />
<tex> B_j \leftarrow B_j \cup i </tex><br />
<tex> t \leftarrow t + p_i </tex><br />
'''return''' <tex> {B_1, \ldots, B_j} </tex><br />
<br />
Если алгоритм Blocks вызывается от пустого множества, то считаем, что он возвращает также пустое множество.<br />
<br />
Определим время начала блока <tex> B_j </tex> как <tex>s_j = \min\limits_{i \in B_j} r_i </tex>, а время конца — как <tex> e_j = s_j + \sum\limits_{i \in B_j} p_i </tex>.<br />
<br />
{{Лемма<br />
|statement=<br />
Существует оптимальное расписание, такое, что все во все временные интервалы <tex> [s_j; e_j] </tex>, соответствующие блокам <tex> B_j </tex>, построенным алгоритмом Blocks, станок работает без простоя.<br />
|proof=<br />
Возьмем произвольное оптимальное расписание <tex> S </tex>, в нем деление на блоки может также быть произвольным. Найдем первый такой временной интервал <tex> [s_j; e_j] </tex>, что в <tex> S </tex> есть период простоя внутри <tex> [s_j; e_j] </tex> (если таких периодов несколько, будем рассматривать первый из них). Обозначим его за <tex> [s; e] </tex>. <br />
<br />
Возьмем некоторую работу <tex> i </tex>, такую, что она начинается позже, чем в момент времени <tex> s </tex>, не имеет в графе зависимостей предков, завершаемых позже, чем в момент <tex> s </tex> и <tex> r_i \le s </tex>. Такая работа обязательно существует, иначе для множества работ, выполняемых позже, чем в момент <tex> s </tex>, было бы <tex> r = \min\limits_{k \in T} r_k > s </tex>, и внутри блока <tex> B_j </tex> был бы простой <tex> [s_j; r] </tex>, что невозможно по построению алгоритма Blocks. Очевидно, мы можем начать выполнять ее в момент времени <tex> s </tex> и полностью, либо частично заполнить простой <tex> [s; e] </tex>; так как <tex> f_i </tex> — неубывающая функция, то ответ останется оптимальным. Повторяя этот процесс, мы за конечное число шагов придем к оптимальному расписанию с требуемым свойством.<br />
}}<br />
<br />
=== Decompose ===<br />
Допустим, у нас есть блок работ, который можно выполнить без прерываний. Общая идея алгоритма Decompose следующая: найдем работу <tex> i </tex>, которую выгоднее всего выполнить последней. Разобъем оставшееся множество работ на блоки, решим задачу для этих блоков рекурсивно и вставим <tex> i </tex> в промежутки между ними, до них и после них, начиная с <tex> r_i </tex>. Псевдокод этого алгоритма представлен ниже.<br />
<br />
Decompose(B)<br />
найти <tex> l: f_l(e) = \min \{f_j(e) \mid j \in B, \overline\exists\ k: jk \in E \} </tex><br />
ans <tex> \leftarrow f_l(e) </tex><br />
G <tex> \leftarrow </tex> Blocks(<tex> B \setminus l </tex>)<br />
вставить l в промежутки между блоками G, начиная с <tex> r_l </tex><br />
'''for''' <tex>B_j \in G </tex>:<br />
ans = max(ans, Decompose(<tex> B_j </tex>))<br />
'''return''' ans<br />
<br />
{{Теорема<br />
|statement=<br />
Расписание для блока, построенное алгоритмом Decompose, является корректным и оптимальным.<br />
|proof=<br />
Докажем сначала корректность.<br />
<br />
Убедимся, что порядок выполнения работ, заданный графом зависимостей, не нарушается. Заметим, что в разбиении <tex> B \setminus l </tex> на блоки существует не более одного блока <tex> B_0 </tex>, расположенного до момента времени <tex> r_l </tex> — иначе после вставки <tex> l </tex> в промежутки между блоками, <tex> B </tex> выполнялся бы с прерываниями. Далее, заметим, что все интервалы времени, на которые назначается работа из блока <tex> B_j </tex>, находятся внутри интервала <tex> [s_j; e_j] </tex>; это относится и к блоку <tex> B_0 </tex>. Из этих двух наблюдений, а также того, что все работы со временами появления меньше, чем <tex> r_l </tex>, будут помещены в блок <tex> B_0 </tex>, следует, что порядок выполнения будет правильным.<br />
<br />
Также для корректности требуется, чтобы работы выполнялись не раньше, чем они появляются. Так как время выполнения работы определяется только в строке 4 алгоритма, которая соответствует этому требованию, то условие выполняется.<br />
<br />
Найдем теперь нижнюю оценку на <tex> f_{max} </tex>. Пусть <tex> f_{max}(J) </tex> — ответ для множества работ <tex> J </tex>.<br />
<br />
Очевидно, для любой работы <tex> j \in J </tex> выполняется <tex> f_{max}(J) \ge f_{max}(J \setminus j) </tex>, значит, <tex> f_{max}(J) \ge \max\limits_{j \in J} f_{max}(J \setminus j) </tex>.<br />
<br />
Также, так как в оптимальном решении какая-то работа без потомков обязательно заканчивается в блоке <tex> B </tex>, то <tex> f_{max}(J) \ge f_l(e) </tex>.<br />
<br />
Отсюда следует <tex> f_{max}(J) \ge \max(f_l(e), \max\limits_{j \in J} f_{max}(J \setminus j)) </tex>. По псевдокоду алгоритма видно, что его ответ достигает этой нижней оценки.<br />
}}<br />
<br />
=== Общий алгоритм ===<br />
<br />
Выполним Modify, после чего разобъем все множество работ на блоки и для каждого блока запустим Decompose():<br />
<br />
MakeSchedule()<br />
Modify()<br />
B <tex> \leftarrow </tex> Blocks(<tex> \{1 \ldots n \} </tex>)<br />
ans <tex> \leftarrow </tex> <tex> -\infty </tex><br />
'''for''' (<tex> B_j \in B</tex>):<br />
ans = max(ans, Decompose(<tex> B_j </tex>))<br />
'''return''' ans<br />
<br />
Из доказанной ранее леммы следует, что <tex> f_{max}(\{ 1 \ldots n \}) = \max\limits_{j} f_{max}(B_j) </tex>, поэтому расписание для всего множества работ, поделенного на блоки, также будет оптимальным и корректным.<br />
<br />
== Время работы ==<br />
{{Теорема<br />
|statement=<br />
Время работы алгоритма MakeSchedule — <tex> O(n^2) </tex> операций.<br />
|proof=<br />
Обозначим за <tex> P(n) </tex> время, необходимое для выполнения алгоритма MakeSchedule на n работах. Очевидно, для корректно определенной функции P в силу структуры алгоритма должно выполняться неравенство:<br />
<br />
<tex> P(n) \ge сn + \sum\limits_{i = 1}^{k} P(n_i) </tex><br />
<br />
Здесь <tex> n_i </tex> - размер блока с номером <tex> i </tex>, построенного алгоритмом Blocks(). Заметим, что <tex> \sum\limits_{i = 1}^{k} n_i = n - 1</tex>.<br />
<br />
Если <tex> P(n) = an^2 </tex>, то имеем:<br />
<br />
<tex> an^2 \ge cn + a \sum\limits_{i = 1}^{k} n_i^2 </tex><br />
<br />
Так как <tex> n^2 > (n - 1)^2 = (\sum\limits_{i = 1}^{k} n_i)^2 = \sum\limits_{i = 1}^{k} n_i^2 + 2\sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j </tex>, то можно переписать неравенство в следующем виде:<br />
<br />
<tex> 2a \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j \ge cn </tex><br />
<br />
Чтобы получить максимальную нижнюю оценку на <tex> a </tex>, оценим снизу <tex> \sum\limits_{i, j = 1}^{k} n_i n_j </tex>:<br />
<br />
<tex> \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j \ge \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} 1 \cdot n_j = \sum\limits_{j = 1}^{k} (k - 1) n_j = (k - 1) (n - 1) \ge \dfrac{nk}{4}</tex><br />
<br />
Значит, при <tex> a \ge \dfrac{c}{2} \dfrac{n}{\dfrac{nk}{4}} = \dfrac{2c}{k} </tex> требуемое неравенство будет выполняться.<br />
<br />
}}<br />
<br />
==Источники==<br />
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8<br />
<br />
[[Категория: Дискретная математика и алгоритмы]]<br />
[[Категория: Теория расписаний]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=1precpmtnrifmax&diff=482801precpmtnrifmax2015-06-10T06:10:47Z<p>Shiplayer: </p>
<hr />
<div><tex dpi = "200"> 1 \mid prec,pmtn,r_i \mid f_{max}</tex><br />
<br />
{{Задача<br />
|definition=Задача <tex> 1 \mid prec, pmtn, r_i \mid f_{max} </tex> является обобщением [[Правило Лаулера|<tex>1 \mid prec \mid f_{max}</tex>]], но здесь у работ также есть времена появления, раньше которых их делать запрещено, и их можно прерывать.<br />
}}<br />
<br />
== Алгоритм ==<br />
Работу будем обозначать просто ее номером (<tex> i </tex>), при этом, номера работ могут меняться в зависимости от того, по какому параметру они отсортированы. Время появления работы — <tex> r_i </tex>, время, требуемое для ее выполнения — <tex> p_i </tex>. Множество ребер графа обозначается как <tex> E </tex>.<br />
<br />
=== Modify ===<br />
Для начала, модифицируем времена появления работ. Если работа <tex> j </tex> зависит от <tex> i </tex>, то, очевидно, она не может быть начата раньше, чем закончится выполнение <tex> i </tex>, поэтому нужно заменить <tex> r_j </tex> на <tex> \max(r_j, r_i + p_i) </tex>. Алгоритм, делающий это, представлен ниже (работы рассматриваются в порядке топологической сортировки):<br />
<br />
Modify()<br />
'''for''' i <tex> \in \{ 1 \ldots n \} </tex><br />
'''for''' j: ij <tex> \in E </tex><br />
<tex> r_j \leftarrow \max(r_j, r_i + p_i) </tex> <br />
<br />
После выполнения этого алгоритма для любых двух работ <tex> i, j </tex>, таких, что <tex> j </tex> зависит от <tex> i </tex>, выполняется <tex> r_j > r_i </tex>, поэтому, при рассмотрении работ в порядке неубывания времен их появления, они также будут топологически отсортированы.<br />
<br />
=== Blocks ===<br />
Здесь и далее считается, что работы отсортированы в порядке неубывания модифицированных <tex> r_i </tex>.<br />
<br />
Станок, выполняющий работы, выполняет работу в некоторые интервалы времени и простаивает в остальное время. Следующий алгоритм разбивает множество работ на блоки, внутри которых станок работает без простоя.<br />
<br />
Blocks(<tex> \{ 1 \ldots n \} </tex>)<br />
<tex> j \leftarrow 0 </tex><br />
<tex> t \leftarrow 0 </tex><br />
'''for''' <tex> i \in \{ 1 \ldots n \} </tex><br />
'''if''' <tex> t < r_i </tex><br />
<tex> t \leftarrow r_i </tex><br />
<tex> j \leftarrow j + 1 </tex><br />
<tex> B_j \leftarrow B_j \cup i </tex><br />
<tex> t \leftarrow t + p_i </tex><br />
'''return''' <tex> {B_1, \ldots, B_j} </tex><br />
<br />
Если алгоритм Blocks вызывается от пустого множества, то считаем, что он возвращает также пустое множество.<br />
<br />
Определим время начала блока <tex> B_j </tex> как <tex>s_j = \min\limits_{i \in B_j} r_i </tex>, а время конца — как <tex> e_j = s_j + \sum\limits_{i \in B_j} p_i </tex>.<br />
<br />
{{Лемма<br />
|statement=<br />
Существует оптимальное расписание, такое, что все во все временные интервалы <tex> [s_j; e_j] </tex>, соответствующие блокам <tex> B_j </tex>, построенным алгоритмом Blocks, станок работает без простоя.<br />
|proof=<br />
Возьмем произвольное оптимальное расписание <tex> S </tex>, в нем деление на блоки может также быть произвольным. Найдем первый такой временной интервал <tex> [s_j; e_j] </tex>, что в <tex> S </tex> есть период простоя внутри <tex> [s_j; e_j] </tex> (если таких периодов несколько, будем рассматривать первый из них). Обозначим его за <tex> [s; e] </tex>. <br />
<br />
Возьмем некоторую работу <tex> i </tex>, такую, что она начинается позже, чем в момент времени <tex> s </tex>, не имеет в графе зависимостей предков, завершаемых позже, чем в момент <tex> s </tex> и <tex> r_i \le s </tex>. Такая работа обязательно существует, иначе для множества работ, выполняемых позже, чем в момент <tex> s </tex>, было бы <tex> r = \min\limits_{k \in T} r_k > s </tex>, и внутри блока <tex> B_j </tex> был бы простой <tex> [s_j; r] </tex>, что невозможно по построению алгоритма Blocks. Очевидно, мы можем начать выполнять ее в момент времени <tex> s </tex> и полностью, либо частично заполнить простой <tex> [s; e] </tex>; так как <tex> f_i </tex> — неубывающая функция, то ответ останется оптимальным. Повторяя этот процесс, мы за конечное число шагов придем к оптимальному расписанию с требуемым свойством.<br />
}}<br />
<br />
=== Decompose ===<br />
Допустим, у нас есть блок работ, который можно выполнить без прерываний. Общая идея алгоритма Decompose следующая: найдем работу <tex> i </tex>, которую выгоднее всего выполнить последней. Разобъем оставшееся множество работ на блоки, решим задачу для этих блоков рекурсивно и вставим <tex> i </tex> в промежутки между ними, до них и после них, начиная с <tex> r_i </tex>. Псевдокод этого алгоритма представлен ниже.<br />
<br />
Decompose(B)<br />
найти <tex> l: f_l(e) = \min \{f_j(e) \mid j \in B, \overline\exists\ k: jk \in E \} </tex><br />
ans <tex> \leftarrow f_l(e) </tex><br />
G <tex> \leftarrow </tex> Blocks(<tex> B \setminus l </tex>)<br />
вставить l в промежутки между блоками G, начиная с <tex> r_l </tex><br />
'''for''' <tex>B_j \in G </tex>:<br />
ans = max(ans, Decompose(<tex> B_j </tex>))<br />
'''return''' ans<br />
<br />
{{Теорема<br />
|statement=<br />
Расписание для блока, построенное алгоритмом Decompose, является корректным и оптимальным.<br />
|proof=<br />
Докажем сначала корректность.<br />
<br />
Убедимся, что порядок выполнения работ, заданный графом зависимостей, не нарушается. Заметим, что в разбиении <tex> B \setminus l </tex> на блоки существует не более одного блока <tex> B_0 </tex>, расположенного до момента времени <tex> r_l </tex> — иначе после вставки <tex> l </tex> в промежутки между блоками, <tex> B </tex> выполнялся бы с прерываниями. Далее, заметим, что все интервалы времени, на которые назначается работа из блока <tex> B_j </tex>, находятся внутри интервала <tex> [s_j; e_j] </tex>; это относится и к блоку <tex> B_0 </tex>. Из этих двух наблюдений, а также того, что все работы со временами появления меньше, чем <tex> r_l </tex>, будут помещены в блок <tex> B_0 </tex>, следует, что порядок выполнения будет правильным.<br />
<br />
Также для корректности требуется, чтобы работы выполнялись не раньше, чем они появляются. Так как время выполнения работы определяется только в строке 4 алгоритма, которая соответствует этому требованию, то условие выполняется.<br />
<br />
Найдем теперь нижнюю оценку на <tex> f_{max} </tex>. Пусть <tex> f_{max}(J) </tex> — ответ для множества работ <tex> J </tex>.<br />
<br />
Очевидно, для любой работы <tex> j \in J </tex> выполняется <tex> f_{max}(J) \ge f_{max}(J \setminus j) </tex>, значит, <tex> f_{max}(J) \ge \max\limits_{j \in J} f_{max}(J \setminus j) </tex>.<br />
<br />
Также, так как в оптимальном решении какая-то работа без потомков обязательно заканчивается в блоке <tex> B </tex>, то <tex> f_{max}(J) \ge f_l(e) </tex>.<br />
<br />
Отсюда следует <tex> f_{max}(J) \ge \max(f_l(e), \max\limits_{j \in J} f_{max}(J \setminus j)) </tex>. По псевдокоду алгоритма видно, что его ответ достигает этой нижней оценки.<br />
}}<br />
<br />
=== Общий алгоритм ===<br />
<br />
Выполним Modify, после чего разобъем все множество работ на блоки и для каждого блока запустим Decompose():<br />
<br />
MakeSchedule()<br />
Modify()<br />
B <tex> \leftarrow </tex> Blocks(<tex> \{1 \ldots n \} </tex>)<br />
ans <tex> \leftarrow </tex> <tex> -\infty </tex><br />
'''for''' (<tex> B_j \in B</tex>):<br />
ans = max(ans, Decompose(<tex> B_j </tex>))<br />
'''return''' ans<br />
<br />
Из доказанной ранее леммы следует, что <tex> f_{max}(\{ 1 \ldots n \}) = \max\limits_{j} f_{max}(B_j) </tex>, поэтому расписание для всего множества работ, поделенного на блоки, также будет оптимальным и корректным.<br />
<br />
== Время работы ==<br />
{{Теорема<br />
|statement=<br />
Время работы алгоритма MakeSchedule — <tex> O(n^2) </tex> операций.<br />
|proof=<br />
Обозначим за <tex> P(n) </tex> время, необходимое для выполнения алгоритма MakeSchedule на n работах. Очевидно, для корректно определенной функции P в силу структуры алгоритма должно выполняться неравенство:<br />
<br />
<tex> P(n) \ge сn + \sum\limits_{i = 1}^{k} P(n_i) </tex><br />
<br />
Здесь <tex> n_i </tex> - размер блока с номером <tex> i </tex>, построенного алгоритмом Blocks(). Заметим, что <tex> \sum\limits_{i = 1}^{k} n_i = n - 1</tex>.<br />
<br />
Если <tex> P(n) = an^2 </tex>, то имеем:<br />
<br />
<tex> an^2 \ge cn + a \sum\limits_{i = 1}^{k} n_i^2 </tex><br />
<br />
Так как <tex> n^2 > (n - 1)^2 = (\sum\limits_{i = 1}^{k} n_i)^2 = \sum\limits_{i = 1}^{k} n_i^2 + 2\sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j </tex>, то можно переписать неравенство в следующем виде:<br />
<br />
<tex> 2a \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j \ge cn </tex><br />
<br />
Чтобы получить максимальную нижнюю оценку на <tex> a </tex>, оценим снизу <tex> \sum\limits_{i, j = 1}^{k} n_i n_j </tex>:<br />
<br />
<tex> \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j \ge \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} 1 \cdot n_j = \sum\limits_{j = 1}^{k} (k - 1) n_j = (k - 1) (n - 1) \ge \frac{nk}{4}</tex><br />
<br />
Значит, при <tex> a \ge \frac{c}{2} \frac{n}{\frac{nk}{4}} = \frac{2c}{k} </tex> требуемое неравенство будет выполняться.<br />
<br />
}}<br />
<br />
==Источники==<br />
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8<br />
<br />
[[Категория: Дискретная математика и алгоритмы]]<br />
[[Категория: Теория расписаний]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=1precpmtnrifmax&diff=482771precpmtnrifmax2015-06-09T21:32:46Z<p>Shiplayer: </p>
<hr />
<div>== Постановка задачи ==<br />
Задача <tex> 1 \mid prec, pmtn, r_i \mid f_{max} </tex> является обобщением [[Правило Лаулера|<tex>1 \mid prec \mid f_{max}</tex>]], но здесь у работ также есть времена появления, раньше которых их делать запрещено, и их можно прерывать.<br />
<br />
== Алгоритм ==<br />
Работу будем обозначать просто ее номером (<tex> i </tex>), при этом, номера работ могут меняться в зависимости от того, по какому параметру они отсортированы. Время появления работы — <tex> r_i </tex>, время, требуемое для ее выполнения — <tex> p_i </tex>. Множество ребер графа обозначается как <tex> E </tex>.<br />
<br />
=== Modify ===<br />
Для начала, модифицируем времена появления работ. Если работа <tex> j </tex> зависит от <tex> i </tex>, то, очевидно, она не может быть начата раньше, чем закончится выполнение <tex> i </tex>, поэтому нужно заменить <tex> r_j </tex> на <tex> \max(r_j, r_i + p_i) </tex>. Алгоритм, делающий это, представлен ниже (работы рассматриваются в порядке топологической сортировки):<br />
<br />
Modify()<br />
'''for''' i <tex> \in \{ 1 \ldots n \} </tex><br />
'''for''' j: ij <tex> \in E </tex><br />
<tex> r_j \leftarrow \max(r_j, r_i + p_i) </tex> <br />
<br />
После выполнения этого алгоритма для любых двух работ <tex> i, j </tex>, таких, что <tex> j </tex> зависит от <tex> i </tex>, выполняется <tex> r_j > r_i </tex>, поэтому, при рассмотрении работ в порядке неубывания времен их появления, они также будут топологически отсортированы.<br />
<br />
=== Blocks ===<br />
Здесь и далее считается, что работы отсортированы в порядке неубывания модифицированных <tex> r_i </tex>.<br />
<br />
Станок, выполняющий работы, выполняет работу в некоторые интервалы времени и простаивает в остальное время. Следующий алгоритм разбивает множество работ на блоки, внутри которых станок работает без простоя.<br />
<br />
Blocks(<tex> \{ 1 \ldots n \} </tex>)<br />
<tex> j \leftarrow 0 </tex><br />
<tex> t \leftarrow 0 </tex><br />
'''for''' <tex> i \in \{ 1 \ldots n \} </tex><br />
'''if''' <tex> t < r_i </tex><br />
<tex> t \leftarrow r_i </tex><br />
<tex> j \leftarrow j + 1 </tex><br />
<tex> B_j \leftarrow B_j \cup i </tex><br />
<tex> t \leftarrow t + p_i </tex><br />
'''return''' <tex> {B_1, \ldots, B_j} </tex><br />
<br />
Если алгоритм Blocks вызывается от пустого множества, то считаем, что он возвращает также пустое множество.<br />
<br />
Определим время начала блока <tex> B_j </tex> как <tex>s_j = \min\limits_{i \in B_j} r_i </tex>, а время конца — как <tex> e_j = s_j + \sum\limits_{i \in B_j} p_i </tex>.<br />
<br />
{{Лемма<br />
|statement=<br />
Существует оптимальное расписание, такое, что все во все временные интервалы <tex> [s_j; e_j] </tex>, соответствующие блокам <tex> B_j </tex>, построенным алгоритмом Blocks, станок работает без простоя.<br />
|proof=<br />
Возьмем произвольное оптимальное расписание <tex> S </tex>, в нем деление на блоки может также быть произвольным. Найдем первый такой временной интервал <tex> [s_j; e_j] </tex>, что в <tex> S </tex> есть период простоя внутри <tex> [s_j; e_j] </tex> (если таких периодов несколько, будем рассматривать первый из них). Обозначим его за <tex> [s; e] </tex>. <br />
<br />
Возьмем некоторую работу <tex> i </tex>, такую, что она начинается позже, чем в момент времени <tex> s </tex>, не имеет в графе зависимостей предков, завершаемых позже, чем в момент <tex> s </tex> и <tex> r_i \le s </tex>. Такая работа обязательно существует, иначе для множества работ, выполняемых позже, чем в момент <tex> s </tex>, было бы <tex> r = \min\limits_{k \in T} r_k > s </tex>, и внутри блока <tex> B_j </tex> был бы простой <tex> [s_j; r] </tex>, что невозможно по построению алгоритма Blocks. Очевидно, мы можем начать выполнять ее в момент времени <tex> s </tex> и полностью, либо частично заполнить простой <tex> [s; e] </tex>; так как <tex> f_i </tex> — неубывающая функция, то ответ останется оптимальным. Повторяя этот процесс, мы за конечное число шагов придем к оптимальному расписанию с требуемым свойством.<br />
}}<br />
<br />
=== Decompose ===<br />
Допустим, у нас есть блок работ, который можно выполнить без прерываний. Общая идея алгоритма Decompose следующая: найдем работу <tex> i </tex>, которую выгоднее всего выполнить последней. Разобъем оставшееся множество работ на блоки, решим задачу для этих блоков рекурсивно и вставим <tex> i </tex> в промежутки между ними, до них и после них, начиная с <tex> r_i </tex>. Псевдокод этого алгоритма представлен ниже.<br />
<br />
Decompose(B)<br />
найти <tex> l: f_l(e) = \min \{f_j(e) \mid j \in B, \overline\exists\ k: jk \in E \} </tex><br />
ans <tex> \leftarrow f_l(e) </tex><br />
G <tex> \leftarrow </tex> Blocks(<tex> B \setminus l </tex>)<br />
вставить l в промежутки между блоками G, начиная с <tex> r_l </tex><br />
'''for''' <tex>B_j \in G </tex>:<br />
ans = max(ans, Decompose(<tex> B_j </tex>))<br />
'''return''' ans<br />
<br />
{{Теорема<br />
|statement=<br />
Расписание для блока, построенное алгоритмом Decompose, является корректным и оптимальным.<br />
|proof=<br />
Докажем сначала корректность.<br />
<br />
Убедимся, что порядок выполнения работ, заданный графом зависимостей, не нарушается. Заметим, что в разбиении <tex> B \setminus l </tex> на блоки существует не более одного блока <tex> B_0 </tex>, расположенного до момента времени <tex> r_l </tex> — иначе после вставки <tex> l </tex> в промежутки между блоками, <tex> B </tex> выполнялся бы с прерываниями. Далее, заметим, что все интервалы времени, на которые назначается работа из блока <tex> B_j </tex>, находятся внутри интервала <tex> [s_j; e_j] </tex>; это относится и к блоку <tex> B_0 </tex>. Из этих двух наблюдений, а также того, что все работы со временами появления меньше, чем <tex> r_l </tex>, будут помещены в блок <tex> B_0 </tex>, следует, что порядок выполнения будет правильным.<br />
<br />
Также для корректности требуется, чтобы работы выполнялись не раньше, чем они появляются. Так как время выполнения работы определяется только в строке 4 алгоритма, которая соответствует этому требованию, то условие выполняется.<br />
<br />
Найдем теперь нижнюю оценку на <tex> f_{max} </tex>. Пусть <tex> f_{max}(J) </tex> — ответ для множества работ <tex> J </tex>.<br />
<br />
Очевидно, для любой работы <tex> j \in J </tex> выполняется <tex> f_{max}(J) \ge f_{max}(J \setminus j) </tex>, значит, <tex> f_{max}(J) \ge \max\limits_{j \in J} f_{max}(J \setminus j) </tex>.<br />
<br />
Также, так как в оптимальном решении какая-то работа без потомков обязательно заканчивается в блоке <tex> B </tex>, то <tex> f_{max}(J) \ge f_l(e) </tex>.<br />
<br />
Отсюда следует <tex> f_{max}(J) \ge \max(f_l(e), \max\limits_{j \in J} f_{max}(J \setminus j)) </tex>. По псевдокоду алгоритма видно, что его ответ достигает этой нижней оценки.<br />
}}<br />
<br />
=== Общий алгоритм ===<br />
<br />
Выполним Modify, после чего разобъем все множество работ на блоки и для каждого блока запустим Decompose():<br />
<br />
MakeSchedule()<br />
Modify()<br />
B <tex> \leftarrow </tex> Blocks(<tex> \{1 \ldots n \} </tex>)<br />
ans <tex> \leftarrow </tex> <tex> -\infty </tex><br />
'''for''' (<tex> B_j \in B</tex>):<br />
ans = max(ans, Decompose(<tex> B_j </tex>))<br />
'''return''' ans<br />
<br />
Из доказанной ранее леммы следует, что <tex> f_{max}(\{ 1 \ldots n \}) = \max\limits_{j} f_{max}(B_j) </tex>, поэтому расписание для всего множества работ, поделенного на блоки, также будет оптимальным и корректным.<br />
<br />
== Время работы ==<br />
{{Теорема<br />
|statement=<br />
Время работы алгоритма MakeSchedule — <tex> O(n^2) </tex> операций.<br />
|proof=<br />
Обозначим за <tex> P(n) </tex> время, необходимое для выполнения алгоритма MakeSchedule на n работах. Очевидно, для корректно определенной функции P в силу структуры алгоритма должно выполняться неравенство:<br />
<br />
<tex> P(n) \ge сn + \sum\limits_{i = 1}^{k} P(n_i) </tex><br />
<br />
Здесь <tex> n_i </tex> - размер блока с номером <tex> i </tex>, построенного алгоритмом Blocks(). Заметим, что <tex> \sum\limits_{i = 1}^{k} n_i = n - 1</tex>.<br />
<br />
Если <tex> P(n) = an^2 </tex>, то имеем:<br />
<br />
<tex> an^2 \ge cn + a \sum\limits_{i = 1}^{k} n_i^2 </tex><br />
<br />
Так как <tex> n^2 > (n - 1)^2 = (\sum\limits_{i = 1}^{k} n_i)^2 = \sum\limits_{i = 1}^{k} n_i^2 + 2\sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j </tex>, то можно переписать неравенство в следующем виде:<br />
<br />
<tex> 2a \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j \ge cn </tex><br />
<br />
Чтобы получить максимальную нижнюю оценку на <tex> a </tex>, оценим снизу <tex> \sum\limits_{i, j = 1}^{k} n_i n_j </tex>:<br />
<br />
<tex> \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} n_i n_j \ge \sum\limits_{\substack{i, j = 1\\ i \ne j}}^{k} 1 \cdot n_j = \sum\limits_{j = 1}^{k} (k - 1) n_j = (k - 1) (n - 1) \ge \frac{nk}{4}</tex><br />
<br />
Значит, при <tex> a \ge \frac{c}{2} \frac{n}{\frac{nk}{4}} = \frac{2c}{k} </tex> требуемое неравенство будет выполняться.<br />
<br />
}}<br />
<br />
==Источники==<br />
* Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 379 стр. {{---}} ISBN 978-3-540-69515-8<br />
<br />
[[Категория: Дискретная математика и алгоритмы]]<br />
[[Категория: Теория расписаний]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0,_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B_%D0%B8_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&diff=44258Дискретная математика, алгоритмы и структуры данных2015-01-12T10:02:28Z<p>Shiplayer: /* Задача о паросочетании */</p>
<hr />
<div>[[Категория:Дискретная математика и алгоритмы]]<br />
[[Категория: Алгоритмы и структуры данных]]<br />
<br />
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].<br />
<br />
Символом <tex> \star </tex> помечены дополнительные темы (возможно, сложные), которые не были подробно рассмотрены (или вообще рассмотрены) в рамках курса.<br />
<br />
= Первый семестр =<br />
<br />
== Отношения ==<br />
*[[Определение отношения]]<br />
*[[Композиция отношений|Композиция отношений, степень отношения, обратное отношение]]<br />
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]<br />
*[[Симметричное отношение]]<br />
*[[Антисимметричное отношение]]<br />
*[[Транзитивное отношение]]<br />
*[[Отношение порядка]]<br />
*[[Отношение эквивалентности]]<br />
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]<br />
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]<br />
*[[Транзитивный остов]]<br />
<br />
== Булевы функции ==<br />
*[[Определение булевой функции]]<br />
*[[Суперпозиции]]<br />
*[[ДНФ]]<br />
*[[Сокращенная и минимальная ДНФ | Сокращенная и минимальная ДНФ, минимизация ДНФ методами гиперкубов, карт Карно, Квайна]]<br />
*[[КНФ]]<br />
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]<br />
*[[Полином Жегалкина | Полином Жегалкина, преобразование Мёбиуса]]<br />
*[[Полные системы функций. Теорема Поста о полной системе функций]]<br />
*[[Представление функции класса DM с помощью медианы]]<br />
*[[Пороговая функция]]<br />
*[[Троичная логика]]<tex>^\star</tex><br />
<br />
== Схемы из функциональных элементов ==<br />
*[[Реализация булевой функции схемой из функциональных элементов]]<br />
*[[Простейшие методы синтеза схем из функциональных элементов]]<br />
*[[Метод Лупанова синтеза схем]]<br />
*[[Cумматор]]<br />
*[[Каскадный сумматор]]<br />
*[[Двоичный каскадный сумматор]]<br />
*[[Троичный сумматор]]<tex>^\star</tex><br />
*[[Реализация вычитания сумматором]]<br />
*[[Матричный умножитель]]<br />
*[[Дерево Уоллеса]]<br />
*[[Контактная схема]]<br />
*[[Квантовые гейты]]<tex>^\star</tex><br />
<br />
== Представление информации ==<br />
*[[Кодирование информации]]<br />
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]<br />
*[[Представление вещественных чисел]]<br />
*[[Представление символов, таблицы кодировок]]<tex>^\star</tex><br />
<br />
== Алгоритмы сжатия ==<br />
* [[Алгоритм Хаффмана]]<br />
* [[Оптимальное хранение словаря в алгоритме Хаффмана]]<br />
* [[Алгоритм Хаффмана за O(n)]]<br />
* [[Алгоритм Ху-Таккера]]<tex>^\star</tex><br />
* [[Неравенство Крафта]]<br />
* [[Неравенство Макмиллана]]<br />
* [[Код Шеннона]]<br />
* [[Оптимальный префиксный код с длиной кодового слова не более L бит]]<tex>^\star</tex><br />
* [[Алгоритмы LZ77 и LZ78]]<br />
* [[Алгоритм LZW]]<br />
* [[Алгоритм LZSS]]<tex>^\star</tex><br />
* [[Преобразование Барроуза-Уиллера | Преобразование Барроуза-Уиллера и обратное ему]]<br />
* [[Преобразование MTF]]<br />
* [[Расстояние Хэмминга]]<br />
* [[Избыточное кодирование, код Хэмминга]]<br />
* [[Гамма-, дельта- и омега-код Элиаса]]<tex>^\star</tex><br />
<br />
== Комбинаторика ==<br />
=== Комбинаторные объекты ===<br />
* [[Комбинаторные объекты]]<br />
* [[Лексикографический порядок]]<br />
* [[Коды Грея]]<br />
* [[Коды Грея для перестановок]]<br />
* [[Коды антигрея]]<br />
* [[Цепные коды]]<br />
* [[Правильные скобочные последовательности]]<br />
<br />
=== Генерация комбинаторных объектов ===<br />
* [[Генерация комбинаторных объектов в лексикографическом порядке]]<br />
* [[Получение номера по объекту]]<br />
* [[Получение объекта по номеру]]<br />
* [[Получение следующего объекта]]<br />
* [[Получение предыдущего объекта]]<tex>^\star</tex> <br />
* [[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]<br />
* [[Методы генерации случайного сочетания]]<tex>^\star</tex><br />
<br />
=== Подсчёт числа объектов ===<br />
* [[Формула включения-исключения | Формула включения-исключения, подсчет числа беспорядков]]<br />
* [[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]<br />
* [[Производящая функция]]<br />
* [[Лемма Бёрнсайда и Теорема Пойа]]<br />
* [[Задача об ожерельях]]<br />
* [[Числа Стирлинга первого рода]]<br />
* [[Числа Стирлинга второго рода]]<br />
* [[Числа Эйлера I и II рода | Числа Эйлера первого и второго рода. Подъемы в перестановках]]<tex>^\star</tex><br />
* [[Числа Каталана]]<br />
<br />
=== Свойства комбинаторных объектов ===<br />
* [[Умножение перестановок, обратная перестановка, группа перестановок]]<br />
* [[Действие перестановки на набор из элементов, представление в виде циклов]]<br />
* [[Таблица инверсий]]<br />
* [[Теорема Кэли]]<br />
* [[Матричное представление перестановок]]<br />
* [[Задача о минимуме/максимуме скалярного произведения]]<br />
* [[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]<br />
<br />
== [[Динамическое программирование]] ==<br />
=== Классические задачи динамического программирования ===<br />
*[[Кратчайший путь в ациклическом графе]]<br />
*[[Задача о числе путей в ациклическом графе]]<br />
*[[Задача о расстановке знаков в выражении]]<br />
*[[Задача о порядке перемножения матриц]]<br />
*[[Задача о наибольшей общей подпоследовательности]]<br />
*[[Задача о наибольшей возрастающей подпоследовательности]]<br />
*[[Задача коммивояжера, ДП по подмножествам]]<br />
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]<br />
*[[Задача о рюкзаке]]<br />
<br />
=== Способы оптимизации методов динамического программирования ===<br />
*[[Метод четырех русских для умножения матриц]]<tex>^\star</tex><br />
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]<tex>^\star</tex><br />
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]<br />
*[[Meet-in-the-middle]]<tex>^\star</tex><br />
<br />
=== Другие задачи ===<br />
*[[Задача о расстоянии Дамерау-Левенштейна]]<tex>^\star</tex><br />
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]<br />
*[[Задача о наибольшей подпоследовательности-палиндроме]]<br />
*[[Наибольшая общая возрастающая подпоследовательность]]<tex>^\star</tex><br />
*[[Задача о наибольшей общей палиндромной подпоследовательности]]<tex>^\star</tex><br />
*[[Динамическое программирование по профилю]]<tex>^\star</tex><br />
*[[Динамика по поддеревьям]]<br />
<br />
== Теория вероятностей ==<br />
*[[Вероятностное пространство, элементарный исход, событие]]<br />
*[[Независимые события]]<br />
*[[Условная вероятность]]<br />
*[[Формула полной вероятности]]<br />
*[[Формула Байеса]]<br />
*[[Дискретная случайная величина]]<br />
*[[Независимые случайные величины]]<br />
*[[Математическое ожидание случайной величины]]<br />
*[[Дисперсия случайной величины]]<br />
*[[Ковариация случайных величин]]<br />
*[[Корреляция случайных величин]]<br />
*[[Энтропия случайного источника]]<br />
*[[Симуляция одним распределением другого]]<br />
*[[Арифметическое кодирование]]<br />
*[[Парадоксы теории вероятностей]]<tex>^\star</tex><br />
*[[Схема Бернулли]]<tex>^\star</tex><br />
<br />
== Марковские цепи ==<br />
<br />
* [[Марковская цепь]]<br />
* [[Теорема о поглощении]]<br />
* [[Фундаментальная матрица]]<br />
* [[Математическое ожидание времени поглощения]]<br />
* [[Расчет вероятности поглощения в состоянии]]<br />
* [[Эргодическая марковская цепь]]<br />
* [[Регулярная марковская цепь]]<br />
* [[Примеры использования Марковских цепей]]<br />
* [[Скрытые Марковские модели]]<tex>^\star</tex><br />
* [[Алгоритм Витерби]]<tex>^\star</tex><br />
* [[Алгоритм "Вперед-Назад"]]<tex>^\star</tex><br />
* [[Алгоритм Баума-Велша]]<tex>^\star</tex><br />
<br />
= Второй семестр =<br />
<br />
== Амортизационный анализ ==<br />
* [[Амортизационный анализ]]<br />
* [[Динамический массив]]<br />
* [[Hashed Array Tree]]<tex>^\star</tex><br />
* [[Список]]<br />
* [[Стек]]<br />
* [[Очередь]]<br />
* [[Персистентный стек]]<br />
* [[Персистентная очередь]]<br />
* [[Персистентный дек]]<br />
* [[Мажорирующий элемент]]<br />
* [[Счетчик Кнута]]<br />
<br />
== Приоритетные очереди ==<br />
<br />
* [[Двоичная куча]]<br />
* [[Биномиальная куча]]<br />
* [[Фибоначчиева куча]]<br />
* [[Левосторонняя куча]]<br />
* [[Тонкая куча]]<br />
* [[Толстая куча на избыточном счетчике]]<br />
* [[Куча Бродала-Окасаки]]<tex>^\star</tex><br />
<br />
== Система непересекающихся множеств ==<br />
* [[СНМ (наивные реализации) | Наивные реализации]]<br />
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]<br />
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]<br />
* [[СНМ с операцией удаления за О(1)]]<tex>^\star</tex><br />
<br />
== Поисковые структуры данных ==<br />
* [[Упорядоченное множество]]<br />
* [[Дерево поиска, наивная реализация]]<br />
* [[АВЛ-дерево]]<br />
* [[2-3 дерево]]<br />
* [[B-дерево]]<br />
* [[Красно-черное дерево]]<br />
* [[Декартово дерево]]<br />
* [[Декартово дерево по неявному ключу]]<br />
* [[Splay-дерево]]<br />
* [[Tango-дерево]]<tex>^\star</tex><br />
* [[Рандомизированное бинарное дерево поиска]]<br />
* [[Дерево ван Эмде Боаса]]<br />
* [[Список с пропусками]]<br />
* [[Fusion tree]]<tex>^\star</tex><br />
* [[Сверхбыстрый цифровой бор]]<tex>^\star</tex><br />
* [[Rope]]<tex>^\star</tex><br />
<br />
== Дерево отрезков ==<br />
<br />
* [[Статистики на отрезках. Корневая эвристика]]<br />
* [[Дерево отрезков. Построение]]<br />
* [[Реализация запроса в дереве отрезков сверху]]<br />
* [[Реализация запроса в дереве отрезков снизу]]<br />
* [[Несогласованные поддеревья. Реализация массового обновления]]<br />
* [[Многомерное дерево отрезков]]<br />
* [[Сжатое многомерное дерево отрезков]]<br />
<br />
== Дерево Фенвика ==<br />
* [[Дерево Фенвика]]<br />
* [[Встречное дерево Фенвика]]<br />
* [[Дерево Фенвика для некоммутативных операций]]<br />
* [[Многомерное дерево Фенвика]]<br />
<br />
== Хеширование ==<br />
* [[Хеш-таблица]]<br />
* [[Разрешение коллизий]]<br />
* [[Хеширование кукушки]]<br />
* [[Идеальное хеширование]]<br />
* [[Перехеширование. Амортизационный анализ]]<br />
* [[Фильтр Блума]]<br />
* [[Универсальное семейство хеш-функций]]<br />
<br />
== [[Сортировка]] ==<br />
=== Квадратичные сортировки ===<br />
* [[Сортировка выбором]]<br />
* [[Сортировка пузырьком]]<br />
* [[Сортировка вставками]]<br />
=== Сортировки на сравнениях ===<br />
* [[Сортировка Шелла]]<tex>^\star</tex><br />
* [[Сортировка кучей]]<br />
* [[Быстрая сортировка]]<br />
* [[Сортировка слиянием]]<br />
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]<br />
* [[Терпеливая сортировка]]<tex>^\star</tex><br />
* [[Timsort]]<tex>^\star</tex><br />
* [[Теорема о нижней оценке для сортировки сравнениями]]<br />
=== Многопоточные сортировки ===<br />
* [[Многопоточная сортировка слиянием]]<tex>^\star</tex><br />
* [[PSRS-сортировка]]<tex>^\star</tex><br />
=== Другие сортировки ===<br />
* [[Поиск k-ой порядковой статистики]]<br />
* [[Поиск k-ой порядковой статистики за линейное время]]<br />
* [[Сортировка подсчетом]]<br />
* [[Сортировка подсчетом сложных объектов]]<br />
* [[Цифровая сортировка]]<br />
* [[Карманная сортировка]]<br />
* [[Сортировка Хана]]<tex>^\star</tex><br />
<br />
== Сортирующие сети ==<br />
* [[Сортирующие сети]]<br />
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]<br />
* [[Сортировочные сети с особыми свойствами]]<tex>^\star</tex><br />
* [[Сортирующие сети для квадратичных сортировок]]<br />
* [[Сеть Бетчера]]<br />
<br />
== Алгоритмы поиска ==<br />
* [[Целочисленный двоичный поиск]]<br />
* [[Вещественный двоичный поиск]]<br />
* [[Троичный поиск]]<br />
* [[Поиск с помощью золотого сечения]]<br />
* [[Интерполяционный поиск]]<br />
<br />
== Связь между структурами данных ==<br />
* [[Связь между структурами данных]]<br />
<br />
= Третий семестр =<br />
<br />
== Основные определения теории графов ==<br />
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]<br />
* [[Лемма о рукопожатиях]]<br />
* [[Теорема о существовании простого пути в случае существования пути]]<br />
* [[Теорема о существовании простого цикла в случае существования цикла]]<br />
* [[Матрица смежности графа]]<br />
* [[Связь степени матрицы смежности и количества путей]]<br />
* [[Матрица инцидентности графа]]<br />
* [[Циклическое пространство графа]]<tex>^\star</tex><br />
* [[Фундаментальные циклы графа]]<tex>^\star</tex><br />
* [[Дерево, эквивалентные определения]]<br />
* [[Алгоритмы на деревьях]]<tex>^\star</tex><br />
* [[Дополнительный, самодополнительный граф]]<br />
<br />
== Связность в графах ==<br />
* [[Отношение связности, компоненты связности]]<br />
* [[Отношение реберной двусвязности]]<br />
* [[Отношение вершинной двусвязности]]<br />
* [[Граф компонент реберной двусвязности]]<br />
* [[Граф блоков-точек сочленения]]<br />
* [[Точка сочленения, эквивалентные определения]]<br />
* [[Мост, эквивалентные определения]]<br />
* [[k-связность]]<br />
* [[Теорема Менгера]]<br />
* [[Теорема Менгера, альтернативное доказательство]]<br />
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]<br />
<br />
== Остовные деревья ==<br />
=== Построение остовных деревьев ===<br />
* [[Остовные деревья: определения, лемма о безопасном ребре]]<br />
* [[Алгоритм Прима]]<br />
* [[Алгоритм Краскала]]<br />
* [[Алгоритм Борувки]]<br />
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]<br />
* [[Алгоритм двух китайцев]]<br />
<br />
=== Свойства остовных деревьев ===<br />
* [[Матрица Кирхгофа]]<br />
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]<br />
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]<br />
* [[Количество помеченных деревьев]]<br />
* [[Коды Прюфера]]<br />
<br />
== Обходы графов ==<br />
=== Эйлеровы графы ===<br />
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]<br />
* [[Покрытие ребер графа путями]]<br />
* [[Алгоритм построения Эйлерова цикла]]<br />
* [[Произвольно вычерчиваемые из заданной вершины графы]]<br />
=== Гамильтоновы графы ===<br />
* [[Гамильтоновы графы]]<br />
* [[Теорема Хватала]]<br />
* [[Теорема Поша]]<tex>^\star</tex><br />
* [[Теорема Дирака]]<br />
* [[Теорема Оре]]<br />
* [[Алгоритм нахождения Гамильтонова цикла в условиях теорем Дирака и Оре]]<br />
* [[Теорема Гринберга]]<tex>^\star</tex><br />
* [[Турниры]]<br />
* [[Теорема Редеи-Камиона]]<br />
<br />
== Укладки графов ==<br />
* [[Укладка графа на плоскости]]<br />
* [[Формула Эйлера]]<br />
* [[Непланарность K5 и K3,3|Непланарность <tex>K_5</tex> и <tex>K_{3,3}</tex>]]<br />
* [[Укладка дерева]]<br />
* [[Укладка графа с планарными компонентами реберной двусвязности]]<br />
* [[Укладка графа с планарными компонентами вершинной двусвязности]]<br />
* [[Теорема Понтрягина-Куратовского]]<br />
* [[Двойственный граф планарного графа]]<br />
* [[Теорема Фари]]<tex>^\star</tex><br />
<br />
== Раскраски графов ==<br />
* [[Раскраска графа]]<br />
* [[Двудольные графы и раскраска в 2 цвета]]<br />
* [[Хроматический многочлен]]<br />
* [[Формула Зыкова]]<br />
* [[Формула Уитни]]<br />
* [[Теорема Брукса]]<br />
* [[Верхние и нижние оценки хроматического числа]]<tex>^\star</tex><br />
* [[Хроматическое число планарного графа]]<br />
* [[Многочлен Татта]]<tex>^\star</tex><br />
* [[Теория Рамсея]]<tex>^\star</tex><br />
<br />
== Обход в глубину ==<br />
* [[Обход в глубину, цвета вершин]]<br />
* [[Лемма о белых путях]]<br />
* [[Использование обхода в глубину для проверки связности]]<br />
* [[Использование обхода в глубину для поиска цикла]]<br />
* [[Использование обхода в глубину для топологической сортировки]]<br />
* [[Использование обхода в глубину для поиска компонент сильной связности]]<br />
* [[Использование обхода в глубину для поиска точек сочленения]]<br />
* [[Построение компонент вершинной двусвязности]]<br />
* [[Использование обхода в глубину для поиска мостов]]<br />
* [[Построение компонент реберной двусвязности]]<br />
<br />
== Кратчайшие пути в графах ==<br />
* [[Обход в ширину]]<br />
* [[Алгоритм Форда-Беллмана]]<br />
* [[Алгоритм Дейкстры]]<br />
* [[Алгоритм Левита]]<tex>^\star</tex><br />
* [[Алгоритм Флойда]]<br />
* [[Алгоритм A*]] <tex>^\star</tex><br />
* [[Алгоритм Джонсона]]<br />
* [[Эвристики для поиска кратчайших путей]]<tex>^\star</tex><br />
* [[Алгоритм D*]] <tex>^\star</tex><br />
<br />
== Задача о паросочетании ==<br />
* [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях]]<br />
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]<br />
* [[Алгоритм Куна для поиска максимального паросочетания]]<br />
* [[Теорема Холла]]<br />
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]<br />
* [[Связь вершинного покрытия и независимого множества]]<br />
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]<br />
* [[Теорема Татта о существовании полного паросочетания]]<br />
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]<br />
* [[Декомпозиция Эдмондса-Галлаи]]<br />
* [[Задача об устойчивом паросочетании]]<tex>^\star</tex><br />
<br />
== Задача о максимальном потоке ==<br />
* [[Определение сети, потока]]<br />
* [[Разрез, лемма о потоке через разрез]]<br />
* [[Дополняющая сеть, дополняющий путь]]<br />
* [[Лемма о сложении потоков]]<br />
* [[Теорема Форда-Фалкерсона]]<br />
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]<br />
* [[Алоритм Эдмондса-Карпа]]<br />
* [[Алгоритм масштабирования потока]]<br />
* [[Блокирующий поток]]<br />
* [[Схема алгоритма Диница]]<br />
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]<br />
* [[Алгоритм поиска блокирующего потока в ациклической сети]]<br />
* [[Метод проталкивания предпотока]]<br />
* [[Алгоритм "поднять-в-начало"]]<br />
* [[Теорема о декомпозиции]]<br />
* [[Теорема о декомпозиционном барьере]]<br />
* [[Циркуляция потока]]<br />
* [[Алгоритм Каргера для нахождения минимального разреза]]<tex>^\star</tex><br />
<br />
== Задача о потоке минимальной стоимости ==<br />
* [[Поток минимальной стоимости]]<br />
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]<br />
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]<br />
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]<br />
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]<br />
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]<br />
* [[Венгерский алгоритм решения задачи о назначениях]]<br />
<br />
= Четвертый семестр =<br />
<br />
== Основные определения. Простые комбинаторные свойства слов ==<br />
* [[Основные определения, связанные со строками]]<br />
* [[Период и бордер, их связь]]<br />
* [[Слово Фибоначчи]]<br />
* [[Слово Туэ-Морса]]<br />
* [[Декомпозиция Линдона]]<tex>^\star</tex><br />
* [[Алгоритм Ландау-Шмидта]]<tex>^\star</tex><br />
* [[Алгоритм Крочемора]]<tex>^\star</tex><br />
<br />
== [[Поиск подстроки в строке]] ==<br />
* [[Наивный алгоритм поиска подстроки в строке]]<br />
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]<br />
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]<br />
* [[Префикс-функция]]<br />
* [[Алгоритм Кнута-Морриса-Пратта]]<br />
* [[Алгоритм Бойера-Мура]]<tex>^\star</tex><br />
* [[Алгоритм Колусси]]<tex>^\star</tex><br />
* [[Z-функция]]<br />
* [[Автомат для поиска образца в тексте]]<br />
* [[Бор]]<br />
* [[Алгоритм Ахо-Корасик]]<br />
* [[Алгоритм Ландау-Вишкина (k несовпадений)]]<tex>^\star</tex><br />
<br />
== Суффиксное дерево ==<br />
* [[Суффиксный бор]]<br />
* [[Сжатое суффиксное дерево]]<br />
* [[Алгоритм Укконена]]<br />
* [[Алгоритм МакКрейта]]<tex>^\star</tex><br />
* [[Алгоритм Фарача]]<tex>^\star</tex><br />
<br />
== Суффиксный массив ==<br />
* [[Суффиксный массив]]<br />
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]<br />
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]<br />
* [[Алгоритм Касаи и др.]]<br />
* [[Алгоритм Карккайнена-Сандерса]]<br />
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]<br />
<br />
== Задача о наименьшем общем предке ==<br />
* [[Метод двоичного подъема]]<br />
* [[Сведение задачи LCA к задаче RMQ]]<br />
* [[Решение RMQ с помощью разреженной таблицы]]<br />
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)<br />
* [[Алгоритм Шибера-Вишкина]]<tex>^\star</tex><br />
* [[Сведение задачи RMQ к задаче LCA]]<br />
* [[Алгоритм Тарьяна поиска LCA за O(1) в оффлайн]]<tex>^\star</tex><br />
* [[Link-Cut Tree]]<tex>^\star</tex><br />
<br />
== Матроиды ==<br />
=== Основные факты теории матроидов ===<br />
* [[Определение матроида]]<br />
* [[Примеры матроидов]]<br />
* [[Прямая сумма матроидов]]<br />
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]<br />
* [[Теорема о базах]]<br />
* [[Аксиоматизация матроида базами]]<br />
* [[Теорема о циклах]]<br />
* [[Аксиоматизация матроида циклами]]<br />
* [[Ранговая функция, полумодулярность]]<br />
* [[Двойственный матроид]]<br />
* [[Оператор замыкания для матроидов]]<br />
* [[Покрытия, закрытые множества]]<br />
* [[Матроид Вамоса]]<tex>^\star</tex><br />
=== Пересечение матроидов ===<br />
* [[Пересечение матроидов, определение, примеры]]<br />
* [[Лемма о паросочетании в графе замен]]<br />
* [[Лемма о единственном паросочетании в графе замен]]<br />
* [[Граф замен для двух матроидов]]<br />
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]<br />
* [[Алгоритм построения базы в пересечении матроидов]]<br />
* [[Теорема Эдмондса-Лоулера]]<br />
=== Объединение матроидов ===<br />
* [[Объединение матроидов, проверка множества на независимость]]<br />
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]<br />
* [[Алгоритм построения базы в объединении матроидов]]<br />
<br />
== Теория расписаний ==<br />
* [[Классификация задач]]<br />
* [[Методы решения задач теории расписаний]]<br />
* [[Правило Лаулера]]<br />
* [[Flow shop]]<br />
* [[P1sumu|<tex>1 \mid \mid \sum U_{i}</tex>]]<br />
* [[1ripi1sumwc|<tex>1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}</tex>]]<br />
* [[1ridipi1|<tex>1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -</tex>]]<br />
* [[1outtreesumwc | <tex>1 \mid outtree \mid \sum w_i C_i</tex>]]<br />
* [[1pi1sumwu|<tex>1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}</tex>]]<br />
* [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]]<br />
* [[1precripi1Lmax|<tex>1 \mid prec; r_i; p_i = 1 \mid L_{max}</tex>]]<br />
* [[P2precpi1Lmax|<tex>P2 \mid prec, p_i = 1 \mid L_{\max}</tex>]]<br />
* [[PpmtnriLmax|<tex>P \mid pmtn, r_i \mid L_{max}</tex>]]<br />
* [[QpmtnCmax|<tex>Q \mid pmtn \mid C_{max}</tex>]]<br />
* [[QpmtnriLmax|<tex>Q \mid pmtn, r_{i} \mid L_{max}</tex>]]<br />
* [[QSumCi|<tex>Q\mid\mid\sum{C_i}</tex>]]<br />
* [[R2Cmax|<tex>R2 \mid \mid C_{max}</tex>]]<br />
* [[F2Cmax|<tex>F2 \mid \mid C_{max}</tex>]]<br />
* [[Fpij1sumwu|<tex>F \mid p_{ij} = 1 \mid \sum w_i U_i</tex>]]<br />
* [[O2Cmax|<tex>O2 \mid \mid C_{max}</tex>]]<br />
* [[Opi1sumu|<tex>O \mid p_{ij} = 1 \mid \sum U_i</tex>]]<br />
* [[J2ni2Cmax|<tex>J2 \mid n_{i} \le 2 \mid C_{max}</tex>]]<br />
* [[J2pij1Lmax| <tex>J2\mid p_{ij} = 1\mid L_{max}</tex>]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44257Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-12T09:59:18Z<p>Shiplayer: /* Источники */</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''matсhing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''' (англ. ''matched''), а неинцидентные — '''свободными''' (англ. ''unmatched'').}} <br />
{{Определение<br />
|definition= '''Числом реберного покрытия''' (англ. ''edge covering number'') называется размер минимального реберного покрытии графа <tex>G</tex> и обозначается через <tex>\rho(G)</tex>.}}<br />
{{Определение<br />
|definition= Число ребер в наибольшем паросочетании графа <tex>G</tex> называется '''числом паросочетания''' (англ. ''matching number'').}}<br />
{{Определение<br />
|definition= '''Максимальное паросочетание''' (англ. ''maximal matching'') — это такое паросочетание <tex>M</tex> в графе <tex>G</tex>, которое не содержится ни в каком другом паросочетании этого графа, то есть к нему невозможно добавить ни одно ребро, которое бы являлось несмежным ко всем ребрам паросочетания.}}<br />
Другими словами, паросочетание <tex>M</tex> графа <tex>G</tex> является максимальным, если любое ребро в <tex>G</tex> имеет непустое пересечение по крайней мере с одним ребром из <tex>M</tex>.<br />
<br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''совершенным (или полным)''' (англ.''perfect matching''), если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' (англ. ''alternating path'') — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' (англ. ''augmenting path'') — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' (англ. ''reduce path'') — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' (англ. ''balanced path'') — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Свойства ==<br />
<br />
В любом графе без изолированных вершин, число паросочетания и число рёберного покрытия в сумме дают число вершин. Если существует совершенное паросочетание, то оба числа равны <tex>|V|/2</tex>.<br />
<br />
== Пример максимального паросочетания ==<br />
<br />
[[Файл: Maximal matching.jpg|thumb|210px|center|<font color=red>красные ребра</font> являются ребрами максимального паросочетания]]<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> {{---}} не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> {{---}} другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности {{---}} путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
== Источники информации ==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 Wikipedia {{---}} Matching]<br />
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B5 Википедия {{---}} Паросочетание]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. стр. 227-232 '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44255Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-12T09:54:04Z<p>Shiplayer: </p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''matсhing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''' (англ. ''matched''), а неинцидентные — '''свободными''' (англ. ''unmatched'').}} <br />
{{Определение<br />
|definition= '''Числом реберного покрытия''' (англ. ''edge covering number'') называется размер минимального реберного покрытии графа <tex>G</tex> и обозначается через <tex>\rho(G)</tex>.}}<br />
{{Определение<br />
|definition= Число ребер в наибольшем паросочетании графа <tex>G</tex> называется '''числом паросочетания''' (англ. ''matching number'').}}<br />
{{Определение<br />
|definition= '''Максимальное паросочетание''' (англ. ''maximal matching'') — это такое паросочетание <tex>M</tex> в графе <tex>G</tex>, которое не содержится ни в каком другом паросочетании этого графа, то есть к нему невозможно добавить ни одно ребро, которое бы являлось несмежным ко всем ребрам паросочетания.}}<br />
Другими словами, паросочетание <tex>M</tex> графа <tex>G</tex> является максимальным, если любое ребро в <tex>G</tex> имеет непустое пересечение по крайней мере с одним ребром из <tex>M</tex>.<br />
<br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''совершенным (или полным)''' (англ.''perfect matching''), если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' (англ. ''alternating path'') — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' (англ. ''augmenting path'') — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' (англ. ''reduce path'') — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' (англ. ''balanced path'') — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Свойства ==<br />
<br />
В любом графе без изолированных вершин, число паросочетания и число рёберного покрытия в сумме дают число вершин. Если существует совершенное паросочетание, то оба числа равны <tex>|V|/2</tex>.<br />
<br />
== Пример максимального паросочетания ==<br />
<br />
[[Файл: Maximal matching.jpg|thumb|210px|center|<font color=red>красные ребра</font> являются ребрами максимального паросочетания]]<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> {{---}} не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> {{---}} другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности {{---}} путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Источники==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 Wikipedia {{---}} Matching]<br />
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B5 Википедия {{---}} Паросочетание]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. стр. 227-232 '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Maximal_matching.jpg&diff=44254Файл:Maximal matching.jpg2015-01-12T09:34:58Z<p>Shiplayer: </p>
<hr />
<div></div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44230Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T23:32:58Z<p>Shiplayer: переименовал Теорема о максимальном паросочетании и дополняющих цепях в [[Паросочетания: основные определения, теорема о максимальном...</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''matсhing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''' (англ. ''matched''), а неинцидентные — '''свободными''' (англ. ''unmatched'').}} <br />
{{Определение<br />
|definition= Число вершин в наименьшем покрытии графа <tex>G</tex> называется '''числом покрытия (или числом вершинного покрытия)''' (англ. ''edge covering number'') графа <tex>G</tex> и обозначается через <tex>\rho(G)</tex>.}}<br />
{{Определение<br />
|definition= Число ребер в наибольшем паросочетании графа <tex>G</tex> называется '''числом паросочетания''' (англ. ''matching number'').}}<br />
{{Определение<br />
|definition= '''Максимальное паросочетание''' (англ. ''maximal matching'') — это такое паросочетание <tex>M</tex> в графе <tex>G</tex>, которое не содержится ни в каком другом паросочетании этого графа, то есть к нему невозможно добавить ни одно ребро, которое бы являлось несмежным ко всем ребрам паросочетания.}}<br />
Другими словами, паросочетание <tex>M</tex> графа <tex>G</tex> является максимальным, если любое ребро в <tex>G</tex> имеет непустое пересечение по крайней мере с одним ребром из <tex>M</tex>.<br />
<br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''совершенным (или полным)''' (англ.''perfect matching''), если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' (англ. ''alternating path'') — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' (англ. ''augmenting path'') — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' (англ. ''reduce path'') — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' (англ. ''balanced path'') — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Свойства ==<br />
<br />
В любом графе без изолированных вершин, число паросочетания и число рёберного покрытия в сумме дают число вершин. Если существует совершенное паросочетание, то оба числа равны <tex>|V|/2</tex>.<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> {{---}} не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> {{---}} другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности {{---}} путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Источники==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 Wikipedia {{---}} Matching]<br />
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B5 Википедия {{---}} Паросочетание]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. стр. 227-232 '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44231Теорема о максимальном паросочетании и дополняющих цепях2015-01-11T23:32:58Z<p>Shiplayer: переименовал Теорема о максимальном паросочетании и дополняющих цепях в [[Паросочетания: основные определения, теорема о максимальном...</p>
<hr />
<div>#перенаправление [[Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44232Обсуждение:Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T23:32:58Z<p>Shiplayer: переименовал Обсуждение:Теорема о максимальном паросочетании и дополняющих цепях в [[Обсуждение:Паросочетания: основные определения, ...</p>
<hr />
<div>== Вопрос ==<br />
Почему отменили правку, убирающую 3 лишних определения перед доказательством? ИМХО, надо её вернуть. [[Участник:Nikita.Ofitserov|Nikita.Ofitserov]] 15:19, 25 января 2011 (UTC)</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44233Обсуждение:Теорема о максимальном паросочетании и дополняющих цепях2015-01-11T23:32:58Z<p>Shiplayer: переименовал Обсуждение:Теорема о максимальном паросочетании и дополняющих цепях в [[Обсуждение:Паросочетания: основные определения, ...</p>
<hr />
<div>#перенаправление [[Обсуждение:Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44218Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T21:54:35Z<p>Shiplayer: /* Паросочетание в двудольном графе */</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''matсhing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''' (англ. ''matched''), а неинцидентные — '''свободными''' (англ. ''unmatched'').}} <br />
{{Определение<br />
|definition= Число вершин в наименьшем покрытии графа <tex>G</tex> называется '''числом покрытия (или числом вершинного покрытия)''' (англ. ''edge covering number'') графа <tex>G</tex> и обозначается через <tex>\rho(G)</tex>.}}<br />
{{Определение<br />
|definition= Число ребер в наибольшем паросочетании графа <tex>G</tex> называется '''числом паросочетания''' (англ. ''matching number'').}}<br />
{{Определение<br />
|definition= '''Максимальное паросочетание''' (англ. ''maximal matching'') — это такое паросочетание <tex>M</tex> в графе <tex>G</tex>, которое не содержится ни в каком другом паросочетании этого графа, то есть к нему невозможно добавить ни одно ребро, которое бы являлось несмежным ко всем ребрам паросочетания.}}<br />
Другими словами, паросочетание <tex>M</tex> графа <tex>G</tex> является максимальным, если любое ребро в <tex>G</tex> имеет непустое пересечение по крайней мере с одним ребром из <tex>M</tex>.<br />
<br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''совершенным (или полным)''' (англ.''perfect matching''), если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' (англ. ''alternating path'') — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' (англ. ''augmenting path'') — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' (англ. ''reduce path'') — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' (англ. ''balanced path'') — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Свойства ==<br />
<br />
В любом графе без изолированных вершин, число паросочетания и число рёберного покрытия в сумме дают число вершин. Если существует совершенное паросочетание, то оба числа равны <tex>|V|/2</tex>.<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> {{---}} не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> {{---}} другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности {{---}} путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Источники==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 Wikipedia {{---}} Matching]<br />
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B5 Википедия {{---}} Паросочетание]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. стр. 227-232 '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44216Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T21:53:32Z<p>Shiplayer: /* Паросочетание в двудольном графе */</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''matсhing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''' (англ. ''matched''), а неинцидентные — '''свободными''' (англ. ''unmatched'').}} <br />
{{Определение<br />
|definition= Число вершин в наименьшем покрытии графа <tex>G</tex> называется '''числом покрытия (или числом вершинного покрытия)''' (англ. ''edge covering number'') графа <tex>G</tex> и обозначается через <tex>\rho(G)</tex>.}}<br />
{{Определение<br />
|definition= Число ребер в наибольшем паросочетании графа <tex>G</tex> называется '''числом паросочетания''' (англ. ''matching number'').}}<br />
{{Определение<br />
|definition= '''Максимальное паросочетание''' (англ. ''maximal matching'') — это такое паросочетание <tex>M</tex> в графе <tex>G</tex>, которое не содержится ни в каком другом паросочетании этого графа, то есть к нему невозможно добавить ни одно ребро, которое бы являлось несмежным ко всем ребрам паросочетания.}}<br />
Другими словами, паросочетание <tex>M</tex> графа <tex>G</tex> является максимальным, если любое ребро в <tex>G</tex> имеет непустое пересечение по крайней мере с одним ребром из <tex>M</tex>.<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''совершенным (или полным)''' (англ.''perfect matching''), если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' (англ. ''alternating path'') — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' (англ. ''augmenting path'') — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' (англ. ''reduce path'') — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' (англ. ''balanced path'') — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Свойства ==<br />
<br />
В любом графе без изолированных вершин, число паросочетания и число рёберного покрытия в сумме дают число вершин. Если существует совершенное паросочетание, то оба числа равны <tex>|V|/2</tex>.<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> {{---}} не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> {{---}} другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности {{---}} путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Источники==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 Wikipedia {{---}} Matching]<br />
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B5 Википедия {{---}} Паросочетание]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. стр. 227-232 '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44211Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T21:25:17Z<p>Shiplayer: </p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''matсhing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''' (англ. ''matched''), а неинцидентные — '''свободными''' (англ. ''unmatched'').}} <br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''совершенным (или полным)''' (англ.''perfect matching''), если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' (англ. ''alternating path'') — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' (англ. ''augmenting path'') — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' (англ. ''reduce path'') — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' (англ. ''balanced path'') — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Свойства ==<br />
<br />
В любом графе без изолированных вершин, число паросочетания и число рёберного покрытия в сумме дают число вершин. Если существует совершенное паросочетание, то оба числа равны <tex>|V|/2</tex>.<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> {{---}} не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> {{---}} другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности {{---}} путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Источники==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 Wikipedia {{---}} Matching]<br />
* [https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B5 Википедия {{---}} Паросочетание]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. стр. 227-232 '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44191Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T19:10:40Z<p>Shiplayer: </p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''mathing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''', а неинцидентные — '''свободными'''.}} <br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''полным''', если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Свойства ==<br />
<br />
В любом графе без изолированных вершин, число паросочетания и число рёберного покрытия в сумме дают число вершин. Если существует совершенное паросочетание, то оба числа равны <tex>|V|</tex> / 2.<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> - не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> - другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности - путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Источники==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 wikipedia.org — Matching (graph theory)]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44189Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T18:55:57Z<p>Shiplayer: /* Литература */</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''mathing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''', а неинцидентные — '''свободными'''.}} <br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''полным''', если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> - не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> - другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности - путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Источники==<br />
* [http://en.wikipedia.org/wiki/Matching_%28graph_theory%29 wikipedia.org — Matching (graph theory)]<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=44182Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-11T17:37:55Z<p>Shiplayer: /* Паросочетание в двудольном графе */</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' (англ. ''mathing'') <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''', а неинцидентные — '''свободными'''.}} <br />
{{Определение<br />
|definition= Паросочетание <tex>M</tex> графа <tex>G</tex> называется '''полным''', если оно покрывает все вершины графа.}}<br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' — чередующаяся цепь, у которой один конец свободен, а другой покрыт.}}<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> - не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> - другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности - путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Литература==<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=43799Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-09T19:25:45Z<p>Shiplayer: /* Паросочетание в двудольном графе */</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''', а неинцидентные — '''свободными'''.}} <br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь (или увеличивающая цепь)''' — чередующаяся цепь, у которой оба конца свободны.}}<br />
{{Определение<br />
|definition= '''Уменьшающая цепь''' — чередующаяся цепь, у которой оба конца покрыты.}}<br />
{{Определение<br />
|definition= '''Сбалансированная цепь''' — чередующаяся цепь, у которой один конец свободен, а другой покрыт}}<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> - не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> - другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности - путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Литература==<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayerhttp://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D1%8F:_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,_%D1%82%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BF%D0%B0%D1%80%D0%BE%D1%81%D0%BE%D1%87%D0%B5%D1%82%D0%B0%D0%BD%D0%B8%D0%B8_%D0%B8_%D0%B4%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85_%D1%86%D0%B5%D0%BF%D1%8F%D1%85&diff=43798Паросочетания: основные определения, теорема о максимальном паросочетании и дополняющих цепях2015-01-09T19:15:37Z<p>Shiplayer: /* Теорема о максимальном паросочетании и дополняющих цепях */</p>
<hr />
<div>== Паросочетание в двудольном графе==<br />
<br />
{{Определение<br />
|id=matching_def<br />
|definition= '''Паросочетание''' <tex>M</tex> в двудольном графе — произвольное множество ребер двудольного графа, такое что никакие два ребра не имеют общей вершины.}}<br />
{{Определение<br />
|definition= Вершины двудольного графа, инцидентные ребрам паросочетания <tex>M</tex>, называются '''покрытыми''', а неинцидентные — '''свободными'''.}} <br />
{{Определение<br />
|definition= '''Чередующаяся цепь''' — путь в двудольном графе, для любых двух соседних ребер которого верно, что одно из них принадлежит паросочетанию <tex>M</tex>, а другое нет.}}<br />
{{Определение<br />
|definition= '''Дополняющая цепь''' — чередующаяся цепь, у которой оба конца свободны.}}<br />
<br />
== Теорема о максимальном паросочетании и дополняющих цепях ==<br />
<br />
{{Теорема<br />
|id=theorem1<br />
|statement=<br />
Паросочетание <tex>M</tex> в двудольном графе <tex>G</tex> является максимальным тогда и только тогда, когда в <tex>G</tex> нет дополняющей цепи.<br />
|proof=<br />
<tex>\Rightarrow</tex><br />
<br />
Пусть в двудольном графе <tex>G</tex> с максимальным паросочетанием <tex>M</tex> существует дополняющая цепь. Тогда пройдя по ней и заменив вдоль нее все ребра, входящие в паросочетание, на невходящие и наоборот, мы получим большее паросочетание. То есть <tex>M</tex> не являлось максимальным. Противоречие.<br />
<br />
<tex>\Leftarrow</tex><br />
<br />
Рассмотрим паросочетание <tex>M</tex> в графе <tex>G</tex> и предположим, что <tex>M</tex> - не наибольшее. Докажем, что тогда имеется увеличивающая цепь относительно <tex>M</tex>. Пусть <tex>M'</tex> - другое паросочетание и <tex>|M'|>|M|</tex>. Рассмотрим подграф <tex>H</tex> графа <tex>G</tex>, образованный теми ребрами, которые входят в одно и только в одно из паросочетаний <tex>M</tex>, <tex>M'</tex>. Иначе говоря, множеством ребер графа <tex>H</tex> является симметрическая разность <tex>M\oplus M'</tex>. В графе <tex>H</tex> каждая вершина инцидентна не более чем двум ребрам (одному из <tex>M</tex> и одному из <tex>M'</tex> ), т.е. имеет степень не более двух. В таком графе каждая компонента связности - путь или цикл. В каждом из этих путей и циклов чередуются ребра из <tex>M</tex> и <tex>M'</tex>. Так как <tex>|M'|>|M|</tex>, имеется компонента, в которой ребер из <tex>M'</tex> содержится больше, чем ребер из <tex>M</tex>. Это может быть только путь, у которого оба концевых ребра принадлежат <tex>M'</tex>. Заметим, что относительно <tex>M</tex> этот путь является увеличивающей (дополняющей) цепью.<br />
}}<br />
<br />
==Литература==<br />
* Асанов М. О., Баранский В. А., Расин В. В. — Дискретная математика: Графы, матроиды, алгоритмы. '''ISBN 978-5-8114-1068-2'''<br />
<br />
<br />
[[Категория: Алгоритмы и структуры данных]]<br />
[[Категория: Задача о паросочетании]]</div>Shiplayer