<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Danek+g30</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Danek+g30"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Danek_g30"/>
		<updated>2026-08-03T23:05:45Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35925</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35925"/>
				<updated>2014-01-19T17:29:39Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Аппроксимации самоприменимой грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. В источниках есть ссылка на формальное доказательство.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&amp;lt;br \&amp;gt;&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в нетерминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; {{---}} добавляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный нетерминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода)&lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Аппроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободно-контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN аппроксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим в него два состояния &amp;lt;tex&amp;gt; q_A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT аппроксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров аппроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной аппроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35924</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35924"/>
				<updated>2014-01-19T17:25:24Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. В источниках есть ссылка на формальное доказательство.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&amp;lt;br \&amp;gt;&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в нетерминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; {{---}} добавляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный нетерминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода)&lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Аппроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободно-контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN аппроксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT аппроксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров аппроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной аппроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35923</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35923"/>
				<updated>2014-01-19T17:24:10Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Апроксимации самоприменимой грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. В источниках есть ссылка на формальное доказательство.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&amp;lt;br \&amp;gt;&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в нетерминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; {{---}} добавляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный нетерминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода)&lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Аппроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободно-контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN аппроксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT аппроксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров апроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной апроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35922</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35922"/>
				<updated>2014-01-19T17:20:54Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Идея алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. В источниках есть ссылка на формальное доказательство.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&amp;lt;br \&amp;gt;&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в нетерминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; {{---}} добавляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный нетерминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода)&lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров апроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной апроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35921</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35921"/>
				<updated>2014-01-19T17:16:22Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Идея алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. В источниках есть ссылка на формальное доказательство.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&amp;lt;br \&amp;gt;&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода)&lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров апроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной апроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35920</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35920"/>
				<updated>2014-01-19T17:15:35Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Идея алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. В источниках есть ссылка на формальное доказательство.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&amp;lt;br \&amp;gt;&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода)&lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров апроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной апроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35919</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35919"/>
				<updated>2014-01-19T17:14:37Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Алгоритм преобразования грамматики в конечный автомат */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. В источниках есть ссылка на формальное доказательство.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров апроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной апроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35918</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35918"/>
				<updated>2014-01-19T17:10:26Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Источники */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://books.google.ru/books?id=tFvtwGYNe7kC&amp;amp;pg=PA21&amp;amp;lpg=PA21&amp;amp;dq=prove+that+grammars+that+are+not+self-embedding+generate+regular+languages.&amp;amp;source=bl&amp;amp;ots=3gFnA7ig-l&amp;amp;sig=Ub9f_BJKv_jdiO7mWRvkYJVamDE&amp;amp;hl=ru&amp;amp;sa=X&amp;amp;ei=qQfcUoy9Nubb4QSI4YGQDg&amp;amp;redir_esc=y#v=onepage&amp;amp;q=prove%20that%20grammars%20that%20are%20not%20self-embedding%20generate%20regular%20languages.&amp;amp;f=false Формальное доказательство, что кс не самоприменимая грамматика генерирует регулярный язык]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров апроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной апроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35917</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35917"/>
				<updated>2014-01-19T17:06:41Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* MT апраксимация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;br /&gt;
== Источники ==&lt;br /&gt;
* [http://www.mpi.nl/world/materials/publications/levelt/Levelt_Formal_Grammars_Vol1_1974.pdf Формальное доказательство экивалентости кс не самоприменимых кс языков и регулярных]&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Fwww.cs.ucsb.edu%2F~omer%2FDOWNLOADABLE%2Fcfg-reg09.pdf&amp;amp;ei=AQbcUrL_DIfi4wSx3IDYDg&amp;amp;usg=AFQjCNHsSWONr0_c2MDgvApwrhc81deY0w&amp;amp;sig2=_2iZj4Xexe6-p5Cyt-GEMg&amp;amp;bvm=bv.59568121,d.bGE Разобрано много примеров апроксимаций]&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;cad=rja&amp;amp;ved=0CCkQFjAA&amp;amp;url=http%3A%2F%2Facl.ldc.upenn.edu%2FJ%2FJ00%2FJ00-1003.pdf&amp;amp;ei=CgfcUrWwA-mF4ATY7IHQAQ&amp;amp;usg=AFQjCNG3QHL7yQSwTUbSi9xkse2j0p6YaA&amp;amp;sig2=UF88aXWRAbapv4o_UrIjGg&amp;amp;bvm=bv.59568121,d.bGE практические эксперименты с регулярной апроксимацией]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35916</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35916"/>
				<updated>2014-01-19T16:50:26Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* MT апраксимация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&amp;lt;br /&amp;gt;(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;br /&gt;
В итоге &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; {{---}} [[Правоконтекстные грамматики, эквивалентность автоматам|правоконтекстная грамматика]], эквивалентная конечному автомату, который задает регулярный язык.&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&amp;lt;tex&amp;gt; G = \left\{\begin{matrix} A \rightarrow \alpha A \alpha &lt;br /&gt;
\\ B \rightarrow \beta A | \beta&lt;br /&gt;
\end{matrix}\right.\Rightarrow G^* = \left\{\begin{matrix} A \rightarrow \alpha B  &lt;br /&gt;
\\ A^* \rightarrow B^* | \varepsilon&lt;br /&gt;
\\ B \rightarrow \beta A | \beta B^*&lt;br /&gt;
\\ B^* \rightarrow \alpha A^* | \varepsilon&lt;br /&gt;
\end{matrix}\right.&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35915</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35915"/>
				<updated>2014-01-19T16:29:25Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* MT апраксимация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&lt;br /&gt;
(Если &amp;lt;tex&amp;gt;m = 0 &amp;lt;/tex&amp;gt;, тогда добавим правило &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 A^* &amp;lt;/tex&amp;gt;).&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35913</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35913"/>
				<updated>2014-01-19T16:24:15Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Апроксимации самоприменимой грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===MT апраксимация ===&lt;br /&gt;
Построим, по данной самоприменимой кс грамматике &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;, регулярную грамматику &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A \in N &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, добавим нетерминалы &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; A^*&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; G^* &amp;lt;/tex&amp;gt;. &lt;br /&gt;
#Для каждого правила &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_{0} B_1 {\alpha}_{1} B_2 {\alpha}_{2} \cdots B_m {\alpha}_{m}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; B_1, \cdots, B_m \in N \land {\alpha}_i \in \Sigma^*&amp;lt;/tex&amp;gt;. Добавим в &amp;lt;tex&amp;gt; G^*&amp;lt;/tex&amp;gt; нетерминалы &amp;lt;tex&amp;gt; B_1 \cdots B_m , B_1^* \cdots B_m^*&amp;lt;/tex&amp;gt; и следуюшие правила: &amp;lt;tex&amp;gt; A \rightarrow {\alpha}_0 B_1 \\ B_1^* \rightarrow {\alpha}_1 B_2\\ \vdots \\ B^*_m \rightarrow {\alpha}_m A^* &amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35909</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35909"/>
				<updated>2014-01-19T15:23:29Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Апроксимации самоприменимой грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
[[Файл:RTN_Automat.png|280px|thumb|right|Автоматы &amp;lt;tex&amp;gt;T_A,T_B&amp;lt;/tex&amp;gt; для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
[[Файл:RTN_Automat1.png|280px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35908</id>
		<title>Регулярная аппроксимация КС-языков</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D0%B0%D1%8F_%D0%B0%D0%BF%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D1%8F_%D0%9A%D0%A1-%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2&amp;diff=35908"/>
				<updated>2014-01-19T15:12:16Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* RTN апрксимация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная]] грамматика &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''самоприменимой''', если &amp;lt;tex&amp;gt; \exists A \in N: A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; \alpha \neq \varepsilon \land \beta \neq \varepsilon &amp;lt;/tex&amp;gt; .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминал &amp;lt;tex&amp;gt; A \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называется '''рекурсивным''', если &amp;lt;tex&amp;gt; \exists \alpha,\beta \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha A \beta&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt; A,B \in N&amp;lt;/tex&amp;gt; в грамматике &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; называются '''взаимно рекурсивными''', если &amp;lt;tex&amp;gt; \exists \alpha_1,\beta_1,\alpha_2,\beta_2 \in (\Sigma \cup N)^* : A \Rightarrow^* \alpha_1 B \beta_1 \land B \Rightarrow^* \alpha_2 A \beta_2&amp;lt;/tex&amp;gt;  .&lt;br /&gt;
}}&lt;br /&gt;
== Алгоритм преобразования грамматики в конечный автомат ==&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement = Не самоприменимая контекстно-свободная грамматика генерирует регулярный язык.&lt;br /&gt;
|proof = В качестве конструктивного доказательства, мы приведем алгоритм построения [[Недетерминированные конечные автоматы|конечного автомата]] по грамматике. &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
=== Идея алгоритма ===&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; N^* &amp;lt;/tex&amp;gt; множество рекурсивных терминалов из &amp;lt;tex&amp;gt; N &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt; P = \{N_1,N_2,...,N_K\} &amp;lt;/tex&amp;gt; разбиение &amp;lt;tex&amp;gt; N^*&amp;lt;/tex&amp;gt; на &amp;lt;tex&amp;gt; k &amp;lt;/tex&amp;gt; дизъюнктных множеств взаимно рекурсивных терминалов, &lt;br /&gt;
&amp;lt;tex&amp;gt; N_1 \cup N_2 \cup ... \cup N_k = N^* \land \forall i N_i \neq \emptyset &amp;lt;/tex&amp;gt;. &lt;br /&gt;
Ввведем функцию &amp;lt;tex&amp;gt; recursive(N_i): P \rightarrow  \{left, right, self, cycle\}  &amp;lt;/tex&amp;gt;:&lt;br /&gt;
 '''function''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \alpha \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 '''function''' IsRightType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;)&lt;br /&gt;
     '''return''' &amp;lt;tex&amp;gt; \exists (A \Rightarrow \alpha B \beta) \in P[ A \in N_i \land B \in N_i \land \beta \neq \varepsilon ]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 '''function''' recursive (&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;):&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return left;&lt;br /&gt;
    '''if''' IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return right;&lt;br /&gt;
    '''if''' (IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return self;&lt;br /&gt;
    '''if''' !IsLeftType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &amp;amp;&amp;amp; !IsRihtType(&amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt;) &lt;br /&gt;
        return cyclic;&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt; \forall i &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;recursive(N_i) \neq self &amp;lt;/tex&amp;gt;, т.к грамматика не самоприменима.&lt;br /&gt;
В основе алгоритма будет рекурсивный обход грамматики во все стороны. Спускаемся по грамматике до тех пор не приходим в терминал или символ алфавита:&lt;br /&gt;
# символ алфавит или &amp;lt;tex&amp;gt; /varepsilon &amp;lt;/tex&amp;gt; {{---}} добовляем новое правило в автомат&lt;br /&gt;
# нерекурсивный нетерминал {{---}} запускаемся от всех правых частей правил, который терминал порождает&lt;br /&gt;
# рекурсивный терминал {{---}} в зависимости от типа рекурсивного нетерминала, продолжаем рекурсию (будет ясно из пседокода) &lt;br /&gt;
&lt;br /&gt;
===Псевдокод===&lt;br /&gt;
&amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; {{---}} множество переходов ДКА.&lt;br /&gt;
&amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} множество допускающих состояний.&lt;br /&gt;
 '''function''' createFA(G) // &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{Q} \leftarrow \varnothing&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\Delta \leftarrow \varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
     s = createState&lt;br /&gt;
     f = createState&lt;br /&gt;
     &amp;lt;tex&amp;gt;F \leftarrow \{f\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' makeFA (s,S,f)&lt;br /&gt;
      &lt;br /&gt;
 '''function''' makeFA (q0,a,q1)&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt; \varepsilon &amp;lt;/tex&amp;gt; || a &amp;lt;tex&amp;gt; \in \Sigma&amp;lt;/tex&amp;gt;    &amp;lt;font color=green&amp;gt;// пришли в лист дерева разбора&amp;lt;/font&amp;gt;&lt;br /&gt;
         &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0,a,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
         '''return'''&lt;br /&gt;
    '''if''' a == &amp;lt;tex&amp;gt;X\beta&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; X \in (N \cup \Sigma) \land \beta \in (N \cup \Sigma)^* \land |\beta| &amp;gt; 0 &amp;lt;/tex&amp;gt;  &lt;br /&gt;
         q = createState&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q_0,X,q_1&amp;lt;/tex&amp;gt;)&lt;br /&gt;
         makeFA (&amp;lt;tex&amp;gt;q, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
         '''return'''&lt;br /&gt;
     '''if''' '''exist''' &amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; a \in N_i &amp;lt;/tex&amp;gt;  &lt;br /&gt;
          '''foreach''' b '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; &lt;br /&gt;
             &amp;lt;tex&amp;gt;q_b&amp;lt;/tex&amp;gt; = createState&lt;br /&gt;
          '''if recursive'''(&amp;lt;tex&amp;gt; N_i &amp;lt;/tex&amp;gt;) == '''left''' &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_0, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_a,\varepsilon,q_1)\} &amp;lt;/tex&amp;gt;&lt;br /&gt;
           '''else'''    &amp;lt;font color=green&amp;gt;// рекурсивный нетерминал rihgt или self&amp;lt;/font&amp;gt;   &lt;br /&gt;
             '''foreach''' C '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow X_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_C, X_1 \cdots X_m, q_1&amp;lt;/tex&amp;gt;)             &lt;br /&gt;
             '''foreach''' C,D '''in''' &amp;lt;tex&amp;gt;N_i&amp;lt;/tex&amp;gt; '''where''' &amp;lt;tex&amp;gt; C \rightarrow DX_1...X_m \land X_1,...X_m \neq N_i &amp;lt;/tex&amp;gt;&lt;br /&gt;
                makeFA (&amp;lt;tex&amp;gt;q_D, X_1 \cdots X_m, q_C&amp;lt;/tex&amp;gt;)&lt;br /&gt;
                &amp;lt;tex&amp;gt; \Delta = \Delta \cup \{(q_0, \varepsilon ,q_a)\} &amp;lt;/tex&amp;gt; &lt;br /&gt;
              '''return'''&lt;br /&gt;
     '''foreach''' p '''in''' &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; '''where''' p == &amp;lt;tex&amp;gt; a \rightarrow \beta &amp;lt;/tex&amp;gt;&lt;br /&gt;
        makeFA (&amp;lt;tex&amp;gt; q_0, \beta, q_1 &amp;lt;/tex&amp;gt;)&lt;br /&gt;
== Апроксимации самоприменимой грамматики ==&lt;br /&gt;
В данном разделе покажем методы апроксимации самоприменимой свободной контекстной грамматики &amp;lt;tex&amp;gt; G = \langle N, \Sigma, P, S \rangle&amp;lt;/tex&amp;gt; к регулярной грамматике. Для удобства будем считать, что грамматика представлена в [[Нормальная форма Хомского|НФХ]]. &lt;br /&gt;
&lt;br /&gt;
=== RTN апраксимация ===&lt;br /&gt;
Построим, по данной грамматике аппроксимирующий ее конечный автомат.&lt;br /&gt;
#Для каждого нетерминала &amp;lt;tex&amp;gt; A&amp;lt;/tex&amp;gt; в грамматике, создадим новый конечный автомат &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;, добавим  два состояния в &amp;lt;tex&amp;gt; T_A&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;q_A,q_{A^*}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
#Для каждого правила грамматике &amp;lt;tex&amp;gt; (A \rightarrow X_1 \cdots X_m ) \in P&amp;lt;/tex&amp;gt;, введм новые состояния в автомат этого нетерминала &amp;lt;tex&amp;gt; q_0^A \cdots q_m^A&amp;lt;/tex&amp;gt;, а также добавим новые правила перехода в &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; (q_A, \varepsilon, q_0),(q_0^A,X_1,q_1^A), \cdots,(q_{m-1}^A,X_m,q_m^A),(q_m^A,\varepsilon,q_{A^*})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Файл:RTN_Automat1.png|300px|thumb|left|Конечный автомат для грамматики  &lt;br /&gt;
 &amp;lt;tex&amp;gt;A \rightarrow aBb \\ A \rightarrow cA \\ B \rightarrow dAe \\ B \rightarrow f &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
#Таким образом мы построили множество конечных автоматов &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt; \{ T_A \| A \in N\}&amp;lt;/tex&amp;gt; для каждого нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Теперь объединим все в один автомат. Объединим все состоянии автоматов из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в множество &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Скопируем все переходы каждого автомата из &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;. Далее для каждого перехода вида &amp;lt;tex&amp;gt;(q,A,p), A\in N&amp;lt;/tex&amp;gt;, вместо него добавим два новых перехода: &amp;lt;tex&amp;gt; (q, \varepsilon, q_A),(q_A^{*}, \varepsilon, p) &amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RTN_Automat1.png&amp;diff=35907</id>
		<title>Файл:RTN Automat1.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RTN_Automat1.png&amp;diff=35907"/>
				<updated>2014-01-19T15:09:31Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RTN_Automat.png&amp;diff=35906</id>
		<title>Файл:RTN Automat.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RTN_Automat.png&amp;diff=35906"/>
				<updated>2014-01-19T14:51:52Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=30446</id>
		<title>Верхние и нижние оценки хроматического числа</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=30446"/>
				<updated>2013-01-20T07:50:05Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Нижняя оценка числом внутренней устойчивости */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Верхняя оценка длиной максимального нечетного цикла  ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = оценка хроматического числа длиной максимального нечётного цикла&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - длина максимального простого цикла графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta \ge 3&amp;lt;/tex&amp;gt;. Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Опишем на графе следующий алгоритм раскраски:&lt;br /&gt;
*Из произвольной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; запусти алгоритм поиска в глубину. Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} дерево обхода глубина графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с корнем в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Произвольную вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, покрасим в цвет &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \mod &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\Delta + 1)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt;{{---}} расстояние между вершинами &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в графe &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем от противного, что после выполнения описанного алгоритма граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; будет правильно раскрашен.&lt;br /&gt;
Предположим, что после выполнения алгоритма покраски в графе существует ребро, соединяющее вершины &amp;lt;tex&amp;gt; a,b &amp;lt;/tex&amp;gt; одного цвета.Пусть &amp;lt;tex&amp;gt;color(v)&amp;lt;/tex&amp;gt; {{---}} цвет вершины после выполнения алгоритма раскраски.Заметим, что для произвольной вершины графа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;dist(v,p) = color(p) + n(\Delta + 1)&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;n \ge 0 &amp;lt;/tex&amp;gt;.Тогда, &amp;lt;tex&amp;gt;dist(v,a) - dist(v,b) = k(\Delta + 1)&amp;lt;/tex&amp;gt;.Поскольку в дереве dfs между вершинами находящимися на одинаковом расстоянии от корня нет перекрестных ребер, то &amp;lt;tex&amp;gt; k \ge 1&amp;lt;/tex&amp;gt;. То есть, вершины &amp;lt;tex&amp;gt;a,b&amp;lt;/tex&amp;gt; лежат на простом цикле длины по крайней мере &amp;lt;tex&amp;gt;\Delta + 2&amp;lt;/tex&amp;gt;. Получается противоречие с условием потому, что длина максимального простого цикла получается больше чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; после выполнения алгоритма раскраски  нет вершин одного цвета соединенных ребром и при этом каждая вершина покрашена в один из &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; правильно раскрашен в &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt; цвет, следовательно &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
==Нижняя оценка числом независимости ==&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
Подмножество &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вершин графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  называется '''независимым''', если любые две вершины из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не смежны в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
'''Число независимости''' &amp;lt;tex&amp;gt;\alpha(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;max \{|S|:S \in V&amp;lt;/tex&amp;gt; и S независимо в G&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами .Тогда, &amp;lt;tex&amp;gt;n/\alpha \le \chi(G)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.Каждое из &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; {{---}} независимое множество (поскольку вершины множества покрашены в один цвет при правильной покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, следовательно, они попарно не смежны внутри множества ).&lt;br /&gt;
Заметим, что для произвольного &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|V_i| \le \alpha&amp;lt;/tex&amp;gt; (т.к &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; независимое множество). То есть, &amp;lt;tex&amp;gt;\sum\limits^{\chi}_{i = 1}|V_i| = n \le \chi  \alpha &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;n / \alpha \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Верхняя оценка количеством ребер ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = верхняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с  &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами.Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Заметим, что между любыми двумя различными множествами существует хотя бы одно ребро (в противном случаи эти множества можно было бы покрасить в один цвет).&lt;br /&gt;
Тогда, &amp;lt;tex&amp;gt;\frac{1}{2}\chi(\chi-1) \le m \Rightarrow (\chi - \frac{1}{2})^2 \le 2m + \frac{1}{4} \Rightarrow \chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Нижняя оценка количеством ребер и количеством вершин ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка Геллера&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами .Тогда,    &amp;lt;tex&amp;gt;\frac{n^2}{n^2 - 2m} \le \chi(G) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;m \le \frac{1}{2}n(n - 1) - \frac{1}{2}\sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1) \Rightarrow \frac{n^2}{n^2 - 2m} \le \frac{n^2}{n^2 -n(n - 1) + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{n + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i| + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} = \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} = \frac{(\sum\limits^{\chi}_{i = 1}|V_i|)^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Полезные материалы ==&lt;br /&gt;
* [http://www.ucdenver.edu/academics/colleges/CLAS/Departments/math/students/alumni/Documents/Student%20Theses/Mitchell_MSThesis.pdf Множество разных оценок для хроматических чисел]&lt;br /&gt;
* [http://geometr.freehostia.com/sravnenie_summ.html Сравнение квадрата суммы и суммы квадратов действительных чисел]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=30445</id>
		<title>Верхние и нижние оценки хроматического числа</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=30445"/>
				<updated>2013-01-20T07:48:32Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Нижняя оценка числом внутренней устойчивости */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Верхняя оценка длиной максимального нечетного цикла  ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = оценка хроматического числа длиной максимального нечётного цикла&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - длина максимального простого цикла графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta \ge 3&amp;lt;/tex&amp;gt;. Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Опишем на графе следующий алгоритм раскраски:&lt;br /&gt;
*Из произвольной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; запусти алгоритм поиска в глубину. Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} дерево обхода глубина графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с корнем в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Произвольную вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, покрасим в цвет &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \mod &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\Delta + 1)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt;{{---}} расстояние между вершинами &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в графe &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем от противного, что после выполнения описанного алгоритма граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; будет правильно раскрашен.&lt;br /&gt;
Предположим, что после выполнения алгоритма покраски в графе существует ребро, соединяющее вершины &amp;lt;tex&amp;gt; a,b &amp;lt;/tex&amp;gt; одного цвета.Пусть &amp;lt;tex&amp;gt;color(v)&amp;lt;/tex&amp;gt; {{---}} цвет вершины после выполнения алгоритма раскраски.Заметим, что для произвольной вершины графа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;dist(v,p) = color(p) + n(\Delta + 1)&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;n \ge 0 &amp;lt;/tex&amp;gt;.Тогда, &amp;lt;tex&amp;gt;dist(v,a) - dist(v,b) = k(\Delta + 1)&amp;lt;/tex&amp;gt;.Поскольку в дереве dfs между вершинами находящимися на одинаковом расстоянии от корня нет перекрестных ребер, то &amp;lt;tex&amp;gt; k \ge 1&amp;lt;/tex&amp;gt;. То есть, вершины &amp;lt;tex&amp;gt;a,b&amp;lt;/tex&amp;gt; лежат на простом цикле длины по крайней мере &amp;lt;tex&amp;gt;\Delta + 2&amp;lt;/tex&amp;gt;. Получается противоречие с условием потому, что длина максимального простого цикла получается больше чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; после выполнения алгоритма раскраски  нет вершин одного цвета соединенных ребром и при этом каждая вершина покрашена в один из &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; правильно раскрашен в &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt; цвет, следовательно &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
==Нижняя оценка числом внутренней устойчивости ==&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
Подмножество &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вершин графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  называется '''независимым''', если любые две вершины из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не смежны в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
'''Число независимости''' &amp;lt;tex&amp;gt;\alpha(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;max \{|S|:S \in V&amp;lt;/tex&amp;gt; и S внутренне устойчиво в G&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами .Тогда, &amp;lt;tex&amp;gt;n/\alpha \le \chi(G)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.Каждое из &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; {{---}} независимое множество (поскольку вершины множества покрашены в один цвет при правильной покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, следовательно, они попарно не смежны внутри множества ).&lt;br /&gt;
Заметим, что для произвольного &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|V_i| \le \alpha&amp;lt;/tex&amp;gt; (т.к &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; независимое множество). То есть, &amp;lt;tex&amp;gt;\sum\limits^{\chi}_{i = 1}|V_i| = n \le \chi  \alpha &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;n / \alpha \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Верхняя оценка количеством ребер ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = верхняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с  &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами.Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Заметим, что между любыми двумя различными множествами существует хотя бы одно ребро (в противном случаи эти множества можно было бы покрасить в один цвет).&lt;br /&gt;
Тогда, &amp;lt;tex&amp;gt;\frac{1}{2}\chi(\chi-1) \le m \Rightarrow (\chi - \frac{1}{2})^2 \le 2m + \frac{1}{4} \Rightarrow \chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Нижняя оценка количеством ребер и количеством вершин ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка Геллера&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами .Тогда,    &amp;lt;tex&amp;gt;\frac{n^2}{n^2 - 2m} \le \chi(G) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;m \le \frac{1}{2}n(n - 1) - \frac{1}{2}\sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1) \Rightarrow \frac{n^2}{n^2 - 2m} \le \frac{n^2}{n^2 -n(n - 1) + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{n + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i| + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} = \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} = \frac{(\sum\limits^{\chi}_{i = 1}|V_i|)^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Полезные материалы ==&lt;br /&gt;
* [http://www.ucdenver.edu/academics/colleges/CLAS/Departments/math/students/alumni/Documents/Student%20Theses/Mitchell_MSThesis.pdf Множество разных оценок для хроматических чисел]&lt;br /&gt;
* [http://geometr.freehostia.com/sravnenie_summ.html Сравнение квадрата суммы и суммы квадратов действительных чисел]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30422</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30422"/>
				<updated>2013-01-19T22:19:53Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на пятом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства теоремы рассмотрим несколько случаев:&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \le 2&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
#*# &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*#&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \ge 3&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt; {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; {{---}} две компоненты связности, полученные при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Тогда, по выше доказанной лемме эти компоненты можно правильно раскрасить в не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов. Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt;  {{---}} два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в каждом из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, в одном из данных подграфах &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt;. Тоесть, эти подграфы можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов. А из этого следует, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в одном из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, рассмотрим например, что в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
###* Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершиной &amp;lt;tex&amp;gt;p \in G_2&amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где степени вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; равны &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета. Следовательно, можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
###*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм раскраски. Третий случай, пятый шаг]]Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершинами &amp;lt;tex&amp;gt;u_1,v_1 \in G_2&amp;lt;/tex&amp;gt; соответственно, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;. Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра. При этом, сумма степеней новой пары вершин в каждой из компонент, полученных после их удаления, меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Поэтому, если для этой пары вершин  провести рассуждения аналогичные тем, которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;, получится, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным графом, где &amp;lt;tex&amp;gt;k &amp;gt; 2&amp;lt;/tex&amp;gt;. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случае &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке, начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей. Следовательно, вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30421</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30421"/>
				<updated>2013-01-19T22:18:36Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на пятом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства теоремы рассмотрим несколько случаев:&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \le 2&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
#*# &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*#&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \ge 3&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt; {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; {{---}} две компоненты связности, полученные при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Тогда, по выше доказанной лемме эти компоненты можно правильно раскрасить в не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов. Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt;  {{---}} два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в каждом из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, в одном из данных подграфах &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt;. Тоесть, эти подграфы можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов. А из этого следует, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в одном из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, рассмотрим например, что в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
###* Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершиной &amp;lt;tex&amp;gt;p \in G_2&amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где степени вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; равны &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета. Следовательно, можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
###*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм раскраски. Третий случай, пятый шаг]]Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершинами &amp;lt;tex&amp;gt;u_1,v_1 \in G_2&amp;lt;/tex&amp;gt; соответственно, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;. Заметим, что при удалении этих вершин граф потеряет связность, и между ними нет ребра. При этом, сумма степеней новой пары вершин в каждой из компонент, полученных после их удаления, меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Поэтому, если для этой пары вершин  провести рассуждения аналогичные тем, которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;, получится, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным графом, где &amp;lt;tex&amp;gt;k &amp;gt; 2&amp;lt;/tex&amp;gt;. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случае &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке, начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей. Следовательно, вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30420</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30420"/>
				<updated>2013-01-19T22:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на пятом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства теоремы рассмотрим несколько случаев:&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \le 2&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
#*# &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*#&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \ge 3&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt; {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; {{---}} две компоненты связности, полученные при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Тогда, по выше доказанной лемме эти компоненты можно правильно раскрасить в не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов. Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность . Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt;  {{---}} два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в каждом из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, в одном из данных подграфах &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt;. Тоесть, эти подграфы можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов. А из этого следует, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в одном из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, рассмотрим например,что в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
###* Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершиной &amp;lt;tex&amp;gt;p \in G_2&amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где степени вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; равны &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета. Следовательно, можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
###*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм раскраски. Третий случай, пятый шаг]]Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершинами &amp;lt;tex&amp;gt;u_1,v_1 \in G_2&amp;lt;/tex&amp;gt; соответственно, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;. Заметим, что при удалении этих вершин граф потеряет связность, и между ними нет ребра. При этом, сумма степеней новой пары вершин в каждой из компонент, полученных после их удаления, меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Поэтому, если для этой пары вершин  провести рассуждения аналогичные тем, которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;, получится, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным графом, где &amp;lt;tex&amp;gt;k &amp;gt; 2&amp;lt;/tex&amp;gt;. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случае &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке, начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей. Следовательно, вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30418</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30418"/>
				<updated>2013-01-19T22:06:48Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Вспомогательная Лемма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на пятом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства теоремы рассмотрим несколько случаев:&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \le 2&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
#*# &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*#&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \ge 3&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt; {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; {{---}} две компоненты связности, полученные при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Тогда, по выше доказанной лемме эти компоненты можно правильно раскрасить в не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов. Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность . Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt;  {{---}} два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в каждом из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, в одном из данных подграфах &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt;. Тоесть, эти подграфы можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов. А из этого следует, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в одном из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, рассмотрим например,что в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
###* Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершиной &amp;lt;tex&amp;gt;p \in G_2&amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где степени вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; равны &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета. Следовательно, можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
###*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм раскраски. Третий случай, пятый шаг]]Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершинами &amp;lt;tex&amp;gt;u_1,v_1 \in G_2&amp;lt;/tex&amp;gt; соответственно, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;. Заметим, что при удалении этих вершин граф потеряет связность, и между ними нет ребра. При этом, сумма степеней новой пары вершин в каждой из компонент, полученных после их удаления, меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Поэтому, если для этой пары вершин  провести рассуждения аналогичные тем, которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;, получится, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным графом, где &amp;lt;tex&amp;gt;k &amp;gt; 2&amp;lt;/tex&amp;gt;. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случае &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке, начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно, вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30417</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30417"/>
				<updated>2013-01-19T22:01:35Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Теорема */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства теоремы рассмотрим несколько случаев:&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \le 2&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
#*# &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*#&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \ge 3&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt; {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; {{---}} две компоненты связности, полученные при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;. Тогда, по выше доказанной лемме эти компоненты можно правильно раскрасить в не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов. Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность . Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt;  {{---}} два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в каждом из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, в одном из данных подграфах &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt;. Тоесть, эти подграфы можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов. А из этого следует, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в одном из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, рассмотрим например,что в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
###* Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершиной &amp;lt;tex&amp;gt;p \in G_2&amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где степени вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; равны &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета. Следовательно, можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
###*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм раскраски. Третий случай, пятый шаг]]Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершинами &amp;lt;tex&amp;gt;u_1,v_1 \in G_2&amp;lt;/tex&amp;gt; соответственно, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;. Заметим, что при удалении этих вершин граф потеряет связность, и между ними нет ребра. При этом, сумма степеней новой пары вершин в каждой из компонент, полученных после их удаления, меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Поэтому, если для этой пары вершин  провести рассуждения аналогичные тем, которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;, получится, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным графом, где &amp;lt;tex&amp;gt;k &amp;gt; 2&amp;lt;/tex&amp;gt;. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случае &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке, начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно, вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30401</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30401"/>
				<updated>2013-01-19T19:19:58Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Теорема */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
Для доказательства теоремы рассмотрим несколько случаев:&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \le 2&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
#*# &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#*#&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
#&amp;lt;tex&amp;gt;\Delta(G) \ge 3&amp;lt;/tex&amp;gt;, тогда:&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt; {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; {{---}} две компоненты связности, полученные при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt;  {{---}} два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в каждом из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;. Тогда, в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt;.Тоесть, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует, что граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
### Если сумма степеней вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в одном из подграфов &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; равна &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;.Тогда, степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, например, в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
###* Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершиной &amp;lt;tex&amp;gt;p \in G_2&amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где степени вершин &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; равны &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета. Следовательно, можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
###*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3-его случая на 5ом шаге]]Если вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; смежны с вершинами &amp;lt;tex&amp;gt;u_1,v_1 \in G_2&amp;lt;/tex&amp;gt; соответственно, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность, и между ними нет ребра и сумма степеней новой пары вершин в каждой из компонент полученных после их удаления меньше &amp;lt;tex&amp;gt;2(\Delta-1)&amp;lt;/tex&amp;gt;.Поэтому,если для этой пары вершин  провести рассуждения аналогичные тем, которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;,получится, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным графом, где &amp;lt;tex&amp;gt;k &amp;gt; 2&amp;lt;/tex&amp;gt;. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случае &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке, начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно, вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30156</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30156"/>
				<updated>2013-01-17T19:34:05Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: ((p,u) \in E) \land ((p,v) \in E)  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3-его случая на 5ом шаге]]&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: ((u,u_1) \in E) \land ((v,v_1) \in E) \land (u_1 \neq v_1)  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если вышеописанные случаи не подходят, то граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30154</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30154"/>
				<updated>2013-01-17T19:27:59Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: (pu \in E) \land (pv \in E)  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3-его случая на 5ом шаге]]&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: (uu_1 \in E) \land (vv_1 \in E) \land (u_1 \neq v_1)  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если вышеописанные случаи не подходят, то граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30153</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30153"/>
				<updated>2013-01-17T19:25:46Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является вершинно двусвязным графом. Тогда, &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: (pu \in E) \land (pv \in E)  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: (uu_1 \in E) \land (vv_1 \in E) \land (u_1 \neq v_1)  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3-его случая на 5ом шаге]]Если вышеописанные случаи не подходят, то граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; является &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-связным. Тогда, рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30152</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30152"/>
				<updated>2013-01-17T19:06:21Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: (pu \in E) \land (pv \in E)  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: (uu_1 \in E) \land (vv_1 \in E) \land (u_1 \neq v_1)  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3-его случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30151</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30151"/>
				<updated>2013-01-17T19:04:39Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: (pu \in E) \land (pv \in E)  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: (uu_1 \in E) \land (vv_1 \in E) \land (u_1 \neq v_1)  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30150</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30150"/>
				<updated>2013-01-17T19:02:19Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:(G_1 \cap G_2 = \{v,u\})  \land (G_1 \cup G_2 = G)&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: (pu \in E) \land (pv \in E)  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: (uu_1 \in E) \land (vv_1 \in E) \land (u_1 \neq v_1)  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30149</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30149"/>
				<updated>2013-01-17T18:56:12Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u \le \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v \le \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30148</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30148"/>
				<updated>2013-01-17T18:44:26Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Теорема */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30147</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30147"/>
				<updated>2013-01-17T18:38:34Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Вспомогательная Лемма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей (т.к &amp;lt;tex&amp;gt; deg(v_{n - i+1}) \le \Delta(G)&amp;lt;/tex&amp;gt; и предок данной вершины в дереве bfs еще не покрашен, а если предка нет, то это вершина и есть &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;), следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30146</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=30146"/>
				<updated>2013-01-17T18:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ w &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|400px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|400px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=29780</id>
		<title>Верхние и нижние оценки хроматического числа</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=29780"/>
				<updated>2013-01-14T07:44:02Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Полезные материалы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Верхняя оценка длиной максимального нечетного цикла  ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = оценка хроматического числа длиной максимального нечётного цикла&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - длина максимального простого цикла графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta \ge 3&amp;lt;/tex&amp;gt;. Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Опишем на графе следующий алгоритм раскраски:&lt;br /&gt;
*Из произвольной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; запусти алгоритм поиска в глубину. Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} дерево обхода глубина графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с корнем в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Произвольную вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, покрасим в цвет &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \mod &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\Delta + 1)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt;{{---}} расстояние между вершинами &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в графe &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем от противного, что после выполнения описанного алгоритма граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; будет правильно раскрашен.&lt;br /&gt;
Предположим, что после выполнения алгоритма покраски в графе существует ребро, соединяющее вершины &amp;lt;tex&amp;gt; a,b &amp;lt;/tex&amp;gt; одного цвета.Пусть &amp;lt;tex&amp;gt;color(v)&amp;lt;/tex&amp;gt; {{---}} цвет вершины после выполнения алгоритма раскраски.Заметим, что для произвольной вершины графа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;dist(v,p) = color(p) + n(\Delta + 1)&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;n \ge 0 &amp;lt;/tex&amp;gt;.Тогда, &amp;lt;tex&amp;gt;dist(v,a) - dist(v,b) = k(\Delta + 1)&amp;lt;/tex&amp;gt;.Поскольку в дереве dfs между вершинами находящимися на одинаковом расстоянии от корня нет перекрестных ребер, то &amp;lt;tex&amp;gt; k \ge 1&amp;lt;/tex&amp;gt;. То есть, вершины &amp;lt;tex&amp;gt;a,b&amp;lt;/tex&amp;gt; лежат на простом цикле длины по крайней мере &amp;lt;tex&amp;gt;\Delta + 2&amp;lt;/tex&amp;gt;. Получается противоречие с условием потому, что длина максимального простого цикла получается больше чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; после выполнения алгоритма раскраски  нет вершин одного цвета соединенных ребром и при этом каждая вершина покрашена в один из &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; правильно раскрашен в &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt; цвет, следовательно &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
==Нижняя оценка числом внутренней устойчивости ==&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
Подмножество &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вершин графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  называется '''внутренне устойчивым''', если любые две вершины из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не смежны в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
'''Число внутренней устойчивости''' &amp;lt;tex&amp;gt;\alpha(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;max \{|S|:S \in V&amp;lt;/tex&amp;gt; и S внутренне устойчиво в G&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами .Тогда, &amp;lt;tex&amp;gt;n/\alpha \le \chi(G)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.Каждое из &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; {{---}} внутренне устойчивое множество (поскольку вершины множества покрашены в один цвет при правильной покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, следовательно, они попарно не смежны внутри множества ).&lt;br /&gt;
Заметим, что для произвольного &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|V_i| \le \alpha&amp;lt;/tex&amp;gt; (т.к &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; внутренне устойчиво). То есть, &amp;lt;tex&amp;gt;\sum\limits^{\chi}_{i = 1}|V_i| = n \le \chi  \alpha &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;n / \alpha \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Верхняя оценка количеством ребер ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = верхняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с  &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами.Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Заметим, что между любыми двумя различными множествами существует хотя бы одно ребро (в противном случаи эти множества можно было бы покрасить в один цвет).&lt;br /&gt;
Тогда, &amp;lt;tex&amp;gt;\frac{1}{2}\chi(\chi-1) \le m \Rightarrow (\chi - \frac{1}{2})^2 \le 2m + \frac{1}{4} \Rightarrow \chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Нижняя оценка количеством ребер и количеством вершин ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка Геллера&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами .Тогда,    &amp;lt;tex&amp;gt;\frac{n^2}{n^2 - 2m} \le \chi(G) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;m \le \frac{1}{2}n(n - 1) - \frac{1}{2}\sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1) \Rightarrow \frac{n^2}{n^2 - 2m} \le \frac{n^2}{n^2 -n(n - 1) + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{n + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i| + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} = \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} = \frac{(\sum\limits^{\chi}_{i = 1}|V_i|)^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Полезные материалы ==&lt;br /&gt;
* [http://www.ucdenver.edu/academics/colleges/CLAS/Departments/math/students/alumni/Documents/Student%20Theses/Mitchell_MSThesis.pdf Множество разных оценок для хроматических чисел]&lt;br /&gt;
* [http://geometr.freehostia.com/sravnenie_summ.html Сравнение квадрата суммы и суммы квадратов действительных чисел]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://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&amp;diff=29713</id>
		<title>Дискретная математика, алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://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&amp;diff=29713"/>
				<updated>2013-01-14T00:33:20Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Раскраски графов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
&lt;br /&gt;
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].&lt;br /&gt;
&lt;br /&gt;
= Первый семестр =&lt;br /&gt;
&lt;br /&gt;
== Отношения ==&lt;br /&gt;
*[[Определение отношения]]&lt;br /&gt;
*[[Степень отношений]]&lt;br /&gt;
*[[Композиция отношений|Композиция отношений. Обратное отношение]]&lt;br /&gt;
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]&lt;br /&gt;
*[[Симметричное отношение]]&lt;br /&gt;
*[[Антисимметричное отношение]]&lt;br /&gt;
*[[Транзитивное отношение]]&lt;br /&gt;
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]&lt;br /&gt;
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]&lt;br /&gt;
*[[Транзитивный остов]]&lt;br /&gt;
*[[Отношение порядка]]&lt;br /&gt;
*[[Отношение эквивалентности]]&lt;br /&gt;
&lt;br /&gt;
== Булевы функции ==&lt;br /&gt;
*[[Определение булевой функции]]&lt;br /&gt;
*[[Суперпозиции]]&lt;br /&gt;
*[[ДНФ]]&lt;br /&gt;
*[[КНФ]]&lt;br /&gt;
*[[Полином Жегалкина]]&lt;br /&gt;
*[[Полные системы функций. Теорема Поста о полной системе функций]]&lt;br /&gt;
*[[Сокращенная и минимальная ДНФ]]&lt;br /&gt;
*[[Минимизация ДНФ с помощью покрытий гиперкуба и карт Карно]]&lt;br /&gt;
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]&lt;br /&gt;
*[[Преобразование Мёбиуса для получения коэффициентов полинома Жегалкина]]&lt;br /&gt;
*[[Представление функции класса DM с помощью медианы]]&lt;br /&gt;
*[[Пороговая функция]]&lt;br /&gt;
&lt;br /&gt;
== Схемы из функциональных элементов ==&lt;br /&gt;
*[[Реализация булевой функции схемой из функциональных элементов]]&lt;br /&gt;
*[[Cумматор]]&lt;br /&gt;
*[[Каскадный сумматор]]&lt;br /&gt;
*[[Двоичный каскадный сумматор]]&lt;br /&gt;
*[[Реализация вычитания сумматором]]&lt;br /&gt;
*[[Матричный умножитель]]&lt;br /&gt;
*[[Дерево Уоллеса]]&lt;br /&gt;
&lt;br /&gt;
== Представление информации ==&lt;br /&gt;
*[[Кодирование информации]]&lt;br /&gt;
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
*[[Представление вещественных чисел]]&lt;br /&gt;
*[[Представление символов, таблицы кодировок]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы сжатия ==&lt;br /&gt;
*[[Алгоритм Хаффмана]]&lt;br /&gt;
*[[Алгоритм LZW]]&lt;br /&gt;
*[[Алгоритмы LZ77 и LZ78]]&lt;br /&gt;
*[[Преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Обратное преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Преобразование MTF]]&lt;br /&gt;
*[[Расстояние Хэмминга]]&lt;br /&gt;
*[[Избыточное кодирование, код Хэмминга]]&lt;br /&gt;
*[[Неравенство Крафта]]&lt;br /&gt;
*[[Неравенство Макмиллана]]&lt;br /&gt;
*[[Алгоритм Ху-Таккера]]&lt;br /&gt;
&lt;br /&gt;
== Комбинаторика ==&lt;br /&gt;
*[[Комбинаторные объекты]]&lt;br /&gt;
*[[Лексикографический порядок]]&lt;br /&gt;
*[[Формула включения-исключения]]&lt;br /&gt;
*[[Генерация комбинаторных объектов в лексикографическом порядке]]&lt;br /&gt;
*[[Получение номера по объекту]]&lt;br /&gt;
*[[Получение объекта по номеру]]&lt;br /&gt;
*[[Получение следующего объекта]]&lt;br /&gt;
*[[Коды Грея]]&lt;br /&gt;
*[[Коды Грея для перестановок]]&lt;br /&gt;
*[[Коды антигрея]]&lt;br /&gt;
*[[Цепные коды]]&lt;br /&gt;
*[[Правильные скобочные последовательности]]&lt;br /&gt;
*[[Действие перестановки на набор из элементов, представление в виде циклов]]&lt;br /&gt;
*[[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]&lt;br /&gt;
*[[Методы генерации случайного сочетания]]&lt;br /&gt;
*[[Таблица инверсий]]&lt;br /&gt;
*[[Умножение перестановок, обратная перестановка, группа перестановок]]&lt;br /&gt;
*[[Теорема Кэли]]&lt;br /&gt;
*[[Матричное представление перестановок]]&lt;br /&gt;
*[[Задача о минимуме/максимуме скалярного произведения]]&lt;br /&gt;
*[[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]&lt;br /&gt;
*[[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]&lt;br /&gt;
*[[Производящая функция]]&lt;br /&gt;
*[[Задача об ожерельях]]&lt;br /&gt;
&lt;br /&gt;
== [[Динамическое программирование]] ==&lt;br /&gt;
*[[Кратчайший путь в ациклическом графе]]&lt;br /&gt;
*[[Задача о расстановке знаков в выражении]]&lt;br /&gt;
*[[Задача о наибольшей общей подпоследовательности]]&lt;br /&gt;
*[[Задача о порядке перемножения матриц]]&lt;br /&gt;
*[[Задача о наибольшей возрастающей подпоследовательности]]&lt;br /&gt;
*[[Задача о паросочетании максимального веса в дереве, амортизированные оценки для ДП на дереве]]&lt;br /&gt;
*[[Метод четырех русских для умножения матриц]]&lt;br /&gt;
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]&lt;br /&gt;
*[[Задача коммивояжера, ДП по подмножествам]]&lt;br /&gt;
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]&lt;br /&gt;
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]&lt;br /&gt;
*[[Задача о расстоянии Дамерау-Левенштейна]]&lt;br /&gt;
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]&lt;br /&gt;
*[[Задача о наибольшей подпоследовательности-палиндроме]]&lt;br /&gt;
*[[Meet-in-the-middle]]&lt;br /&gt;
*[[Динамическое программирование по профилю]]&lt;br /&gt;
*[[Задача о рюкзаке]]&lt;br /&gt;
*[[Динамика по поддеревьям]]&lt;br /&gt;
&lt;br /&gt;
== Теория вероятностей ==&lt;br /&gt;
*[[Вероятностное пространство, элементарный исход, событие]]&lt;br /&gt;
*[[Независимые события]]&lt;br /&gt;
*[[Условная вероятность]]&lt;br /&gt;
*[[Формула Байеса]]&lt;br /&gt;
*[[Формула полной вероятности]]&lt;br /&gt;
*[[Дискретная случайная величина]]&lt;br /&gt;
*[[Независимые случайные величины]]&lt;br /&gt;
*[[Математическое ожидание случайной величины]]&lt;br /&gt;
*[[Дисперсия случайной величины]]&lt;br /&gt;
*[[Ковариация случайных величин]]&lt;br /&gt;
*[[Корреляция случайных величин]]&lt;br /&gt;
*[[Энтропия случайного источника]]&lt;br /&gt;
*[[Симуляция одним распределением другого]]&lt;br /&gt;
*[[Арифметическое кодирование]]&lt;br /&gt;
*[[Парадоксы теории вероятностей]]&lt;br /&gt;
*[[Схема Бернулли]]&lt;br /&gt;
&lt;br /&gt;
== Марковские цепи ==&lt;br /&gt;
&lt;br /&gt;
* [[Марковская цепь]]&lt;br /&gt;
* [[Теорема о поглощении]]&lt;br /&gt;
* [[Фундаментальная матрица]]&lt;br /&gt;
* [[Математическое ожидание времени поглощения]]&lt;br /&gt;
* [[Расчет вероятности поглощения в состоянии]]&lt;br /&gt;
* [[Эргодическая марковская цепь]]&lt;br /&gt;
* [[Регулярная марковская цепь]]&lt;br /&gt;
* [[Примеры использования Марковских цепей]]&lt;br /&gt;
* [[Алгоритм Витерби]]&lt;br /&gt;
&lt;br /&gt;
= Второй семестр =&lt;br /&gt;
&lt;br /&gt;
== Амортизационный анализ ==&lt;br /&gt;
* [[Амортизационный анализ]]&lt;br /&gt;
* [[Саморасширяющийся массив]]&lt;br /&gt;
* [[Массив с увеличением/уменьшением размера]]&lt;br /&gt;
* [[Список]]&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Очередь]]&lt;br /&gt;
* [[Персистентный стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Приоритетные очереди ==&lt;br /&gt;
&lt;br /&gt;
* [[Двоичная куча]]&lt;br /&gt;
* [[Биномиальная куча]]&lt;br /&gt;
* [[Фибоначчиева куча]]&lt;br /&gt;
&lt;br /&gt;
== Система непересекающихся множеств ==&lt;br /&gt;
* [[СНМ (наивные реализации) | Наивные реализации]]&lt;br /&gt;
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]&lt;br /&gt;
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]&lt;br /&gt;
&lt;br /&gt;
== Поисковые структуры данных ==&lt;br /&gt;
* [[Упорядоченное множество]]&lt;br /&gt;
* [[Дерево поиска, наивная реализация]]&lt;br /&gt;
* [[АВЛ-дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
* [[B-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[Декартово дерево]]&lt;br /&gt;
* [[Декартово дерево по неявному ключу]]&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Рандомизированное бинарное дерево поиска]]&lt;br /&gt;
* [[Дерево ван Эмде Боаса]]&lt;br /&gt;
* [[Список с пропусками]]&lt;br /&gt;
&lt;br /&gt;
== Дерево отрезков ==&lt;br /&gt;
&lt;br /&gt;
* [[Статистики на отрезках. Корневая эвристика]]&lt;br /&gt;
* [[Дерево отрезков. Построение]]&lt;br /&gt;
* [[Реализация запроса в дереве отрезков сверху]]&lt;br /&gt;
* [[Реализация запроса в дереве отрезков снизу]]&lt;br /&gt;
* [[Несогласованные поддеревья. Реализация массового обновления]]&lt;br /&gt;
* [[Многомерное дерево отрезков]]&lt;br /&gt;
* [[Сжатое многомерное дерево отрезков]]&lt;br /&gt;
&lt;br /&gt;
== Дерево Фенвика ==&lt;br /&gt;
* [[Дерево Фенвика]]&lt;br /&gt;
* [[Встречное дерево Фенвика]]&lt;br /&gt;
* [[Дерево Фенвика для некоммутативных операций]]&lt;br /&gt;
* [[Многомерное дерево Фенвика]]&lt;br /&gt;
&lt;br /&gt;
== Хеширование ==&lt;br /&gt;
* [[Хеш-таблица]]&lt;br /&gt;
* [[Разрешение коллизий]]&lt;br /&gt;
* [[Хеширование кукушки]]&lt;br /&gt;
* [[Идеальное хеширование]]&lt;br /&gt;
* [[Перехеширование. Амортизационный анализ]]&lt;br /&gt;
* [[Фильтр Блума]]&lt;br /&gt;
* [[Универсальное семейство хеш-функций]]&lt;br /&gt;
&lt;br /&gt;
== [[Сортировка]] ==&lt;br /&gt;
* [[Сортировка выбором]]&lt;br /&gt;
* [[Сортировка пузырьком]]&lt;br /&gt;
* [[Сортировка вставками]]&lt;br /&gt;
* [[Сортировка кучей]]&lt;br /&gt;
* [[Быстрая сортировка]]&lt;br /&gt;
* [[Сортировка слиянием]]&lt;br /&gt;
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]&lt;br /&gt;
* [[Теорема о нижней оценке для сортировки сравнениями]]&lt;br /&gt;
* [[Сортировка подсчетом]]&lt;br /&gt;
* [[Сортировка подсчетом сложных объектов]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Карманная сортировка]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики за линейное время]]&lt;br /&gt;
* [[Сортировка Хана]]&lt;br /&gt;
&lt;br /&gt;
== Сортирующие сети ==&lt;br /&gt;
* [[Сортирующие сети]]&lt;br /&gt;
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]&lt;br /&gt;
* [[Сортирующие сети для квадратичных сортировок]]&lt;br /&gt;
* [[Сеть Бетчера]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы поиска ==&lt;br /&gt;
* [[Целочисленный двоичный поиск]]&lt;br /&gt;
* [[Вещественный двоичный поиск]]&lt;br /&gt;
* [[Троичный поиск]]&lt;br /&gt;
* [[Поиск с помощью золотого сечения]]&lt;br /&gt;
* [[Интерполяционный поиск]]&lt;br /&gt;
&lt;br /&gt;
== Связь между структурами данных ==&lt;br /&gt;
* [[Связь между структурами данных]]&lt;br /&gt;
&lt;br /&gt;
= Третий семестр =&lt;br /&gt;
&lt;br /&gt;
== Основные определения теории графов ==&lt;br /&gt;
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]&lt;br /&gt;
* [[Лемма о рукопожатиях]]&lt;br /&gt;
* [[Теорема о существовании простого пути в случае существования пути]]&lt;br /&gt;
* [[Теорема о существовании простого цикла в случае существования цикла]]&lt;br /&gt;
* [[Матрица смежности графа]]&lt;br /&gt;
* [[Связь степени матрицы смежности и количества путей]]&lt;br /&gt;
* [[Матрица инцидентности графа]]&lt;br /&gt;
* [[Циклическое пространство графа]]&lt;br /&gt;
* [[Фундаментальные циклы графа]]&lt;br /&gt;
* [[Дерево, эквивалентные определения]]&lt;br /&gt;
* [[Дополнительный, самодополнительный граф]]&lt;br /&gt;
&lt;br /&gt;
== Связность в графах ==&lt;br /&gt;
* [[Отношение связности, компоненты связности]]&lt;br /&gt;
* [[Отношение реберной двусвязности]]&lt;br /&gt;
* [[Отношение вершинной двусвязности]]&lt;br /&gt;
* [[Граф компонент реберной двусвязности]]&lt;br /&gt;
* [[Граф блоков-точек сочленения]]&lt;br /&gt;
* [[Точка сочленения, эквивалентные определения]]&lt;br /&gt;
* [[Мост, эквивалентные определения]]&lt;br /&gt;
* [[k-связность]]&lt;br /&gt;
* [[Теорема Менгера]]&lt;br /&gt;
* [[Теорема Менгера, альтернативное доказательство]]&lt;br /&gt;
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]&lt;br /&gt;
&lt;br /&gt;
== Остовные деревья ==&lt;br /&gt;
* [[Матрица Кирхгофа]]&lt;br /&gt;
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]&lt;br /&gt;
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]&lt;br /&gt;
* [[Количество помеченных деревьев]]&lt;br /&gt;
* [[Коды Прюфера]]&lt;br /&gt;
&lt;br /&gt;
== Обходы графов ==&lt;br /&gt;
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]&lt;br /&gt;
* [[Покрытие ребер графа путями]]&lt;br /&gt;
* [[Алгоритм построения Эйлерова цикла]]&lt;br /&gt;
* [[Произвольно вычерчиваемые из заданной вершины графы]]&lt;br /&gt;
* [[Гамильтоновы графы]]&lt;br /&gt;
* [[Теорема Хватала]]&lt;br /&gt;
* [[Теорема Дирака]]&lt;br /&gt;
* [[Теорема Оре]]&lt;br /&gt;
* [[Турниры]]&lt;br /&gt;
* [[Теорема Редеи-Камиона]]&lt;br /&gt;
&lt;br /&gt;
== Укладки графов ==&lt;br /&gt;
* [[Укладка графа на плоскости]]&lt;br /&gt;
* [[Формула Эйлера]]&lt;br /&gt;
* [[Непланарность K5 и K3,3|Непланарность &amp;lt;tex&amp;gt;K_5&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K_{3,3}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Укладка дерева]]&lt;br /&gt;
* [[Укладка графа с планарными компонентами реберной двусвязности]]&lt;br /&gt;
* [[Укладка графа с планарными компонентами вершинной двусвязности]]&lt;br /&gt;
* [[Теорема Понтрягина-Куратовского]]&lt;br /&gt;
* [[Двойственный граф планарного графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраски графов ==&lt;br /&gt;
* [[Раскраска графа]]&lt;br /&gt;
* [[Двудольные графы и раскраска в 2 цвета]]&lt;br /&gt;
* [[Хроматический многочлен]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен полного графа|Хроматический многочлен полного графа]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен пустого графа|Хроматический многочлен пустого графа]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен дерева|Хроматический многочлен дерева]]&lt;br /&gt;
** [[Хроматический многочлен#Рекуррентные формулы для хроматических многочленов|Рекуррентные формулы для хроматических многочленов]]&lt;br /&gt;
** [[Хроматический многочлен#Коэффициенты хроматического многочлена|Коэффициенты хроматического многочлена: старший, второй коэффициенты, знакопеременность]]&lt;br /&gt;
* [[Формула Зыкова]]&lt;br /&gt;
* [[Формула Уитни]]&lt;br /&gt;
* [[Теорема Брукса]]&lt;br /&gt;
* [[Верхние и нижние оценки хроматического числа]]&lt;br /&gt;
&lt;br /&gt;
== Обход в глубину ==&lt;br /&gt;
* [[Обход в глубину, цвета вершин]]&lt;br /&gt;
* [[Лемма о белых путях]]&lt;br /&gt;
* [[Использование обхода в глубину для проверки связности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска цикла в ориентированном графе]]&lt;br /&gt;
* [[Использование обхода в глубину для топологической сортировки]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска компонент сильной связности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска точек сочленения]]&lt;br /&gt;
* [[Построение компонент вершинной двусвязности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска мостов]]&lt;br /&gt;
* [[Построение компонент реберной двусвязности]]&lt;br /&gt;
&lt;br /&gt;
== Кратчайшие пути в графах ==&lt;br /&gt;
* [[Обход в ширину]]&lt;br /&gt;
* [[Алгоритм Форда-Беллмана]]&lt;br /&gt;
* [[Алгоритм Дейкстры]]&lt;br /&gt;
* [[Алгоритм Флойда]]&lt;br /&gt;
* [[Алгоритм A*]]&lt;br /&gt;
* [[Алгоритм Джонсона]]&lt;br /&gt;
&lt;br /&gt;
== Построение остовных деревьев ==&lt;br /&gt;
* [[Лемма о безопасном ребре]]&lt;br /&gt;
* [[Алгоритм Прима]]&lt;br /&gt;
* [[Алгоритм Краскала]]&lt;br /&gt;
* [[Алгоритм Борувки]]&lt;br /&gt;
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]&lt;br /&gt;
* [[Алгоритм двух китайцев]]&lt;br /&gt;
&lt;br /&gt;
== Задача о паросочетании ==&lt;br /&gt;
* [[Теорема о максимальном паросочетании и дополняющих цепях]]&lt;br /&gt;
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]&lt;br /&gt;
* [[Алгоритм Куна для поиска максимального паросочетания]]&lt;br /&gt;
* [[Теорема Холла]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
* [[Связь вершинного покрытия и независимого множества]]&lt;br /&gt;
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]&lt;br /&gt;
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]&lt;br /&gt;
&lt;br /&gt;
== Задача о максимальном потоке ==&lt;br /&gt;
* [[Определение сети, потока]]&lt;br /&gt;
* [[Разрез, лемма о потоке через разрез]]&lt;br /&gt;
* [[Дополняющая сеть, дополняющий путь]]&lt;br /&gt;
* [[Лемма о сложении потоков]]&lt;br /&gt;
* [[Теорема Форда-Фалкерсона]]&lt;br /&gt;
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]&lt;br /&gt;
* [[Алоритм Эдмондса-Карпа]]&lt;br /&gt;
* [[Алгоритм масштабирования потока]]&lt;br /&gt;
* [[Блокирующий поток]]&lt;br /&gt;
* [[Схема алгоритма Диница]]&lt;br /&gt;
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]&lt;br /&gt;
* [[Алгоритм поиска блокирующего потока в ациклической сети]]&lt;br /&gt;
* [[Метод проталкивания предпотока]]&lt;br /&gt;
* [[Алгоритм &amp;quot;поднять-в-начало&amp;quot;]]&lt;br /&gt;
* [[Теорема о декомпозиции]]&lt;br /&gt;
* [[Теорема о декомпозиционном барьере]]&lt;br /&gt;
* [[Циркуляция потока]]&lt;br /&gt;
&lt;br /&gt;
== Задача о потоке минимальной стоимости ==&lt;br /&gt;
* [[Поток минимальной стоимости]]&lt;br /&gt;
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]&lt;br /&gt;
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]&lt;br /&gt;
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]&lt;br /&gt;
* [[Венгерский алгоритм решения задачи о назначениях]]&lt;br /&gt;
&lt;br /&gt;
= Четвертый семестр =&lt;br /&gt;
&lt;br /&gt;
== Основные определения. Простые комбинаторные свойства слов ==&lt;br /&gt;
* [[Основные определения, связанные со строками]]&lt;br /&gt;
* [[Период и бордер, их связь]]&lt;br /&gt;
* [[Слово Фибоначчи]]&lt;br /&gt;
* [[Слово Туэ-Морса]]&lt;br /&gt;
&lt;br /&gt;
== Поиск подстроки в строке ==&lt;br /&gt;
* [[Наивный алгоритм поиска подстроки в строке]]&lt;br /&gt;
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]&lt;br /&gt;
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]&lt;br /&gt;
* [[Префикс-функция]]&lt;br /&gt;
* [[Алгоритм Кнута-Морриса-Пратта]]&lt;br /&gt;
* [[Z-функция]]&lt;br /&gt;
* [[Автомат для поиска образца в тексте]]&lt;br /&gt;
* [[Бор]]&lt;br /&gt;
* [[Алгоритм Ахо-Корасик]]&lt;br /&gt;
&lt;br /&gt;
== Суффиксное дерево ==&lt;br /&gt;
* [[Суффиксный бор]]&lt;br /&gt;
* [[Сжатое суффиксное дерево]]&lt;br /&gt;
* [[Алгоритм Укконена]]&lt;br /&gt;
&lt;br /&gt;
== Суффиксный массив ==&lt;br /&gt;
* [[Суффиксный массив]]&lt;br /&gt;
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]&lt;br /&gt;
* [[Алгоритм Касаи и др.]]&lt;br /&gt;
* [[Алгоритм Карккайнена-Сандерса]]&lt;br /&gt;
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]&lt;br /&gt;
&lt;br /&gt;
== Задача о наименьшем общем предке ==&lt;br /&gt;
* [[Метод двоичного подъема]]&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Решение RMQ с помощью разреженной таблицы]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)&lt;br /&gt;
* [[Алгоритм Шибера-Вишкина]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA]]&lt;br /&gt;
&lt;br /&gt;
== Матроиды ==&lt;br /&gt;
* [[Определение матроида]]&lt;br /&gt;
* [[Примеры матроидов]]&lt;br /&gt;
* [[Прямая сумма матроидов]]&lt;br /&gt;
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]&lt;br /&gt;
* [[Жадный алгоритм поиска базы минимального веса]]&lt;br /&gt;
* [[Теорема о базах]]&lt;br /&gt;
* [[Аксиоматизация матроида базами]]&lt;br /&gt;
* [[Теорема о циклах]]&lt;br /&gt;
* [[Аксиоматизация матроида циклами]]&lt;br /&gt;
* [[Ранговая функция, полумодулярность]]&lt;br /&gt;
* [[Двойственный матроид]]&lt;br /&gt;
* [[Оператор замыкания для матроидов]]&lt;br /&gt;
=== Пересечение матроидов ===&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Лемма о паросочетании в графе замен]]&lt;br /&gt;
* [[Лемма о единственном паросочетании в графе замен]]&lt;br /&gt;
* [[Граф замен для двух матроидов]]&lt;br /&gt;
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
* [[Теорема Эдмондса-Лоулера]]&lt;br /&gt;
=== Объединение матроидов ===&lt;br /&gt;
* [[Объединение матроидов, проверка множества на независимость]]&lt;br /&gt;
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]&lt;br /&gt;
* [[Алгоритм построения базы в объединении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Теория расписаний ==&lt;br /&gt;
* [[Классификация задач]]&lt;br /&gt;
* [[Методы решения задач теории расписаний]]&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[1precpmtnrifmax|&amp;lt;tex&amp;gt;1 \mid prec, pmtn, r_i \mid f_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt;Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnriLmax|&amp;lt;tex&amp;gt;Q \mid pmtn, r_{i} \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P2precpi1Lmax|&amp;lt;tex&amp;gt;P2 \mid prec, p_i = 1 \mid L_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[R2Cmax|&amp;lt;tex&amp;gt;R2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[O2Cmax|&amp;lt;tex&amp;gt;O2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[PpmtnriLmax|&amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt;O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Fpij1sumwu|&amp;lt;tex&amp;gt;F \mid p_{ij} = 1 \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripi1sumwc|&amp;lt;tex&amp;gt;1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ridipi1|&amp;lt;tex&amp;gt;1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc | &amp;lt;tex&amp;gt;1 \mid outtree \mid \sum w_i C_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt;1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QSumCi|&amp;lt;tex&amp;gt;Q\mid\mid\sum{C_i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2pij1Lmax| &amp;lt;tex&amp;gt;J2\mid p_{ij} = 1\mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P1sumu|&amp;lt;tex&amp;gt;1 \mid \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=29712</id>
		<title>Верхние и нижние оценки хроматического числа</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=29712"/>
				<updated>2013-01-14T00:32:25Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Верхняя оценка длиной максимального нечетного цикла  ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = оценка хроматического числа длиной максимального нечётного цикла&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - длина максимального простого цикла графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta \ge 3&amp;lt;/tex&amp;gt;. Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Опишем на графе следующий алгоритм раскраски:&lt;br /&gt;
*Из произвольной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; запусти алгоритм поиска в глубину. Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} дерево обхода глубина графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с корнем в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Произвольную вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, покрасим в цвет &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \mod &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\Delta + 1)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt;{{---}} расстояние между вершинами &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в графe &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем от противного, что после выполнения описанного алгоритма граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; будет правильно раскрашен.&lt;br /&gt;
Предположим, что после выполнения алгоритма покраски в графе существует ребро, соединяющее вершины &amp;lt;tex&amp;gt; a,b &amp;lt;/tex&amp;gt; одного цвета.Пусть &amp;lt;tex&amp;gt;color(v)&amp;lt;/tex&amp;gt; {{---}} цвет вершины после выполнения алгоритма раскраски.Заметим, что для произвольной вершины графа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;dist(v,p) = color(p) + n(\Delta + 1)&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;n \ge 0 &amp;lt;/tex&amp;gt;.Тогда, &amp;lt;tex&amp;gt;dist(v,a) - dist(v,b) = k(\Delta + 1)&amp;lt;/tex&amp;gt;.Поскольку в дереве dfs между вершинами находящимися на одинаковом расстоянии от корня нет перекрестных ребер, то &amp;lt;tex&amp;gt; k \ge 1&amp;lt;/tex&amp;gt;. То есть, вершины &amp;lt;tex&amp;gt;a,b&amp;lt;/tex&amp;gt; лежат на простом цикле длины по крайней мере &amp;lt;tex&amp;gt;\Delta + 2&amp;lt;/tex&amp;gt;. Получается противоречие с условием потому, что длина максимального простого цикла получается больше чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; после выполнения алгоритма раскраски  нет вершин одного цвета соединенных ребром и при этом каждая вершина покрашена в один из &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; правильно раскрашен в &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt; цвет, следовательно &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
==Нижняя оценка числом внутренней устойчивости ==&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
Подмножество &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вершин графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  называется '''внутренне устойчивым''', если любые две вершины из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не смежны в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
'''Число внутренней устойчивости''' &amp;lt;tex&amp;gt;\alpha(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;max \{|S|:S \in V&amp;lt;/tex&amp;gt; и S внутренне устойчиво в G&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами .Тогда, &amp;lt;tex&amp;gt;n/\alpha \le \chi(G)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.Каждое из &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; {{---}} внутренне устойчивое множество (поскольку вершины множества покрашены в один цвет при правильной покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, следовательно, они попарно не смежны внутри множества ).&lt;br /&gt;
Заметим, что для произвольного &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|V_i| \le \alpha&amp;lt;/tex&amp;gt; (т.к &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; внутренне устойчиво). То есть, &amp;lt;tex&amp;gt;\sum\limits^{\chi}_{i = 1}|V_i| = n \le \chi  \alpha &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;n / \alpha \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Верхняя оценка количеством ребер ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = верхняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с  &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами.Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Заметим, что между любыми двумя различными множествами существует хотя бы одно ребро (в противном случаи эти множества можно было бы покрасить в один цвет).&lt;br /&gt;
Тогда, &amp;lt;tex&amp;gt;\frac{1}{2}\chi(\chi-1) \le m \Rightarrow (\chi - \frac{1}{2})^2 \le 2m + \frac{1}{4} \Rightarrow \chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Нижняя оценка количеством ребер и количеством вершин ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка Геллера&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами .Тогда,    &amp;lt;tex&amp;gt;\frac{n^2}{n^2 - 2m} \le \chi(G) &amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующие цвета при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;tex&amp;gt;m \le \frac{1}{2}n(n - 1) - \frac{1}{2}\sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1) \Rightarrow \frac{n^2}{n^2 - 2m} \le \frac{n^2}{n^2 -n(n - 1) + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{n + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} =  \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i| + \sum\limits^{\chi}_{i = 1}|V_i|(|V_i| - 1)} = \frac{n^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} = \frac{(\sum\limits^{\chi}_{i = 1}|V_i|)^2}{\sum\limits^{\chi}_{i = 1}|V_i|^2} \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Полезные материалы ==&lt;br /&gt;
* [http://www.ucdenver.edu/academics/colleges/CLAS/Departments/math/students/alumni/Documents/Student%20Theses/Mitchell_MSThesis.pdf Множество разных оценок для хроматических чисел]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem &lt;br /&gt;
Сравнение квадрата суммы и суммы квадратов действительных чисел]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=29704</id>
		<title>Верхние и нижние оценки хроматического числа</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%BD%D0%B8%D0%B6%D0%BD%D0%B8%D0%B5_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B8_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0&amp;diff=29704"/>
				<updated>2013-01-13T23:48:30Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: Новая страница: «== Верхняя оценка длиной максимального нечетного цикла  == {{Лемма  |about = оценка хроматичес...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Верхняя оценка длиной максимального нечетного цикла  ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = оценка хроматического числа длиной максимального нечётного цикла&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - длина максимального простого цикла графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta \ge 3&amp;lt;/tex&amp;gt;. Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Опишем на графе следующий алгоритм раскраски:&lt;br /&gt;
*Из произвольной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; запусти алгоритм поиска в глубину. Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} дерево обхода глубина графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с корнем в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Произвольную вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, покрасим в цвет &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \mod &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\Delta + 1)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt;{{---}} расстояние между вершинами &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в графe &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем от противного, что после выполнения описанного алгоритма граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; будет правильно раскрашен.&lt;br /&gt;
Предположим, что после выполнения алгоритма покраски в графе существует ребро, соединяющее вершины &amp;lt;tex&amp;gt; a,b &amp;lt;/tex&amp;gt; одного цвета.Пусть &amp;lt;tex&amp;gt;color(v)&amp;lt;/tex&amp;gt; {{---}} цвет вершины после выполнения алгоритма раскраски.Заметим, что для произвольной вершины графа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;dist(v,p) = color(p) + n(\Delta + 1)&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;n \ge 0 &amp;lt;/tex&amp;gt;.Тогда, &amp;lt;tex&amp;gt;dist(v,a) - dist(v,b) = k(\Delta + 1)&amp;lt;/tex&amp;gt;.Поскольку в дереве dfs между вершинами находящимися на одинаковом расстоянии от корня нет перекрестных ребер, то &amp;lt;tex&amp;gt; k \ge 1&amp;lt;/tex&amp;gt;. То есть, вершины &amp;lt;tex&amp;gt;a,b&amp;lt;/tex&amp;gt; лежат на простом цикле длины по крайней мере &amp;lt;tex&amp;gt;\Delta + 2&amp;lt;/tex&amp;gt;. Получается противоречие с условием потому, что длина максимального простого цикла получается больше чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; после выполнения алгоритма раскраски  нет вершин одного цвета соединенных ребром и при этом каждая вершина покрашена в один из &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; правильно раскрашен в &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt; цвет, следовательно &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
==Оценка связанная с внутренним устойчивым множеством ==&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
Подмножество &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вершин графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  называется '''внутренне устойчивым''', если любые две вершины из &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не смежны в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
 	&lt;br /&gt;
|definition=&lt;br /&gt;
'''Число внутренней устойчивости''' &amp;lt;tex&amp;gt;\alpha(G)&amp;lt;/tex&amp;gt; графа &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;max \{|S|:S \in V&amp;lt;/tex&amp;gt; и S внутренне устойчиво в G&amp;lt;tex&amp;gt;\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = нижняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; вершинами и &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами.Тогда, &amp;lt;tex&amp;gt;n/\alpha \le \chi(G)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующей цвет при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;.Каждое из &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; {{---}} внутренне устойчивое множество (поскольку вершины множества покрашены в один цвет при правильной покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, следовательно они не смежны ).&lt;br /&gt;
Заметим, что для произвольного &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;|V_i| \le \alpha&amp;lt;/tex&amp;gt; (т.к &amp;lt;tex&amp;gt;V_i&amp;lt;/tex&amp;gt; внутренне устойчиво). То есть, &amp;lt;tex&amp;gt;\sum\limits^{\chi}_{i = 1}|V_i| = n \le \chi  \alpha &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt;n / \alpha \le \chi&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
== Верхняя оценка количеством ребром ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|about = верхняя оценка&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф с  &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; ребрами.Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Пусть, &amp;lt;tex&amp;gt;V_1,V_2...V_\chi&amp;lt;/tex&amp;gt; множеств вершин окрашенных в соответствующей цвет при правильно покраски графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Заметим, что между любыми двумя такими различными множествами существует хотя бы одно ребро (в противном случаи эти множества можно было бы покрасить в один цвет).&lt;br /&gt;
Тогда, &amp;lt;tex&amp;gt;\frac{1}{2}\chi(\chi-1) \le m \Rightarrow (\chi - \frac{1}{2})^2 \le 2m + \frac{1}{4} \Rightarrow \chi(G) \le \frac{1}{2} +\sqrt{2m + \frac{1}{4}} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://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&amp;diff=29640</id>
		<title>Дискретная математика, алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://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&amp;diff=29640"/>
				<updated>2013-01-13T20:03:03Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Раскраски графов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
&lt;br /&gt;
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].&lt;br /&gt;
&lt;br /&gt;
= Первый семестр =&lt;br /&gt;
&lt;br /&gt;
== Отношения ==&lt;br /&gt;
*[[Определение отношения]]&lt;br /&gt;
*[[Степень отношений]]&lt;br /&gt;
*[[Композиция отношений|Композиция отношений. Обратное отношение]]&lt;br /&gt;
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]&lt;br /&gt;
*[[Симметричное отношение]]&lt;br /&gt;
*[[Антисимметричное отношение]]&lt;br /&gt;
*[[Транзитивное отношение]]&lt;br /&gt;
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]&lt;br /&gt;
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]&lt;br /&gt;
*[[Транзитивный остов]]&lt;br /&gt;
*[[Отношение порядка]]&lt;br /&gt;
*[[Отношение эквивалентности]]&lt;br /&gt;
&lt;br /&gt;
== Булевы функции ==&lt;br /&gt;
*[[Определение булевой функции]]&lt;br /&gt;
*[[Суперпозиции]]&lt;br /&gt;
*[[ДНФ]]&lt;br /&gt;
*[[КНФ]]&lt;br /&gt;
*[[Полином Жегалкина]]&lt;br /&gt;
*[[Полные системы функций. Теорема Поста о полной системе функций]]&lt;br /&gt;
*[[Сокращенная и минимальная ДНФ]]&lt;br /&gt;
*[[Минимизация ДНФ с помощью покрытий гиперкуба и карт Карно]]&lt;br /&gt;
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]&lt;br /&gt;
*[[Преобразование Мёбиуса для получения коэффициентов полинома Жегалкина]]&lt;br /&gt;
*[[Представление функции класса DM с помощью медианы]]&lt;br /&gt;
*[[Пороговая функция]]&lt;br /&gt;
&lt;br /&gt;
== Схемы из функциональных элементов ==&lt;br /&gt;
*[[Реализация булевой функции схемой из функциональных элементов]]&lt;br /&gt;
*[[Cумматор]]&lt;br /&gt;
*[[Каскадный сумматор]]&lt;br /&gt;
*[[Двоичный каскадный сумматор]]&lt;br /&gt;
*[[Реализация вычитания сумматором]]&lt;br /&gt;
*[[Матричный умножитель]]&lt;br /&gt;
*[[Дерево Уоллеса]]&lt;br /&gt;
&lt;br /&gt;
== Представление информации ==&lt;br /&gt;
*[[Кодирование информации]]&lt;br /&gt;
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
*[[Представление вещественных чисел]]&lt;br /&gt;
*[[Представление символов, таблицы кодировок]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы сжатия ==&lt;br /&gt;
*[[Алгоритм Хаффмана]]&lt;br /&gt;
*[[Алгоритм LZW]]&lt;br /&gt;
*[[Алгоритмы LZ77 и LZ78]]&lt;br /&gt;
*[[Преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Обратное преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Преобразование MTF]]&lt;br /&gt;
*[[Расстояние Хэмминга]]&lt;br /&gt;
*[[Избыточное кодирование, код Хэмминга]]&lt;br /&gt;
*[[Неравенство Крафта]]&lt;br /&gt;
*[[Неравенство Макмиллана]]&lt;br /&gt;
*[[Алгоритм Ху-Таккера]]&lt;br /&gt;
&lt;br /&gt;
== Комбинаторика ==&lt;br /&gt;
*[[Комбинаторные объекты]]&lt;br /&gt;
*[[Лексикографический порядок]]&lt;br /&gt;
*[[Формула включения-исключения]]&lt;br /&gt;
*[[Генерация комбинаторных объектов в лексикографическом порядке]]&lt;br /&gt;
*[[Получение номера по объекту]]&lt;br /&gt;
*[[Получение объекта по номеру]]&lt;br /&gt;
*[[Получение следующего объекта]]&lt;br /&gt;
*[[Коды Грея]]&lt;br /&gt;
*[[Коды Грея для перестановок]]&lt;br /&gt;
*[[Коды антигрея]]&lt;br /&gt;
*[[Цепные коды]]&lt;br /&gt;
*[[Правильные скобочные последовательности]]&lt;br /&gt;
*[[Действие перестановки на набор из элементов, представление в виде циклов]]&lt;br /&gt;
*[[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]&lt;br /&gt;
*[[Методы генерации случайного сочетания]]&lt;br /&gt;
*[[Таблица инверсий]]&lt;br /&gt;
*[[Умножение перестановок, обратная перестановка, группа перестановок]]&lt;br /&gt;
*[[Теорема Кэли]]&lt;br /&gt;
*[[Матричное представление перестановок]]&lt;br /&gt;
*[[Задача о минимуме/максимуме скалярного произведения]]&lt;br /&gt;
*[[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]&lt;br /&gt;
*[[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]&lt;br /&gt;
*[[Производящая функция]]&lt;br /&gt;
*[[Задача об ожерельях]]&lt;br /&gt;
&lt;br /&gt;
== [[Динамическое программирование]] ==&lt;br /&gt;
*[[Кратчайший путь в ациклическом графе]]&lt;br /&gt;
*[[Задача о расстановке знаков в выражении]]&lt;br /&gt;
*[[Задача о наибольшей общей подпоследовательности]]&lt;br /&gt;
*[[Задача о порядке перемножения матриц]]&lt;br /&gt;
*[[Задача о наибольшей возрастающей подпоследовательности]]&lt;br /&gt;
*[[Задача о паросочетании максимального веса в дереве, амортизированные оценки для ДП на дереве]]&lt;br /&gt;
*[[Метод четырех русских для умножения матриц]]&lt;br /&gt;
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]&lt;br /&gt;
*[[Задача коммивояжера, ДП по подмножествам]]&lt;br /&gt;
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]&lt;br /&gt;
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]&lt;br /&gt;
*[[Задача о расстоянии Дамерау-Левенштейна]]&lt;br /&gt;
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]&lt;br /&gt;
*[[Задача о наибольшей подпоследовательности-палиндроме]]&lt;br /&gt;
*[[Meet-in-the-middle]]&lt;br /&gt;
*[[Динамическое программирование по профилю]]&lt;br /&gt;
*[[Задача о рюкзаке]]&lt;br /&gt;
&lt;br /&gt;
== Теория вероятностей ==&lt;br /&gt;
*[[Вероятностное пространство, элементарный исход, событие]]&lt;br /&gt;
*[[Независимые события]]&lt;br /&gt;
*[[Условная вероятность]]&lt;br /&gt;
*[[Формула Байеса]]&lt;br /&gt;
*[[Формула полной вероятности]]&lt;br /&gt;
*[[Дискретная случайная величина]]&lt;br /&gt;
*[[Независимые случайные величины]]&lt;br /&gt;
*[[Математическое ожидание случайной величины]]&lt;br /&gt;
*[[Дисперсия случайной величины]]&lt;br /&gt;
*[[Ковариация случайных величин]]&lt;br /&gt;
*[[Корреляция случайных величин]]&lt;br /&gt;
*[[Энтропия случайного источника]]&lt;br /&gt;
*[[Симуляция одним распределением другого]]&lt;br /&gt;
*[[Арифметическое кодирование]]&lt;br /&gt;
*[[Парадоксы теории вероятностей]]&lt;br /&gt;
*[[Схема Бернулли]]&lt;br /&gt;
&lt;br /&gt;
== Марковские цепи ==&lt;br /&gt;
&lt;br /&gt;
* [[Марковская цепь]]&lt;br /&gt;
* [[Теорема о поглощении]]&lt;br /&gt;
* [[Фундаментальная матрица]]&lt;br /&gt;
* [[Математическое ожидание времени поглощения]]&lt;br /&gt;
* [[Расчет вероятности поглощения в состоянии]]&lt;br /&gt;
* [[Эргодическая марковская цепь]]&lt;br /&gt;
* [[Регулярная марковская цепь]]&lt;br /&gt;
* [[Примеры использования Марковских цепей]]&lt;br /&gt;
&lt;br /&gt;
= Второй семестр =&lt;br /&gt;
&lt;br /&gt;
== Амортизационный анализ ==&lt;br /&gt;
* [[Амортизационный анализ]]&lt;br /&gt;
* [[Саморасширяющийся массив]]&lt;br /&gt;
* [[Массив с увеличением/уменьшением размера]]&lt;br /&gt;
* [[Список]]&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Очередь]]&lt;br /&gt;
* [[Персистентный стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Приоритетные очереди ==&lt;br /&gt;
&lt;br /&gt;
* [[Двоичная куча]]&lt;br /&gt;
* [[Биномиальная куча]]&lt;br /&gt;
* [[Фибоначчиева куча]]&lt;br /&gt;
&lt;br /&gt;
== Система непересекающихся множеств ==&lt;br /&gt;
* [[СНМ (наивные реализации) | Наивные реализации]]&lt;br /&gt;
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]&lt;br /&gt;
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]&lt;br /&gt;
&lt;br /&gt;
== Поисковые структуры данных ==&lt;br /&gt;
* [[Упорядоченное множество]]&lt;br /&gt;
* [[Дерево поиска, наивная реализация]]&lt;br /&gt;
* [[АВЛ-дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
* [[B-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[Декартово дерево]]&lt;br /&gt;
* [[Декартово дерево по неявному ключу]]&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Рандомизированное бинарное дерево поиска]]&lt;br /&gt;
* [[Дерево ван Эмде Боаса]]&lt;br /&gt;
* [[Список с пропусками]]&lt;br /&gt;
&lt;br /&gt;
== Дерево отрезков ==&lt;br /&gt;
&lt;br /&gt;
* [[Статистики на отрезках. Корневая эвристика]]&lt;br /&gt;
* [[Дерево отрезков. Построение]]&lt;br /&gt;
* [[Реализация запроса в дереве отрезков сверху]]&lt;br /&gt;
* [[Реализация запроса в дереве отрезков снизу]]&lt;br /&gt;
* [[Несогласованные поддеревья. Реализация массового обновления]]&lt;br /&gt;
* [[Многомерное дерево отрезков]]&lt;br /&gt;
* [[Сжатое многомерное дерево отрезков]]&lt;br /&gt;
&lt;br /&gt;
== Дерево Фенвика ==&lt;br /&gt;
* [[Дерево Фенвика]]&lt;br /&gt;
* [[Встречное дерево Фенвика]]&lt;br /&gt;
* [[Дерево Фенвика для некоммутативных операций]]&lt;br /&gt;
* [[Многомерное дерево Фенвика]]&lt;br /&gt;
&lt;br /&gt;
== Хеширование ==&lt;br /&gt;
* [[Хеш-таблица]]&lt;br /&gt;
* [[Разрешение коллизий]]&lt;br /&gt;
* [[Хеширование кукушки]]&lt;br /&gt;
* [[Идеальное хеширование]]&lt;br /&gt;
* [[Перехеширование. Амортизационный анализ]]&lt;br /&gt;
* [[Фильтр Блума]]&lt;br /&gt;
* [[Универсальное семейство хеш-функций]]&lt;br /&gt;
&lt;br /&gt;
== [[Сортировка]] ==&lt;br /&gt;
* [[Сортировка выбором]]&lt;br /&gt;
* [[Сортировка пузырьком]]&lt;br /&gt;
* [[Сортировка вставками]]&lt;br /&gt;
* [[Сортировка кучей]]&lt;br /&gt;
* [[Быстрая сортировка]]&lt;br /&gt;
* [[Сортировка слиянием]]&lt;br /&gt;
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]&lt;br /&gt;
* [[Теорема о нижней оценке для сортировки сравнениями]]&lt;br /&gt;
* [[Сортировка подсчетом]]&lt;br /&gt;
* [[Сортировка подсчетом сложных объектов]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Карманная сортировка]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики за линейное время]]&lt;br /&gt;
* [[Сортировка Хана]]&lt;br /&gt;
&lt;br /&gt;
== Сортирующие сети ==&lt;br /&gt;
* [[Сортирующие сети]]&lt;br /&gt;
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]&lt;br /&gt;
* [[Сортирующие сети для квадратичных сортировок]]&lt;br /&gt;
* [[Сеть Бетчера]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы поиска ==&lt;br /&gt;
* [[Целочисленный двоичный поиск]]&lt;br /&gt;
* [[Вещественный двоичный поиск]]&lt;br /&gt;
* [[Троичный поиск]]&lt;br /&gt;
* [[Поиск с помощью золотого сечения]]&lt;br /&gt;
* [[Интерполяционный поиск]]&lt;br /&gt;
&lt;br /&gt;
== Связь между структурами данных ==&lt;br /&gt;
* [[Связь между структурами данных]]&lt;br /&gt;
&lt;br /&gt;
= Третий семестр =&lt;br /&gt;
&lt;br /&gt;
== Основные определения теории графов ==&lt;br /&gt;
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]&lt;br /&gt;
* [[Лемма о рукопожатиях]]&lt;br /&gt;
* [[Теорема о существовании простого пути в случае существования пути]]&lt;br /&gt;
* [[Теорема о существовании простого цикла в случае существования цикла]]&lt;br /&gt;
* [[Матрица смежности графа]]&lt;br /&gt;
* [[Связь степени матрицы смежности и количества путей]]&lt;br /&gt;
* [[Матрица инцидентности графа]]&lt;br /&gt;
* [[Циклическое пространство графа]]&lt;br /&gt;
* [[Фундаментальные циклы графа]]&lt;br /&gt;
* [[Дерево, эквивалентные определения]]&lt;br /&gt;
* [[Дополнительный, самодополнительный граф]]&lt;br /&gt;
&lt;br /&gt;
== Связность в графах ==&lt;br /&gt;
* [[Отношение связности, компоненты связности]]&lt;br /&gt;
* [[Отношение реберной двусвязности]]&lt;br /&gt;
* [[Отношение вершинной двусвязности]]&lt;br /&gt;
* [[Граф компонент реберной двусвязности]]&lt;br /&gt;
* [[Граф блоков-точек сочленения]]&lt;br /&gt;
* [[Точка сочленения, эквивалентные определения]]&lt;br /&gt;
* [[Мост, эквивалентные определения]]&lt;br /&gt;
* [[k-связность]]&lt;br /&gt;
* [[Теорема Менгера]]&lt;br /&gt;
* [[Теорема Менгера, альтернативное доказательство]]&lt;br /&gt;
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]&lt;br /&gt;
&lt;br /&gt;
== Остовные деревья ==&lt;br /&gt;
* [[Матрица Кирхгофа]]&lt;br /&gt;
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]&lt;br /&gt;
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]&lt;br /&gt;
* [[Количество помеченных деревьев]]&lt;br /&gt;
* [[Коды Прюфера]]&lt;br /&gt;
&lt;br /&gt;
== Обходы графов ==&lt;br /&gt;
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]&lt;br /&gt;
* [[Покрытие ребер графа путями]]&lt;br /&gt;
* [[Алгоритм построения Эйлерова цикла]]&lt;br /&gt;
* [[Произвольно вычерчиваемые из заданной вершины графы]]&lt;br /&gt;
* [[Гамильтоновы графы]]&lt;br /&gt;
* [[Теорема Хватала]]&lt;br /&gt;
* [[Теорема Дирака]]&lt;br /&gt;
* [[Теорема Оре]]&lt;br /&gt;
* [[Турниры]]&lt;br /&gt;
* [[Теорема Редеи-Камиона]]&lt;br /&gt;
&lt;br /&gt;
== Укладки графов ==&lt;br /&gt;
* [[Укладка графа на плоскости]]&lt;br /&gt;
* [[Формула Эйлера]]&lt;br /&gt;
* [[Непланарность K5 и K3,3|Непланарность &amp;lt;tex&amp;gt;K_5&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K_{3,3}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Укладка дерева]]&lt;br /&gt;
* [[Укладка графа с планарными компонентами реберной двусвязности]]&lt;br /&gt;
* [[Укладка графа с планарными компонентами вершинной двусвязности]]&lt;br /&gt;
* [[Теорема Понтрягина-Куратовского]]&lt;br /&gt;
* [[Двойственный граф планарного графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраски графов ==&lt;br /&gt;
* [[Раскраска графа]]&lt;br /&gt;
* [[Двудольные графы и раскраска в 2 цвета]]&lt;br /&gt;
* [[Хроматический многочлен]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен полного графа|Хроматический многочлен полного графа]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен пустого графа|Хроматический многочлен пустого графа]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен дерева|Хроматический многочлен дерева]]&lt;br /&gt;
** [[Хроматический многочлен#Рекуррентные формулы для хроматических многочленов|Рекуррентные формулы для хроматических многочленов]]&lt;br /&gt;
** [[Хроматический многочлен#Коэффициенты хроматического многочлена|Коэффициенты хроматического многочлена: старший, второй коэффициенты, знакопеременность]]&lt;br /&gt;
* [[Формула Зыкова]]&lt;br /&gt;
* [[Формула Уитни]]&lt;br /&gt;
* [[Теорема Брукса]]&lt;br /&gt;
* [[Верхняя оценка хроматического числа длиной нечетного цикла]]&lt;br /&gt;
* [[Верхние и нижние оценки хроматического числа]]&lt;br /&gt;
&lt;br /&gt;
== Обход в глубину ==&lt;br /&gt;
* [[Обход в глубину, цвета вершин]]&lt;br /&gt;
* [[Лемма о белых путях]]&lt;br /&gt;
* [[Использование обхода в глубину для проверки связности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска цикла в ориентированном графе]]&lt;br /&gt;
* [[Использование обхода в глубину для топологической сортировки]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска компонент сильной связности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска точек сочленения]]&lt;br /&gt;
* [[Построение компонент вершинной двусвязности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска мостов]]&lt;br /&gt;
* [[Построение компонент реберной двусвязности]]&lt;br /&gt;
&lt;br /&gt;
== Кратчайшие пути в графах ==&lt;br /&gt;
* [[Обход в ширину]]&lt;br /&gt;
* [[Алгоритм Форда-Беллмана]]&lt;br /&gt;
* [[Алгоритм Дейкстры]]&lt;br /&gt;
* [[Алгоритм Флойда]]&lt;br /&gt;
* [[Алгоритм A*]]&lt;br /&gt;
* [[Алгоритм Джонсона]]&lt;br /&gt;
&lt;br /&gt;
== Построение остовных деревьев ==&lt;br /&gt;
* [[Лемма о безопасном ребре]]&lt;br /&gt;
* [[Алгоритм Прима]]&lt;br /&gt;
* [[Алгоритм Краскала]]&lt;br /&gt;
* [[Алгоритм Борувки]]&lt;br /&gt;
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]&lt;br /&gt;
* [[Алгоритм двух китайцев]]&lt;br /&gt;
&lt;br /&gt;
== Задача о паросочетании ==&lt;br /&gt;
* [[Теорема о максимальном паросочетании и дополняющих цепях]]&lt;br /&gt;
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]&lt;br /&gt;
* [[Алгоритм Куна для поиска максимального паросочетания]]&lt;br /&gt;
* [[Теорема Холла]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
* [[Связь вершинного покрытия и независимого множества]]&lt;br /&gt;
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]&lt;br /&gt;
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]&lt;br /&gt;
&lt;br /&gt;
== Задача о максимальном потоке ==&lt;br /&gt;
* [[Определение сети, потока]]&lt;br /&gt;
* [[Разрез, лемма о потоке через разрез]]&lt;br /&gt;
* [[Дополняющая сеть, дополняющий путь]]&lt;br /&gt;
* [[Лемма о сложении потоков]]&lt;br /&gt;
* [[Теорема Форда-Фалкерсона]]&lt;br /&gt;
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]&lt;br /&gt;
* [[Алоритм Эдмондса-Карпа]]&lt;br /&gt;
* [[Алгоритм масштабирования потока]]&lt;br /&gt;
* [[Блокирующий поток]]&lt;br /&gt;
* [[Схема алгоритма Диница]]&lt;br /&gt;
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]&lt;br /&gt;
* [[Алгоритм поиска блокирующего потока в ациклической сети]]&lt;br /&gt;
* [[Метод проталкивания предпотока]]&lt;br /&gt;
* [[Алгоритм &amp;quot;поднять-в-начало&amp;quot;]]&lt;br /&gt;
* [[Теорема о декомпозиции]]&lt;br /&gt;
* [[Теорема о декомпозиционном барьере]]&lt;br /&gt;
* [[Циркуляция потока]]&lt;br /&gt;
&lt;br /&gt;
== Задача о потоке минимальной стоимости ==&lt;br /&gt;
* [[Поток минимальной стоимости]]&lt;br /&gt;
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]&lt;br /&gt;
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]&lt;br /&gt;
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]&lt;br /&gt;
* [[Венгерский алгоритм решения задачи о назначениях]]&lt;br /&gt;
&lt;br /&gt;
= Четвертый семестр =&lt;br /&gt;
&lt;br /&gt;
== Основные определения. Простые комбинаторные свойства слов ==&lt;br /&gt;
* [[Основные определения, связанные со строками]]&lt;br /&gt;
* [[Период и бордер, их связь]]&lt;br /&gt;
* [[Слово Фибоначчи]]&lt;br /&gt;
* [[Слово Туэ-Морса]]&lt;br /&gt;
&lt;br /&gt;
== Поиск подстроки в строке ==&lt;br /&gt;
* [[Наивный алгоритм поиска подстроки в строке]]&lt;br /&gt;
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]&lt;br /&gt;
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]&lt;br /&gt;
* [[Префикс-функция]]&lt;br /&gt;
* [[Алгоритм Кнута-Морриса-Пратта]]&lt;br /&gt;
* [[Z-функция]]&lt;br /&gt;
* [[Автомат для поиска образца в тексте]]&lt;br /&gt;
* [[Бор]]&lt;br /&gt;
* [[Алгоритм Ахо-Корасик]]&lt;br /&gt;
&lt;br /&gt;
== Суффиксное дерево ==&lt;br /&gt;
* [[Суффиксный бор]]&lt;br /&gt;
* [[Сжатое суффиксное дерево]]&lt;br /&gt;
* [[Алгоритм Укконена]]&lt;br /&gt;
&lt;br /&gt;
== Суффиксный массив ==&lt;br /&gt;
* [[Суффиксный массив]]&lt;br /&gt;
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]&lt;br /&gt;
* [[Алгоритм Касаи и др.]]&lt;br /&gt;
* [[Алгоритм Карккайнена-Сандерса]]&lt;br /&gt;
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]&lt;br /&gt;
&lt;br /&gt;
== Задача о наименьшем общем предке ==&lt;br /&gt;
* [[Метод двоичного подъема]]&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Решение RMQ с помощью разреженной таблицы]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)&lt;br /&gt;
* [[Алгоритм Шибера-Вишкина]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA]]&lt;br /&gt;
&lt;br /&gt;
== Матроиды ==&lt;br /&gt;
* [[Определение матроида]]&lt;br /&gt;
* [[Примеры матроидов]]&lt;br /&gt;
* [[Прямая сумма матроидов]]&lt;br /&gt;
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]&lt;br /&gt;
* [[Жадный алгоритм поиска базы минимального веса]]&lt;br /&gt;
* [[Теорема о базах]]&lt;br /&gt;
* [[Аксиоматизация матроида базами]]&lt;br /&gt;
* [[Теорема о циклах]]&lt;br /&gt;
* [[Аксиоматизация матроида циклами]]&lt;br /&gt;
* [[Ранговая функция, полумодулярность]]&lt;br /&gt;
* [[Двойственный матроид]]&lt;br /&gt;
* [[Оператор замыкания для матроидов]]&lt;br /&gt;
=== Пересечение матроидов ===&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Лемма о паросочетании в графе замен]]&lt;br /&gt;
* [[Лемма о единственном паросочетании в графе замен]]&lt;br /&gt;
* [[Граф замен для двух матроидов]]&lt;br /&gt;
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
* [[Теорема Эдмондса-Лоулера]]&lt;br /&gt;
=== Объединение матроидов ===&lt;br /&gt;
* [[Объединение матроидов, проверка множества на независимость]]&lt;br /&gt;
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]&lt;br /&gt;
* [[Алгоритм построения базы в объединении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Теория расписаний ==&lt;br /&gt;
* [[Классификация задач]]&lt;br /&gt;
* [[Методы решения задач теории расписаний]]&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[1precpmtnrifmax|&amp;lt;tex&amp;gt;1 \mid prec, pmtn, r_i \mid f_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt;Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnriLmax|&amp;lt;tex&amp;gt;Q \mid pmtn, r_{i} \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P2precpi1Lmax|&amp;lt;tex&amp;gt;P2 \mid prec, p_i = 1 \mid L_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[R2Cmax|&amp;lt;tex&amp;gt;R2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[O2Cmax|&amp;lt;tex&amp;gt;O2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[PpmtnriLmax|&amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt;O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Fpij1sumwu|&amp;lt;tex&amp;gt;F \mid p_{ij} = 1 \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripi1sumwc|&amp;lt;tex&amp;gt;1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ridipi1|&amp;lt;tex&amp;gt;1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc | &amp;lt;tex&amp;gt;1 \mid outtree \mid \sum w_i C_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt;1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QSumCi|&amp;lt;tex&amp;gt;Q\mid\mid\sum{C_i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2pij1Lmax| &amp;lt;tex&amp;gt;J2\mid p_{ij} = 1\mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P1sumu|&amp;lt;tex&amp;gt;1 \mid \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://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&amp;diff=29639</id>
		<title>Дискретная математика, алгоритмы и структуры данных</title>
		<link rel="alternate" type="text/html" href="http://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&amp;diff=29639"/>
				<updated>2013-01-13T20:02:08Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Раскраски графов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
&lt;br /&gt;
Убедительная просьба читать [[Обсуждение:Дискретная_математика_и_алгоритмы | правила оформления вики-конспектов]].&lt;br /&gt;
&lt;br /&gt;
= Первый семестр =&lt;br /&gt;
&lt;br /&gt;
== Отношения ==&lt;br /&gt;
*[[Определение отношения]]&lt;br /&gt;
*[[Степень отношений]]&lt;br /&gt;
*[[Композиция отношений|Композиция отношений. Обратное отношение]]&lt;br /&gt;
*[[Рефлексивное отношение|Рефлексивное отношение. Антирефлексивное отношение.]]&lt;br /&gt;
*[[Симметричное отношение]]&lt;br /&gt;
*[[Антисимметричное отношение]]&lt;br /&gt;
*[[Транзитивное отношение]]&lt;br /&gt;
*[[Транзитивное замыкание|Транзитивное замыкание отношения]]&lt;br /&gt;
*[[Алгоритм Флойда — Уоршелла|Алгоритм Флойда-Уоршалла построения транзитивного замыкания отношения]]&lt;br /&gt;
*[[Транзитивный остов]]&lt;br /&gt;
*[[Отношение порядка]]&lt;br /&gt;
*[[Отношение эквивалентности]]&lt;br /&gt;
&lt;br /&gt;
== Булевы функции ==&lt;br /&gt;
*[[Определение булевой функции]]&lt;br /&gt;
*[[Суперпозиции]]&lt;br /&gt;
*[[ДНФ]]&lt;br /&gt;
*[[КНФ]]&lt;br /&gt;
*[[Полином Жегалкина]]&lt;br /&gt;
*[[Полные системы функций. Теорема Поста о полной системе функций]]&lt;br /&gt;
*[[Сокращенная и минимальная ДНФ]]&lt;br /&gt;
*[[Минимизация ДНФ с помощью покрытий гиперкуба и карт Карно]]&lt;br /&gt;
*[[Специальные формы КНФ|Специальные формы КНФ: КНФ в форме Хорна и КНФ в форме Крома]]&lt;br /&gt;
*[[Преобразование Мёбиуса для получения коэффициентов полинома Жегалкина]]&lt;br /&gt;
*[[Представление функции класса DM с помощью медианы]]&lt;br /&gt;
*[[Пороговая функция]]&lt;br /&gt;
&lt;br /&gt;
== Схемы из функциональных элементов ==&lt;br /&gt;
*[[Реализация булевой функции схемой из функциональных элементов]]&lt;br /&gt;
*[[Cумматор]]&lt;br /&gt;
*[[Каскадный сумматор]]&lt;br /&gt;
*[[Двоичный каскадный сумматор]]&lt;br /&gt;
*[[Реализация вычитания сумматором]]&lt;br /&gt;
*[[Матричный умножитель]]&lt;br /&gt;
*[[Дерево Уоллеса]]&lt;br /&gt;
&lt;br /&gt;
== Представление информации ==&lt;br /&gt;
*[[Кодирование информации]]&lt;br /&gt;
*[[Представление целых чисел: прямой код, код со сдвигом, дополнительный код]]&lt;br /&gt;
*[[Представление вещественных чисел]]&lt;br /&gt;
*[[Представление символов, таблицы кодировок]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы сжатия ==&lt;br /&gt;
*[[Алгоритм Хаффмана]]&lt;br /&gt;
*[[Алгоритм LZW]]&lt;br /&gt;
*[[Алгоритмы LZ77 и LZ78]]&lt;br /&gt;
*[[Преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Обратное преобразование Барроуза-Уиллера]]&lt;br /&gt;
*[[Преобразование MTF]]&lt;br /&gt;
*[[Расстояние Хэмминга]]&lt;br /&gt;
*[[Избыточное кодирование, код Хэмминга]]&lt;br /&gt;
*[[Неравенство Крафта]]&lt;br /&gt;
*[[Неравенство Макмиллана]]&lt;br /&gt;
*[[Алгоритм Ху-Таккера]]&lt;br /&gt;
&lt;br /&gt;
== Комбинаторика ==&lt;br /&gt;
*[[Комбинаторные объекты]]&lt;br /&gt;
*[[Лексикографический порядок]]&lt;br /&gt;
*[[Формула включения-исключения]]&lt;br /&gt;
*[[Генерация комбинаторных объектов в лексикографическом порядке]]&lt;br /&gt;
*[[Получение номера по объекту]]&lt;br /&gt;
*[[Получение объекта по номеру]]&lt;br /&gt;
*[[Получение следующего объекта]]&lt;br /&gt;
*[[Коды Грея]]&lt;br /&gt;
*[[Коды Грея для перестановок]]&lt;br /&gt;
*[[Коды антигрея]]&lt;br /&gt;
*[[Цепные коды]]&lt;br /&gt;
*[[Правильные скобочные последовательности]]&lt;br /&gt;
*[[Действие перестановки на набор из элементов, представление в виде циклов]]&lt;br /&gt;
*[[Метод генерации случайной перестановки, алгоритм Фишера-Йетса]]&lt;br /&gt;
*[[Методы генерации случайного сочетания]]&lt;br /&gt;
*[[Таблица инверсий]]&lt;br /&gt;
*[[Умножение перестановок, обратная перестановка, группа перестановок]]&lt;br /&gt;
*[[Теорема Кэли]]&lt;br /&gt;
*[[Матричное представление перестановок]]&lt;br /&gt;
*[[Задача о минимуме/максимуме скалярного произведения]]&lt;br /&gt;
*[[Задача о монотонных подпоследовательностях, теорема о связи длины НВП и НУП]]&lt;br /&gt;
*[[Нахождение количества разбиений числа на слагаемые | Нахождение количества разбиений числа на слагаемые. Пентагональная теорема Эйлера]]&lt;br /&gt;
*[[Производящая функция]]&lt;br /&gt;
*[[Задача об ожерельях]]&lt;br /&gt;
&lt;br /&gt;
== [[Динамическое программирование]] ==&lt;br /&gt;
*[[Кратчайший путь в ациклическом графе]]&lt;br /&gt;
*[[Задача о расстановке знаков в выражении]]&lt;br /&gt;
*[[Задача о наибольшей общей подпоследовательности]]&lt;br /&gt;
*[[Задача о порядке перемножения матриц]]&lt;br /&gt;
*[[Задача о наибольшей возрастающей подпоследовательности]]&lt;br /&gt;
*[[Задача о паросочетании максимального веса в дереве, амортизированные оценки для ДП на дереве]]&lt;br /&gt;
*[[Метод четырех русских для умножения матриц]]&lt;br /&gt;
*[[Применение метода четырех русских в задачах ДП на примере задачи о НОП]]&lt;br /&gt;
*[[Задача коммивояжера, ДП по подмножествам]]&lt;br /&gt;
*[[Задача о выводе в контекстно-свободной грамматике, алгоритм Кока-Янгера-Касами]]&lt;br /&gt;
*[[Задача о редакционном расстоянии, алгоритм Вагнера-Фишера]]&lt;br /&gt;
*[[Задача о расстоянии Дамерау-Левенштейна]]&lt;br /&gt;
*[[Задача об оптимальном префиксном коде с сохранением порядка. Монотонность точки разреза]]&lt;br /&gt;
*[[Задача о наибольшей подпоследовательности-палиндроме]]&lt;br /&gt;
*[[Meet-in-the-middle]]&lt;br /&gt;
*[[Динамическое программирование по профилю]]&lt;br /&gt;
*[[Задача о рюкзаке]]&lt;br /&gt;
&lt;br /&gt;
== Теория вероятностей ==&lt;br /&gt;
*[[Вероятностное пространство, элементарный исход, событие]]&lt;br /&gt;
*[[Независимые события]]&lt;br /&gt;
*[[Условная вероятность]]&lt;br /&gt;
*[[Формула Байеса]]&lt;br /&gt;
*[[Формула полной вероятности]]&lt;br /&gt;
*[[Дискретная случайная величина]]&lt;br /&gt;
*[[Независимые случайные величины]]&lt;br /&gt;
*[[Математическое ожидание случайной величины]]&lt;br /&gt;
*[[Дисперсия случайной величины]]&lt;br /&gt;
*[[Ковариация случайных величин]]&lt;br /&gt;
*[[Корреляция случайных величин]]&lt;br /&gt;
*[[Энтропия случайного источника]]&lt;br /&gt;
*[[Симуляция одним распределением другого]]&lt;br /&gt;
*[[Арифметическое кодирование]]&lt;br /&gt;
*[[Парадоксы теории вероятностей]]&lt;br /&gt;
*[[Схема Бернулли]]&lt;br /&gt;
&lt;br /&gt;
== Марковские цепи ==&lt;br /&gt;
&lt;br /&gt;
* [[Марковская цепь]]&lt;br /&gt;
* [[Теорема о поглощении]]&lt;br /&gt;
* [[Фундаментальная матрица]]&lt;br /&gt;
* [[Математическое ожидание времени поглощения]]&lt;br /&gt;
* [[Расчет вероятности поглощения в состоянии]]&lt;br /&gt;
* [[Эргодическая марковская цепь]]&lt;br /&gt;
* [[Регулярная марковская цепь]]&lt;br /&gt;
* [[Примеры использования Марковских цепей]]&lt;br /&gt;
&lt;br /&gt;
= Второй семестр =&lt;br /&gt;
&lt;br /&gt;
== Амортизационный анализ ==&lt;br /&gt;
* [[Амортизационный анализ]]&lt;br /&gt;
* [[Саморасширяющийся массив]]&lt;br /&gt;
* [[Массив с увеличением/уменьшением размера]]&lt;br /&gt;
* [[Список]]&lt;br /&gt;
* [[Стек]]&lt;br /&gt;
* [[Очередь]]&lt;br /&gt;
* [[Персистентный стек]]&lt;br /&gt;
* [[Персистентный дек]]&lt;br /&gt;
&lt;br /&gt;
== Приоритетные очереди ==&lt;br /&gt;
&lt;br /&gt;
* [[Двоичная куча]]&lt;br /&gt;
* [[Биномиальная куча]]&lt;br /&gt;
* [[Фибоначчиева куча]]&lt;br /&gt;
&lt;br /&gt;
== Система непересекающихся множеств ==&lt;br /&gt;
* [[СНМ (наивные реализации) | Наивные реализации]]&lt;br /&gt;
* [[СНМ (списки с весовой эвристикой) | Списки с весовой эвристикой]]&lt;br /&gt;
* [[СНМ(реализация с помощью леса корневых деревьев) | Реализация с помощью леса корневых деревьев]]&lt;br /&gt;
&lt;br /&gt;
== Поисковые структуры данных ==&lt;br /&gt;
* [[Упорядоченное множество]]&lt;br /&gt;
* [[Дерево поиска, наивная реализация]]&lt;br /&gt;
* [[АВЛ-дерево]]&lt;br /&gt;
* [[2-3 дерево]]&lt;br /&gt;
* [[B-дерево]]&lt;br /&gt;
* [[Красно-черное дерево]]&lt;br /&gt;
* [[Декартово дерево]]&lt;br /&gt;
* [[Декартово дерево по неявному ключу]]&lt;br /&gt;
* [[Splay-дерево]]&lt;br /&gt;
* [[Рандомизированное бинарное дерево поиска]]&lt;br /&gt;
* [[Дерево ван Эмде Боаса]]&lt;br /&gt;
* [[Список с пропусками]]&lt;br /&gt;
&lt;br /&gt;
== Дерево отрезков ==&lt;br /&gt;
&lt;br /&gt;
* [[Статистики на отрезках. Корневая эвристика]]&lt;br /&gt;
* [[Дерево отрезков. Построение]]&lt;br /&gt;
* [[Реализация запроса в дереве отрезков сверху]]&lt;br /&gt;
* [[Реализация запроса в дереве отрезков снизу]]&lt;br /&gt;
* [[Несогласованные поддеревья. Реализация массового обновления]]&lt;br /&gt;
* [[Многомерное дерево отрезков]]&lt;br /&gt;
* [[Сжатое многомерное дерево отрезков]]&lt;br /&gt;
&lt;br /&gt;
== Дерево Фенвика ==&lt;br /&gt;
* [[Дерево Фенвика]]&lt;br /&gt;
* [[Встречное дерево Фенвика]]&lt;br /&gt;
* [[Дерево Фенвика для некоммутативных операций]]&lt;br /&gt;
* [[Многомерное дерево Фенвика]]&lt;br /&gt;
&lt;br /&gt;
== Хеширование ==&lt;br /&gt;
* [[Хеш-таблица]]&lt;br /&gt;
* [[Разрешение коллизий]]&lt;br /&gt;
* [[Хеширование кукушки]]&lt;br /&gt;
* [[Идеальное хеширование]]&lt;br /&gt;
* [[Перехеширование. Амортизационный анализ]]&lt;br /&gt;
* [[Фильтр Блума]]&lt;br /&gt;
* [[Универсальное семейство хеш-функций]]&lt;br /&gt;
&lt;br /&gt;
== [[Сортировка]] ==&lt;br /&gt;
* [[Сортировка выбором]]&lt;br /&gt;
* [[Сортировка пузырьком]]&lt;br /&gt;
* [[Сортировка вставками]]&lt;br /&gt;
* [[Сортировка кучей]]&lt;br /&gt;
* [[Быстрая сортировка]]&lt;br /&gt;
* [[Сортировка слиянием]]&lt;br /&gt;
* [[Cортировка слиянием с использованием O(1) дополнительной памяти]]&lt;br /&gt;
* [[Теорема о нижней оценке для сортировки сравнениями]]&lt;br /&gt;
* [[Сортировка подсчетом]]&lt;br /&gt;
* [[Сортировка подсчетом сложных объектов]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Карманная сортировка]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики]]&lt;br /&gt;
* [[Поиск k-ой порядковой статистики за линейное время]]&lt;br /&gt;
* [[Сортировка Хана]]&lt;br /&gt;
&lt;br /&gt;
== Сортирующие сети ==&lt;br /&gt;
* [[Сортирующие сети]]&lt;br /&gt;
* [[0-1 принцип | Проверка сети компараторов на то, что она сортирующая. 0-1 принцип]]&lt;br /&gt;
* [[Сортирующие сети для квадратичных сортировок]]&lt;br /&gt;
* [[Сеть Бетчера]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы поиска ==&lt;br /&gt;
* [[Целочисленный двоичный поиск]]&lt;br /&gt;
* [[Вещественный двоичный поиск]]&lt;br /&gt;
* [[Троичный поиск]]&lt;br /&gt;
* [[Поиск с помощью золотого сечения]]&lt;br /&gt;
* [[Интерполяционный поиск]]&lt;br /&gt;
&lt;br /&gt;
== Связь между структурами данных ==&lt;br /&gt;
* [[Связь между структурами данных]]&lt;br /&gt;
&lt;br /&gt;
= Третий семестр =&lt;br /&gt;
&lt;br /&gt;
== Основные определения теории графов ==&lt;br /&gt;
* [[Основные определения теории графов|Основные определения: граф, ребро, вершина, степень, петля, путь, цикл]]&lt;br /&gt;
* [[Лемма о рукопожатиях]]&lt;br /&gt;
* [[Теорема о существовании простого пути в случае существования пути]]&lt;br /&gt;
* [[Теорема о существовании простого цикла в случае существования цикла]]&lt;br /&gt;
* [[Матрица смежности графа]]&lt;br /&gt;
* [[Связь степени матрицы смежности и количества путей]]&lt;br /&gt;
* [[Матрица инцидентности графа]]&lt;br /&gt;
* [[Циклическое пространство графа]]&lt;br /&gt;
* [[Фундаментальные циклы графа]]&lt;br /&gt;
* [[Дерево, эквивалентные определения]]&lt;br /&gt;
* [[Дополнительный, самодополнительный граф]]&lt;br /&gt;
&lt;br /&gt;
== Связность в графах ==&lt;br /&gt;
* [[Отношение связности, компоненты связности]]&lt;br /&gt;
* [[Отношение реберной двусвязности]]&lt;br /&gt;
* [[Отношение вершинной двусвязности]]&lt;br /&gt;
* [[Граф компонент реберной двусвязности]]&lt;br /&gt;
* [[Граф блоков-точек сочленения]]&lt;br /&gt;
* [[Точка сочленения, эквивалентные определения]]&lt;br /&gt;
* [[Мост, эквивалентные определения]]&lt;br /&gt;
* [[k-связность]]&lt;br /&gt;
* [[Теорема Менгера]]&lt;br /&gt;
* [[Теорема Менгера, альтернативное доказательство]]&lt;br /&gt;
* [[Вершинная, реберная связность, связь между ними и минимальной степенью вершины]]&lt;br /&gt;
&lt;br /&gt;
== Остовные деревья ==&lt;br /&gt;
* [[Матрица Кирхгофа]]&lt;br /&gt;
* [[Связь матрицы Кирхгофа и матрицы инцидентности]]&lt;br /&gt;
* [[Подсчет числа остовных деревьев с помощью матрицы Кирхгофа]]&lt;br /&gt;
* [[Количество помеченных деревьев]]&lt;br /&gt;
* [[Коды Прюфера]]&lt;br /&gt;
&lt;br /&gt;
== Обходы графов ==&lt;br /&gt;
* [[Эйлеров цикл, Эйлеров путь, Эйлеровы графы, Эйлеровость орграфов]]&lt;br /&gt;
* [[Покрытие ребер графа путями]]&lt;br /&gt;
* [[Алгоритм построения Эйлерова цикла]]&lt;br /&gt;
* [[Произвольно вычерчиваемые из заданной вершины графы]]&lt;br /&gt;
* [[Гамильтоновы графы]]&lt;br /&gt;
* [[Теорема Хватала]]&lt;br /&gt;
* [[Теорема Дирака]]&lt;br /&gt;
* [[Теорема Оре]]&lt;br /&gt;
* [[Турниры]]&lt;br /&gt;
* [[Теорема Редеи-Камиона]]&lt;br /&gt;
&lt;br /&gt;
== Укладки графов ==&lt;br /&gt;
* [[Укладка графа на плоскости]]&lt;br /&gt;
* [[Формула Эйлера]]&lt;br /&gt;
* [[Непланарность K5 и K3,3|Непланарность &amp;lt;tex&amp;gt;K_5&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;K_{3,3}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Укладка дерева]]&lt;br /&gt;
* [[Укладка графа с планарными компонентами реберной двусвязности]]&lt;br /&gt;
* [[Укладка графа с планарными компонентами вершинной двусвязности]]&lt;br /&gt;
* [[Теорема Понтрягина-Куратовского]]&lt;br /&gt;
* [[Двойственный граф планарного графа]]&lt;br /&gt;
&lt;br /&gt;
== Раскраски графов ==&lt;br /&gt;
* [[Раскраска графа]]&lt;br /&gt;
* [[Двудольные графы и раскраска в 2 цвета]]&lt;br /&gt;
* [[Хроматический многочлен]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен полного графа|Хроматический многочлен полного графа]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен пустого графа|Хроматический многочлен пустого графа]]&lt;br /&gt;
** [[Хроматический многочлен#Хроматический многочлен дерева|Хроматический многочлен дерева]]&lt;br /&gt;
** [[Хроматический многочлен#Рекуррентные формулы для хроматических многочленов|Рекуррентные формулы для хроматических многочленов]]&lt;br /&gt;
** [[Хроматический многочлен#Коэффициенты хроматического многочлена|Коэффициенты хроматического многочлена: старший, второй коэффициенты, знакопеременность]]&lt;br /&gt;
* [[Формула Зыкова]]&lt;br /&gt;
* [[Формула Уитни]]&lt;br /&gt;
* [[Теорема Брукса]]&lt;br /&gt;
* [[Верхняя оценка хроматического числа длиной нечетного цикла]]&lt;br /&gt;
* [[Нижняя оценка хроматического числа]]&lt;br /&gt;
&lt;br /&gt;
== Обход в глубину ==&lt;br /&gt;
* [[Обход в глубину, цвета вершин]]&lt;br /&gt;
* [[Лемма о белых путях]]&lt;br /&gt;
* [[Использование обхода в глубину для проверки связности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска цикла в ориентированном графе]]&lt;br /&gt;
* [[Использование обхода в глубину для топологической сортировки]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска компонент сильной связности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска точек сочленения]]&lt;br /&gt;
* [[Построение компонент вершинной двусвязности]]&lt;br /&gt;
* [[Использование обхода в глубину для поиска мостов]]&lt;br /&gt;
* [[Построение компонент реберной двусвязности]]&lt;br /&gt;
&lt;br /&gt;
== Кратчайшие пути в графах ==&lt;br /&gt;
* [[Обход в ширину]]&lt;br /&gt;
* [[Алгоритм Форда-Беллмана]]&lt;br /&gt;
* [[Алгоритм Дейкстры]]&lt;br /&gt;
* [[Алгоритм Флойда]]&lt;br /&gt;
* [[Алгоритм A*]]&lt;br /&gt;
* [[Алгоритм Джонсона]]&lt;br /&gt;
&lt;br /&gt;
== Построение остовных деревьев ==&lt;br /&gt;
* [[Лемма о безопасном ребре]]&lt;br /&gt;
* [[Алгоритм Прима]]&lt;br /&gt;
* [[Алгоритм Краскала]]&lt;br /&gt;
* [[Алгоритм Борувки]]&lt;br /&gt;
* [[Критерий Тарьяна минимальности остовного дерева|Теорема Тарьяна (критерий минимальности остовного дерева)]]&lt;br /&gt;
* [[Алгоритм двух китайцев]]&lt;br /&gt;
&lt;br /&gt;
== Задача о паросочетании ==&lt;br /&gt;
* [[Теорема о максимальном паросочетании и дополняющих цепях]]&lt;br /&gt;
* [[Алгоритм Форда-Фалкерсона для поиска максимального паросочетания]]&lt;br /&gt;
* [[Алгоритм Куна для поиска максимального паросочетания]]&lt;br /&gt;
* [[Теорема Холла]]&lt;br /&gt;
* [[Связь максимального паросочетания и минимального вершинного покрытия в двудольных графах]]&lt;br /&gt;
* [[Связь вершинного покрытия и независимого множества]]&lt;br /&gt;
* [[Матрица Татта и связь с размером максимального паросочетания в двудольном графе]]&lt;br /&gt;
* [[Алгоритм вырезания соцветий|Паросочетания в недвудольных графах. Алгоритм вырезания соцветий]]&lt;br /&gt;
&lt;br /&gt;
== Задача о максимальном потоке ==&lt;br /&gt;
* [[Определение сети, потока]]&lt;br /&gt;
* [[Разрез, лемма о потоке через разрез]]&lt;br /&gt;
* [[Дополняющая сеть, дополняющий путь]]&lt;br /&gt;
* [[Лемма о сложении потоков]]&lt;br /&gt;
* [[Теорема Форда-Фалкерсона]]&lt;br /&gt;
* [[Алгоритм Форда-Фалкерсона, реализация с помощью поиска в глубину]]&lt;br /&gt;
* [[Алоритм Эдмондса-Карпа]]&lt;br /&gt;
* [[Алгоритм масштабирования потока]]&lt;br /&gt;
* [[Блокирующий поток]]&lt;br /&gt;
* [[Схема алгоритма Диница]]&lt;br /&gt;
* [[Теоремы Карзанова о числе итераций алгоритма Диница в сети с целочисленными пропускными способностями]]&lt;br /&gt;
* [[Алгоритм поиска блокирующего потока в ациклической сети]]&lt;br /&gt;
* [[Метод проталкивания предпотока]]&lt;br /&gt;
* [[Алгоритм &amp;quot;поднять-в-начало&amp;quot;]]&lt;br /&gt;
* [[Теорема о декомпозиции]]&lt;br /&gt;
* [[Теорема о декомпозиционном барьере]]&lt;br /&gt;
* [[Циркуляция потока]]&lt;br /&gt;
&lt;br /&gt;
== Задача о потоке минимальной стоимости ==&lt;br /&gt;
* [[Поток минимальной стоимости]]&lt;br /&gt;
* [[Теорема Форда-Фалкерсона о потоке минимальной стоимости]]&lt;br /&gt;
* [[Лемма об эквивалентности свойства потока быть минимальной стоимости и отсутствии отрицательных циклов в остаточной сети]]&lt;br /&gt;
* [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]&lt;br /&gt;
* [[Использование потенциалов Джонсона при поиске потока минимальной стоимости]]&lt;br /&gt;
* [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости]]&lt;br /&gt;
* [[Венгерский алгоритм решения задачи о назначениях]]&lt;br /&gt;
&lt;br /&gt;
= Четвертый семестр =&lt;br /&gt;
&lt;br /&gt;
== Основные определения. Простые комбинаторные свойства слов ==&lt;br /&gt;
* [[Основные определения, связанные со строками]]&lt;br /&gt;
* [[Период и бордер, их связь]]&lt;br /&gt;
* [[Слово Фибоначчи]]&lt;br /&gt;
* [[Слово Туэ-Морса]]&lt;br /&gt;
&lt;br /&gt;
== Поиск подстроки в строке ==&lt;br /&gt;
* [[Наивный алгоритм поиска подстроки в строке]]&lt;br /&gt;
* [[Поиск подстроки в строке с использованием хеширования. Алгоритм Рабина-Карпа]]&lt;br /&gt;
* [[Поиск наибольшей общей подстроки двух строк с использованием хеширования]]&lt;br /&gt;
* [[Префикс-функция]]&lt;br /&gt;
* [[Алгоритм Кнута-Морриса-Пратта]]&lt;br /&gt;
* [[Z-функция]]&lt;br /&gt;
* [[Автомат для поиска образца в тексте]]&lt;br /&gt;
* [[Бор]]&lt;br /&gt;
* [[Алгоритм Ахо-Корасик]]&lt;br /&gt;
&lt;br /&gt;
== Суффиксное дерево ==&lt;br /&gt;
* [[Суффиксный бор]]&lt;br /&gt;
* [[Сжатое суффиксное дерево]]&lt;br /&gt;
* [[Алгоритм Укконена]]&lt;br /&gt;
&lt;br /&gt;
== Суффиксный массив ==&lt;br /&gt;
* [[Суффиксный массив]]&lt;br /&gt;
* [[Построение суффиксного массива с помощью стандартных методов сортировки]]&lt;br /&gt;
* [[Цифровая сортировка]]&lt;br /&gt;
* [[Алгоритм цифровой сортировки суффиксов циклической строки]]&lt;br /&gt;
* [[Алгоритм Касаи и др.]]&lt;br /&gt;
* [[Алгоритм Карккайнена-Сандерса]]&lt;br /&gt;
* [[Алгоритм поиска подстроки в строке с помощью суффиксного массива]]&lt;br /&gt;
&lt;br /&gt;
== Задача о наименьшем общем предке ==&lt;br /&gt;
* [[Метод двоичного подъема]]&lt;br /&gt;
* [[Сведение задачи LCA к задаче RMQ]]&lt;br /&gt;
* [[Решение RMQ с помощью разреженной таблицы]]&lt;br /&gt;
* [[Алгоритм Фарака-Колтона и Бендера]] (решение +/-1 RMQ с помощью метода четырех русских)&lt;br /&gt;
* [[Алгоритм Шибера-Вишкина]]&lt;br /&gt;
* [[Сведение задачи RMQ к задаче LCA]]&lt;br /&gt;
&lt;br /&gt;
== Матроиды ==&lt;br /&gt;
* [[Определение матроида]]&lt;br /&gt;
* [[Примеры матроидов]]&lt;br /&gt;
* [[Прямая сумма матроидов]]&lt;br /&gt;
* [[Теорема Радо-Эдмондса (жадный алгоритм)]]&lt;br /&gt;
* [[Жадный алгоритм поиска базы минимального веса]]&lt;br /&gt;
* [[Теорема о базах]]&lt;br /&gt;
* [[Аксиоматизация матроида базами]]&lt;br /&gt;
* [[Теорема о циклах]]&lt;br /&gt;
* [[Аксиоматизация матроида циклами]]&lt;br /&gt;
* [[Ранговая функция, полумодулярность]]&lt;br /&gt;
* [[Двойственный матроид]]&lt;br /&gt;
* [[Оператор замыкания для матроидов]]&lt;br /&gt;
=== Пересечение матроидов ===&lt;br /&gt;
* [[Пересечение матроидов, определение, примеры]]&lt;br /&gt;
* [[Лемма о паросочетании в графе замен]]&lt;br /&gt;
* [[Лемма о единственном паросочетании в графе замен]]&lt;br /&gt;
* [[Граф замен для двух матроидов]]&lt;br /&gt;
* [[Лемма о единственном паросочетании в подграфе замен, индуцированном кратчайшим путем]]&lt;br /&gt;
* [[Алгоритм построения базы в пересечении матроидов]]&lt;br /&gt;
* [[Теорема Эдмондса-Лоулера]]&lt;br /&gt;
=== Объединение матроидов ===&lt;br /&gt;
* [[Объединение матроидов, проверка множества на независимость]]&lt;br /&gt;
* [[Объединение матроидов, доказательство того, что объединение является матроидом]]&lt;br /&gt;
* [[Алгоритм построения базы в объединении матроидов]]&lt;br /&gt;
&lt;br /&gt;
== Теория расписаний ==&lt;br /&gt;
* [[Классификация задач]]&lt;br /&gt;
* [[Методы решения задач теории расписаний]]&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[1precpmtnrifmax|&amp;lt;tex&amp;gt;1 \mid prec, pmtn, r_i \mid f_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt;Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnriLmax|&amp;lt;tex&amp;gt;Q \mid pmtn, r_{i} \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P2precpi1Lmax|&amp;lt;tex&amp;gt;P2 \mid prec, p_i = 1 \mid L_{\max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[R2Cmax|&amp;lt;tex&amp;gt;R2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[O2Cmax|&amp;lt;tex&amp;gt;O2 \mid \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[PpmtnriLmax|&amp;lt;tex&amp;gt;P \mid pmtn, r_i \mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt;O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Fpij1sumwu|&amp;lt;tex&amp;gt;F \mid p_{ij} = 1 \mid \sum w_i U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ripi1sumwc|&amp;lt;tex&amp;gt;1 \mid r_{i}, p_i=1\mid \sum w_{i}C_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1ridipi1|&amp;lt;tex&amp;gt;1 \mid r_{i}, d_{i}, p_{i} = 1 \mid -&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc | &amp;lt;tex&amp;gt;1 \mid outtree \mid \sum w_i C_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt;1 \mid p_{i} = 1 \mid \sum w_{i}U_{i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QSumCi|&amp;lt;tex&amp;gt;Q\mid\mid\sum{C_i}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[J2pij1Lmax| &amp;lt;tex&amp;gt;J2\mid p_{ij} = 1\mid L_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[P1sumu|&amp;lt;tex&amp;gt;1 \mid \mid \sum U_{i}&amp;lt;/tex&amp;gt;]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D1%8F%D1%8F_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B0_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%B4%D0%BB%D0%B8%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D1%87%D1%91%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&amp;diff=29618</id>
		<title>Верхняя оценка хроматического числа длиной нечётного цикла</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%92%D0%B5%D1%80%D1%85%D0%BD%D1%8F%D1%8F_%D0%BE%D1%86%D0%B5%D0%BD%D0%BA%D0%B0_%D1%85%D1%80%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D1%87%D0%B8%D1%81%D0%BB%D0%B0_%D0%B4%D0%BB%D0%B8%D0%BD%D0%BE%D0%B9_%D0%BD%D0%B5%D1%87%D1%91%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%86%D0%B8%D0%BA%D0%BB%D0%B0&amp;diff=29618"/>
				<updated>2013-01-13T18:18:27Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Лемма &lt;br /&gt;
|about = оценка хроматического числа длиной максимального нечётного цикла&lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - длина максимального простого цикла графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\Delta \ge 3&amp;lt;/tex&amp;gt;. Тогда, &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;. &lt;br /&gt;
|proof=&lt;br /&gt;
Опишем на графе следующий алгоритм раскраски:&lt;br /&gt;
*Из произвольной вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; запусти алгоритм поиска в глубину. Пусть &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt; {{---}} дерево обхода глубина графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; с корнем в вершине &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.&lt;br /&gt;
*Произвольную вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, покрасим в цвет &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \mod &amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; (\Delta + 1)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;dist(v,u)&amp;lt;/tex&amp;gt;{{---}} расстояние между вершинами &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; в графe &amp;lt;tex&amp;gt;T&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Докажем от противного, что после выполнения описанного алгоритма граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; будет правильно раскрашен.&lt;br /&gt;
Предположим, что после выполнения алгоритма покраски в графе существует ребро, соединяющее вершины &amp;lt;tex&amp;gt; a,b &amp;lt;/tex&amp;gt; одного цвета.Пусть &amp;lt;tex&amp;gt;color(v)&amp;lt;/tex&amp;gt; {{---}} цвет вершины после выполнения алгоритма раскраски.Заметим, что для произвольной вершины графа &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;dist(v,p) = color(p) + n(\Delta + 1)&amp;lt;/tex&amp;gt; , &amp;lt;tex&amp;gt;n \ge 0 &amp;lt;/tex&amp;gt;.Тогда, &amp;lt;tex&amp;gt;dist(v,a) - dist(v,b) = k(\Delta + 1)&amp;lt;/tex&amp;gt;.Поскольку в дереве dfs между вершинами находящимися на одинаковом расстоянии от корня нет перекрестных ребер, то &amp;lt;tex&amp;gt; k \ge 1&amp;lt;/tex&amp;gt;. То есть, вершины &amp;lt;tex&amp;gt;a,b&amp;lt;/tex&amp;gt; лежат на простом цикле длины по крайней мере &amp;lt;tex&amp;gt;\Delta + 2&amp;lt;/tex&amp;gt;. Получается противоречие с условием потому, что длина максимального простого цикла получается больше чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Таким образом в графе &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; после выполнения алгоритма раскраски  нет вершин одного цвета соединенных ребром и при этом каждая вершина покрашена в один из &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; правильно раскрашен в &amp;lt;tex&amp;gt;\Delta + 1&amp;lt;/tex&amp;gt; цвет, следовательно &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G) + 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29610</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29610"/>
				<updated>2013-01-13T17:59:52Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Теорема */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|300px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является вершинно двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|300px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29608</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29608"/>
				<updated>2013-01-13T17:56:19Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|300px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|300px|thumb|Алгоритм расскраски для 3ого случая на 5ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29607</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29607"/>
				<updated>2013-01-13T17:55:19Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|300px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|300px|thumb|Алгоритм расскраски для 3ого случая на 6ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм  обхода в ширину из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29606</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=29606"/>
				<updated>2013-01-13T17:51:27Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|300px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#[[Файл:Brooks_2.png‎|300px|thumb|Алгоритм расскраски для 3ого случая на 6ом шаге]]Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм [[Обхода в ширину| обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Brooks_2.png&amp;diff=29604</id>
		<title>Файл:Brooks 2.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Brooks_2.png&amp;diff=29604"/>
				<updated>2013-01-13T17:48:01Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: загружена новая версия «Файл:Brooks 2.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Brooks_2.png&amp;diff=28631</id>
		<title>Файл:Brooks 2.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Brooks_2.png&amp;diff=28631"/>
				<updated>2012-12-31T17:55:02Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=28563</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=28563"/>
				<updated>2012-12-29T14:05:18Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Вспомогательная Лемма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|300px|thumb|Алгоритм расскраски на 5ом шаге]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм [[Обхода в ширину| обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=28562</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=28562"/>
				<updated>2012-12-29T14:04:24Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Вспомогательная Лемма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|300px|thumb|]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм [[Обхода в ширину| обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=28561</id>
		<title>Теорема Брукса</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D1%80%D1%83%D0%BA%D1%81%D0%B0&amp;diff=28561"/>
				<updated>2012-12-29T14:03:50Z</updated>
		
		<summary type="html">&lt;p&gt;Danek g30: /* Вспомогательная Лемма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Вспомогательная Лемма ==&lt;br /&gt;
{{Лемма &lt;br /&gt;
|statement= Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; - произвольный связный неориентированный граф и &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;. Если в таком графе существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
 [[Файл:Brooks_1.png‎|200px|thumb|]]&lt;br /&gt;
Запустим алгоритм [[Обход в ширину|обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_n,&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs. Далее начнем красить вершины в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета. На &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов. Поскольку на каждом шаге алгоритм отработает корректно, следовательно граф можно правильно раскрасить в не более чем &amp;lt;tex&amp;gt; \Delta&amp;lt;/tex&amp;gt; цветов, то есть &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Теорема ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about= Брукса&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;G(V,E)&amp;lt;/tex&amp;gt; {{---}} связный неориентированный граф и &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является &amp;lt;tex&amp;gt;K_m&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;C_{2m+1}&amp;lt;/tex&amp;gt;, ни для кого &amp;lt;tex&amp;gt; m&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\Delta(G)&amp;lt;/tex&amp;gt; - максимальная степень вершин &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|proof=&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 0&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; G = K_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Если &amp;lt;tex&amp;gt; \Delta = 2&amp;lt;/tex&amp;gt;, то:&lt;br /&gt;
## &amp;lt;tex&amp;gt; G &amp;lt;/tex&amp;gt;{{---}} либо дерево либо четный цикл и тогда &amp;lt;tex&amp;gt; \chi(G) = 2&amp;lt;/tex&amp;gt;&lt;br /&gt;
##&amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; нечетный цикл&lt;br /&gt;
Поэтому мы будем считать до конца доказательства, что &amp;lt;tex&amp;gt; \Delta(G) \ge 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Если в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; существует вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; степени &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta(G)&amp;lt;/tex&amp;gt;, то по выше доказанной лемме &amp;lt;tex&amp;gt; \chi(G) \le \Delta(G)&amp;lt;/tex&amp;gt;. То есть осталось рассмотреть случай, когда &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} регулярный граф степени &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; не является двусвязным графом, тогда в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v \in V&amp;lt;/tex&amp;gt;, где v {{---}} точка сочленения. Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; две компоненты связности полученный при удалении вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;.Тогда, по выше доказанной лемме &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.Поскольку количество соседей вершины &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; в каждой из компонент не более &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если в графе &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \exists&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; v,u \in V :(u,v) \notin E&amp;lt;/tex&amp;gt; и при удалении вершин &amp;lt;tex&amp;gt;v,u&amp;lt;/tex&amp;gt; граф теряет связность .Пусть &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; два подграфа &amp;lt;tex&amp;gt; G:G_1 \cap G_2 = \{v,u\}  \land G_1 \cup G_2 = G&amp;lt;/tex&amp;gt;. Рассмотрим два случая:&lt;br /&gt;
## Если в одном из подграфов &amp;lt;tex&amp;gt; G_1,G_2&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; deg\ u &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; deg\ v &amp;lt; \Delta - 2 &amp;lt;/tex&amp;gt; то, подграфы &amp;lt;tex&amp;gt;G_1,G_2&amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.А из этого следует что, граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; тоже можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
## Если степени обоих вершин в одном из подграфов равны &amp;lt;tex&amp;gt; \Delta - 1&amp;lt;/tex&amp;gt; например в подграфе &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt;:&lt;br /&gt;
##* &amp;lt;tex&amp;gt; G_1,G_2 &amp;lt;/tex&amp;gt; можно правильно раскрасить в  неболее чем  &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt; u,v &amp;lt;/tex&amp;gt; были бы разных цветов.Тогда очевидно, что оценка теоремы выполнена. &lt;br /&gt;
##* &amp;lt;tex&amp;gt;\exists p \in G_2: pu \in E \land pv \in E  &amp;lt;/tex&amp;gt;, тогда мы можем правильно раскрасить &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;deg\ u = deg\ v = 1&amp;lt;/tex&amp;gt;, в не более чем &amp;lt;tex&amp;gt; \Delta &amp;lt;/tex&amp;gt; цветов так, чтобы вершины &amp;lt;tex&amp;gt;u,v&amp;lt;/tex&amp;gt; были  одного цвета.Следовательно,можно покрасить граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; в не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
##*&amp;lt;tex&amp;gt;\exists u_1,v_1 \in G_2: uu_1 \in E \land vv_1 \in E \land u_1 \neq v_1  &amp;lt;/tex&amp;gt;, тогда вместо вершин &amp;lt;tex&amp;gt;\{u,v\}&amp;lt;/tex&amp;gt; рассмотрим вершины &amp;lt;tex&amp;gt;\{u,v_1\}&amp;lt;/tex&amp;gt;.Заметим, что при удалении этих вершин граф потеряет связность и между ними нет ребра,то есть для этой пары вершин можно провести рассуждения аналогичные тем которые проводились для вершин &amp;lt;tex&amp;gt; v,u&amp;lt;/tex&amp;gt;.Из чего, прямым образом вытекает, что граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta &amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
#Если вышеописанные случаи не подходят, тогда рассмотрим &amp;lt;tex&amp;gt;w \in V : deg\ w = \Delta&amp;lt;/tex&amp;gt;. У вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; должны существовать две соседние вершины &amp;lt;tex&amp;gt;u,v : uv \notin E &amp;lt;/tex&amp;gt;, в противном случаи &amp;lt;tex&amp;gt;G = K_n&amp;lt;/tex&amp;gt;.Пусть &amp;lt;tex&amp;gt;G_- = G - u - v &amp;lt;/tex&amp;gt;. Заметим, что &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; связный граф, запустим для &amp;lt;tex&amp;gt;G_-&amp;lt;/tex&amp;gt; алгоритм [[Обхода в ширину| обхода в ширину]] из вершины &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Пронумеруем вершины &amp;lt;tex&amp;gt;v_1,...,v_{n-2},&amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;v_i&amp;lt;/tex&amp;gt; вершина рассмотренная на &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;ом шаге алгоритма bfs.Теперь пусть &amp;lt;tex&amp;gt; v_{n-1} = v&amp;lt;/tex&amp;gt;,и &amp;lt;tex&amp;gt;v_n = u&amp;lt;/tex&amp;gt;. Покрасим &amp;lt;tex&amp;gt;v_n,v_{n-1}&amp;lt;/tex&amp;gt; в один цвет, далее начнем красить вершины в обратном порядке начиная с &amp;lt;tex&amp;gt;v_{n-2}&amp;lt;/tex&amp;gt; в обратном порядке в один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов так, чтобы никакое ребро графа не соединяло вершины одного цвета.Заметим, что так всегда можно сделать, поскольку на &amp;lt;tex&amp;gt; i&amp;lt;/tex&amp;gt;ом шаге покраски,где &amp;lt;tex&amp;gt;i \neq n&amp;lt;/tex&amp;gt;, для вершины &amp;lt;tex&amp;gt; v_{n - i+1}&amp;lt;/tex&amp;gt; есть не более &amp;lt;tex&amp;gt;\Delta(G) - 1&amp;lt;/tex&amp;gt; уже покрашенных соседей, следовательно вершину &amp;lt;tex&amp;gt; v_{n-i+1}&amp;lt;/tex&amp;gt; можно покрасить по крайней мере в один из свободных цветов.Вершину &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;,мы тоже сможем правильно раскрасить в  не более чем  один из &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов потому, что ее &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; соседей покрашено в не более чем &amp;lt;tex&amp;gt;\Delta - 1&amp;lt;/tex&amp;gt; цветов. Таким образом граф &amp;lt;tex&amp;gt; G&amp;lt;/tex&amp;gt; можно правильно раскрасить в  не более чем  не более чем &amp;lt;tex&amp;gt;\Delta&amp;lt;/tex&amp;gt; цветов.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
&lt;br /&gt;
* [http://myweb.facstaff.wwu.edu/sarkara/brooks.pdf Доказательство на английском]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Brooks'_theorem Теорема Брукса на вики]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Раскраски графов]]&lt;/div&gt;</summary>
		<author><name>Danek g30</name></author>	</entry>

	</feed>