<?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=Gaporf</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=Gaporf"/>
		<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/Gaporf"/>
		<updated>2026-08-04T13:37:10Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=72068</id>
		<title>Гипотеза Хивуда</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=72068"/>
				<updated>2019-12-25T21:15:40Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Теорема о нижней границе хроматического числа поверхности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|id = Heawood number&lt;br /&gt;
|definition =&lt;br /&gt;
'''Хроматическим числом поверхности поверхности &amp;lt;tex&amp;gt;S_n&amp;lt;/tex&amp;gt;''' или '''&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ым числом Хивуда''' называется число &amp;lt;tex&amp;gt;\chi \left( S_n \right)&amp;lt;/tex&amp;gt;, равное максимальному хроматическому числу графа, который можно уложить на поверхность &amp;lt;tex&amp;gt;n&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;
Теорема Рингеля и Янгса&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Воспользуемся формулой Эйлера &amp;lt;tex&amp;gt;V + F - E = 2 - 2n&amp;lt;/tex&amp;gt;, тогда давайте докажем нижнюю границу на &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt;, поскольку каждая грань может быть треугольником, то для &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; будет неулучшаемая нижняя граница:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E \geqslant 3 \left( V - 2 + 2n \right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \dfrac{1}{6} E - \dfrac{1}{2} \left( V - 2 \right)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим полный граф &amp;lt;tex&amp;gt;K_p&amp;lt;/tex&amp;gt;, тогда получаем, что&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\gamma \left( K_p \right) \geqslant \dfrac{1}{6} \dfrac{p (p - 1)}{2} - \dfrac{p - 2}{2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\gamma \left( K_p \right) \geqslant \left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt;, функция монотонно возрастает при &amp;lt;tex&amp;gt;p \geqslant 4&amp;lt;/tex&amp;gt;, и для любого &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; наибольшее значение функция &amp;lt;tex&amp;gt;\left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt; достигается при &amp;lt;tex&amp;gt;p=\left[\dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;\chi\left(K_p\right) = p&amp;lt;/tex&amp;gt;, откуда получаем, что &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&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;
Гипотеза Хивуда&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \leqslant \left[ \dfrac{ 7 + \sqrt{1 + 48n} }{ 2 } \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&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;E&amp;lt;/tex&amp;gt; рёбрами и &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; гранями, также будем считать, что &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} триангуляция (добавляя таким образом рёбра мы всё ещё получаем граф, который можно уложить на поверхности &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ого рода). Обозначим за &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; {{---}} среднюю степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, тогда должно быть справедливым следующее равенство:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 2E = 3F&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Воспользуемся [[формула Эйлера | формулой Эйлера]] &amp;lt;tex&amp;gt;V - E + F = 2 - 2 n&amp;lt;/tex&amp;gt;, откуда &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E = V + F + 2 (n - 1)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F = 2 V + 4 (n - 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и подставляя в первое равенство получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 6V + 12(n - 1)&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;d = 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;d \leqslant V - 1&amp;lt;/tex&amp;gt;, то&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V - 1\geqslant 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найдём единственный положительный корень неравенства&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначим за &amp;lt;tex&amp;gt;H(n) = \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt; V \leqslant H(n)&amp;lt;/tex&amp;gt;, то тогда граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; очевидно можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов и неравенство верное. Допустим, что &amp;lt;tex&amp;gt;V &amp;gt; H(n)&amp;lt;/tex&amp;gt;, тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; d &amp;lt; 6 + \dfrac{12(n - 1)}{H(n)} = H(n) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значит в такое графе существует хотя бы одна вершина степени не больше &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt;, стянем её с любой соседней и получим новый граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;V - 1&amp;lt;/tex&amp;gt; вершинами. Если &amp;lt;tex&amp;gt;V - 1 = H(n)&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, значит и сам граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно также раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, если &amp;lt;tex&amp;gt;V - 1 &amp;gt; H(n)&amp;lt;/tex&amp;gt;, то опять найдём вершину степени &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt; и снова стянем её и будем продолжать так до тех пор, пока не получим желаемый граф.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Из всего выше сказанного получаем, что &amp;lt;tex&amp;gt;\chi \left(S_n\right)&amp;lt;/tex&amp;gt; в точности равно &amp;lt;tex&amp;gt;\left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Проблема четырёх красок==&lt;br /&gt;
Заметим, что теорема Хивуда не работает при &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt;, поэтому [[проблема четырёх красок]] не может быть доказана с помощью этой теоремы, однако при подстановке &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\chi \left( S_0 \right) = 4&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;
* [https://en.wikipedia.org/wiki/Heawood_conjecture Wikipedia {{---}} Heawood conjecture]&lt;br /&gt;
* [https://oeis.org/A000934 Последовательность чисел Хивуда]&lt;br /&gt;
* Ф.Харари «Теория графов» {{---}} М.: Мир, 1973 г. {{---}} стр. 162 - 164&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=72060</id>
		<title>Гипотеза Хивуда</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=72060"/>
				<updated>2019-12-24T11:14:17Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Теорема о нижней границе хроматического числа поверхности */ доказал беспруфный факт&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|id = Heawood number&lt;br /&gt;
|definition =&lt;br /&gt;
'''Хроматическим числом поверхности поверхности &amp;lt;tex&amp;gt;S_n&amp;lt;/tex&amp;gt;''' или '''&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ым числом Хивуда''' называется число &amp;lt;tex&amp;gt;\chi \left( S_n \right)&amp;lt;/tex&amp;gt;, равное максимальному хроматическому числу графа, который можно уложить на поверхность &amp;lt;tex&amp;gt;n&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;
Теорема Рингеля и Янгса&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Воспользуемся формулой Эйлера &amp;lt;tex&amp;gt;V + F - E = 2 - 2n&amp;lt;/tex&amp;gt;, тогда если представить самый худший случай, что каждая грань {{---}} треугольник, то отсюда получаем следующее неравенство:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E \geqslant 3 \left( V - 2 + 2n \right)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \dfrac{1}{6} E - \dfrac{1}{2} \left( V - 2 \right)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим полный граф &amp;lt;tex&amp;gt;K_p&amp;lt;/tex&amp;gt;, тогда получаем, что&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\gamma \left( K_p \right) \geqslant \dfrac{1}{6} \dfrac{p (p - 1)}{2} - \dfrac{p - 2}{2}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\gamma \left( K_p \right) \geqslant \left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt;, функция монотонно возрастает при &amp;lt;tex&amp;gt;p \geqslant 4&amp;lt;/tex&amp;gt;, и для любого &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; наибольшее значение функция &amp;lt;tex&amp;gt;\left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt; достигается при &amp;lt;tex&amp;gt;p=\left[\dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;\chi\left(K_p\right) = p&amp;lt;/tex&amp;gt;, откуда получаем, что &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&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;
Гипотеза Хивуда&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \leqslant \left[ \dfrac{ 7 + \sqrt{1 + 48n} }{ 2 } \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&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;E&amp;lt;/tex&amp;gt; рёбрами и &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; гранями, также будем считать, что &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} триангуляция (добавляя таким образом рёбра мы всё ещё получаем граф, который можно уложить на поверхности &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ого рода). Обозначим за &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; {{---}} среднюю степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, тогда должно быть справедливым следующее равенство:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 2E = 3F&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Воспользуемся [[формула Эйлера | формулой Эйлера]] &amp;lt;tex&amp;gt;V - E + F = 2 - 2 n&amp;lt;/tex&amp;gt;, откуда &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E = V + F + 2 (n - 1)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F = 2 V + 4 (n - 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и подставляя в первое равенство получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 6V + 12(n - 1)&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;d = 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;d \leqslant V - 1&amp;lt;/tex&amp;gt;, то&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V - 1\geqslant 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найдём единственный положительный корень неравенства&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначим за &amp;lt;tex&amp;gt;H(n) = \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt; V \leqslant H(n)&amp;lt;/tex&amp;gt;, то тогда граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; очевидно можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов и неравенство верное. Допустим, что &amp;lt;tex&amp;gt;V &amp;gt; H(n)&amp;lt;/tex&amp;gt;, тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; d &amp;lt; 6 + \dfrac{12(n - 1)}{H(n)} = H(n) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значит в такое графе существует хотя бы одна вершина степени не больше &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt;, стянем её с любой соседней и получим новый граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;V - 1&amp;lt;/tex&amp;gt; вершинами. Если &amp;lt;tex&amp;gt;V - 1 = H(n)&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, значит и сам граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно также раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, если &amp;lt;tex&amp;gt;V - 1 &amp;gt; H(n)&amp;lt;/tex&amp;gt;, то опять найдём вершину степени &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt; и снова стянем её и будем продолжать так до тех пор, пока не получим желаемый граф.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Из всего выше сказанного получаем, что &amp;lt;tex&amp;gt;\chi \left(S_n\right)&amp;lt;/tex&amp;gt; в точности равно &amp;lt;tex&amp;gt;\left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Проблема четырёх красок==&lt;br /&gt;
Заметим, что теорема Хивуда не работает при &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt;, поэтому [[проблема четырёх красок]] не может быть доказана с помощью этой теоремы, однако при подстановке &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\chi \left( S_0 \right) = 4&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;
* [https://en.wikipedia.org/wiki/Heawood_conjecture Wikipedia {{---}} Heawood conjecture]&lt;br /&gt;
* [https://oeis.org/A000934 Последовательность чисел Хивуда]&lt;br /&gt;
* Ф.Харари «Теория графов» {{---}} М.: Мир, 1973 г. {{---}} стр. 162 - 164&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=71959</id>
		<title>Гипотеза Хивуда</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=71959"/>
				<updated>2019-12-03T19:20:02Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|id = Heawood number&lt;br /&gt;
|definition =&lt;br /&gt;
'''Хроматическим числом поверхности поверхности &amp;lt;tex&amp;gt;S_n&amp;lt;/tex&amp;gt;''' или '''&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ым числом Хивуда''' называется число &amp;lt;tex&amp;gt;\chi \left( S_n \right)&amp;lt;/tex&amp;gt;, равное максимальному хроматическому числу графа, который можно уложить на поверхность &amp;lt;tex&amp;gt;n&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;
Теорема Рингеля и Янгса&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
В качестве доказательства воспользуемся теоремой Рингеля и Янгса о минимальном роде поверхности, на которую можно уложить граф &amp;lt;tex&amp;gt;K_p&amp;lt;/tex&amp;gt;, а именно &amp;lt;tex&amp;gt;n = \gamma \left( K_p \right) \geqslant \left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt;, функция монотонно возрастает при &amp;lt;tex&amp;gt;p \geqslant 4&amp;lt;/tex&amp;gt;, и для любого &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; наибольшее значение функция &amp;lt;tex&amp;gt;\left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt; достигается при &amp;lt;tex&amp;gt;p=\left[\dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;\chi\left(K_p\right) = p&amp;lt;/tex&amp;gt;, откуда получаем, что &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&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;
Гипотеза Хивуда&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \leqslant \left[ \dfrac{ 7 + \sqrt{1 + 48n} }{ 2 } \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&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;E&amp;lt;/tex&amp;gt; рёбрами и &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; гранями, также будем считать, что &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; {{---}} триангуляция (добавляя таким образом рёбра мы всё ещё получаем граф, который можно уложить на поверхности &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ого рода). Обозначим за &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; {{---}} среднюю степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, тогда должно быть справедливым следующее равенство:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 2E = 3F&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Воспользуемся [[формула Эйлера | формулой Эйлера]] &amp;lt;tex&amp;gt;V - E + F = 2 - 2 n&amp;lt;/tex&amp;gt;, откуда &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E = V + F + 2 (n - 1)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F = 2 V + 4 (n - 1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и подставляя в первое равенство получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 6V + 12(n - 1)&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;d = 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;d \leqslant V - 1&amp;lt;/tex&amp;gt;, то&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V - 1\geqslant 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Найдём единственный положительный корень неравенства&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначим за &amp;lt;tex&amp;gt;H(n) = \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt; V \leqslant H(n)&amp;lt;/tex&amp;gt;, то тогда граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; очевидно можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов и неравенство верное. Допустим, что &amp;lt;tex&amp;gt;V &amp;gt; H(n)&amp;lt;/tex&amp;gt;, тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; d &amp;lt; 6 + \dfrac{12(n - 1)}{H(n)} = H(n) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значит в такое графе существует хотя бы одна вершина степени не больше &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt;, стянем её с любой соседней и получим новый граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;V - 1&amp;lt;/tex&amp;gt; вершинами. Если &amp;lt;tex&amp;gt;V - 1 = H(n)&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, значит и сам граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно также раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, если &amp;lt;tex&amp;gt;V - 1 &amp;gt; H(n)&amp;lt;/tex&amp;gt;, то опять найдём вершину степени &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt; и снова стянем её и будем продолжать так до тех пор, пока не получим желаемый граф.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Из всего выше сказанного получаем, что &amp;lt;tex&amp;gt;\chi \left(S_n\right)&amp;lt;/tex&amp;gt; в точности равно &amp;lt;tex&amp;gt;\left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Проблема четырёх красок==&lt;br /&gt;
Заметим, что теорема Хивуда не работает при &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt;, поэтому [[проблема четырёх красок]] не может быть доказана с помощью этой теоремы, однако при подстановке &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\chi \left( S_0 \right) = 4&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;
* [https://en.wikipedia.org/wiki/Heawood_conjecture Wikipedia {{---}} Heawood conjecture]&lt;br /&gt;
* [https://oeis.org/A000934 Последовательность чисел Хивуда]&lt;br /&gt;
* Ф.Харари «Теория графов» {{---}} М.: Мир, 1973 г. {{---}} стр. 162 - 164&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=71957</id>
		<title>Гипотеза Хивуда</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=71957"/>
				<updated>2019-12-02T20:24:10Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|id = Heawood number&lt;br /&gt;
|definition =&lt;br /&gt;
'''Хроматическим числом поверхности поверхности &amp;lt;tex&amp;gt;S_n&amp;lt;/tex&amp;gt;''' или '''&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ым числом Хивуда''' называется число &amp;lt;tex&amp;gt;\chi \left( S_n \right)&amp;lt;/tex&amp;gt;, равное максимальному хроматическому числу графа, который можно уложить на поверхность &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ого рода.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
Теорема Рингеля и Янгса&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left\{ \dfrac{7 + \sqrt{1 + 48n}}{2} \right\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
В качестве доказательства воспользуемся теоремой Рингеля и Янгса о минимальном роде поверхности, на которую можно уложить граф &amp;lt;tex&amp;gt;K_p&amp;lt;/tex&amp;gt;, а именно &amp;lt;tex&amp;gt;n \left( K_p \right) \geqslant \left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt;, функция монотонно возрастает при &amp;lt;tex&amp;gt;p \geqslant 4&amp;lt;/tex&amp;gt;, и для любого &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; наибольшее значение функция &amp;lt;tex&amp;gt;\left\{ \dfrac{(p - 3)(p - 4)}{12} \right\}&amp;lt;/tex&amp;gt; достигается при &amp;lt;tex&amp;gt;p=\left[\dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;\chi\left(K_p\right) = p&amp;lt;/tex&amp;gt;, откуда получаем, что &amp;lt;tex&amp;gt;\chi \left( S_n \right) \geqslant \left\{ \dfrac{7 + \sqrt{1 + 48n}}{2} \right\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
Гипотеза Хивуда&lt;br /&gt;
|statement=&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;-ого рода &amp;lt;tex&amp;gt;\chi \left( S_n \right) \leqslant \left[ \dfrac{ 7 + \sqrt{1 + 48n} }{ 2 } \right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&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;E&amp;lt;/tex&amp;gt; рёбрами и &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; гранями, также будем считать, что &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; триангуляция (добавляя таким образом рёбра мы всё ещё получаем граф, который можно уложить на поверхности &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ого рода). Обозначим за &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; среднюю степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, тогда должно быть справедливым следующее равенство:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 2E = 3F&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Воспользуемся следующей формулой Эйлера&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V - E + F = 2 - 2 n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Откуда &amp;lt;tex&amp;gt;E = V + F + 2 (n - 1)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F = 2 V + 4 (n - 1)&amp;lt;/tex&amp;gt; и подставляя в первое равенство получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 6V + 12(n - 1)&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;d = 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;d \leqslant V - 1&amp;lt;/tex&amp;gt;, то получаем, что&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V - 1\geqslant 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Найдя единственный положительный корень неравенства получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначим за &amp;lt;tex&amp;gt;H(n) = \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt; V \leqslant H(n)&amp;lt;/tex&amp;gt;, то тогда граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; очевидно можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов и неравенство верное. Допустим, что &amp;lt;tex&amp;gt;V &amp;gt; H(n)&amp;lt;/tex&amp;gt;, тогда &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; d &amp;lt; 6 + \dfrac{12(n - 1)}{H(n)} = H(n) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значит в такое графе существует хотя бы одна вершина степени не больше &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt;, стянем её с любой соседней и получим новый граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;V - 1&amp;lt;/tex&amp;gt; вершинами. Если &amp;lt;tex&amp;gt;V - 1 = H(n)&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, значит и сам граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно также раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, иначе снова повторим наш алгоритм.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Проблема четырёх красок==&lt;br /&gt;
Заметим, что теорема Хивуда не работает при &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt;, поэтому [[проблема четырёх красок]] не может быть доказана с помощью этой теоремы, однако при подстановке &amp;lt;tex&amp;gt;n = 0&amp;lt;/tex&amp;gt; получаем, что &amp;lt;tex&amp;gt;\chi \left( S_0 \right) = 4&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;
* [https://en.wikipedia.org/wiki/Heawood_conjecture Wikipedia {{---}} Heawood conjecture]&lt;br /&gt;
* [https://oeis.org/A000934 Последовательность чисел Хивуда]&lt;br /&gt;
* Харари - Теория графов (стр. 162 - 164)&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=71949</id>
		<title>Гипотеза Хивуда</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%D0%B0_%D0%A5%D0%B8%D0%B2%D1%83%D0%B4%D0%B0&amp;diff=71949"/>
				<updated>2019-12-01T14:32:21Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Первая версия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|id = Heawood number&lt;br /&gt;
|definition =&lt;br /&gt;
'''Хроматическим числом поверхности поверхности &amp;lt;tex&amp;gt;S_n&amp;lt;/tex&amp;gt;''' или '''&amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ым числом Хивуда''' называется число &amp;lt;tex&amp;gt;\chi \left( S_n \right)&amp;lt;/tex&amp;gt;, равное максимальному хроматическому числу графа, который можно уложить на поверхность &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ого рода.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|about=&lt;br /&gt;
Теорема Хивуда о раскраске карт&lt;br /&gt;
|statement=&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;-ого рода определяется формулой &amp;lt;tex&amp;gt;\chi \left( S_n \right) = \left[ \dfrac{ 7 + \sqrt{1 + 48n} }{ 2 } \right]&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
&lt;br /&gt;
Для начала докажем &amp;lt;tex&amp;gt;\chi \left(S_n\right) \leqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&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;V&amp;lt;/tex&amp;gt; вершина, &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; рёбрами и &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; гранями, также будем считать, что &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; триангуляция (добавляя таким образом рёбра мы всё ещё получаем граф, который можно уложить на поверхности &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;-ого рода). Обозначим за &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;-&amp;lt;/tex&amp;gt; среднюю степень вершины графа &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;, тогда должно быть справедливым следующее равенство:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 2E = 3F&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Воспользуемся следующей формулой Эйлера&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V - E + F = 2 - 2 n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Откуда &amp;lt;tex&amp;gt;E = V + F + 2 (n - 1)&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;F = 2 V + 4 (n - 1)&amp;lt;/tex&amp;gt; и подставляя в первое равенство получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;dV = 6V + 12(n - 1)&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;d = 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;d \leqslant V - 1&amp;lt;/tex&amp;gt;, то получаем, что&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V - 1\geqslant 6 + \dfrac{12(n - 1)}{V}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Найдя единственный положительный корень неравенства получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;V \geqslant \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обозначим за &amp;lt;tex&amp;gt;H(n) = \left[ \dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt; V \leqslant H(n)&amp;lt;/tex&amp;gt;, то тогда граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; очевидно можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов и неравенство верное. Допустим, что &amp;lt;tex&amp;gt;V &amp;gt; H(n)&amp;lt;/tex&amp;gt;, тогда &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; d &amp;lt; 6 + \dfrac{12(n - 1)}{H(n)} = H(n) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Значит в такое графе существует хотя бы одна вершина степени не больше &amp;lt;tex&amp;gt;H(n) - 2&amp;lt;/tex&amp;gt;, стянем её с любой соседней и получим новый граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; с &amp;lt;tex&amp;gt;V - 1&amp;lt;/tex&amp;gt; вершинами. Если &amp;lt;tex&amp;gt;V - 1 = H(n)&amp;lt;/tex&amp;gt;, то граф &amp;lt;tex&amp;gt;G'&amp;lt;/tex&amp;gt; можно раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, значит и сам граф &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; можно также раскрасить в &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; цветов, иначе снова повторим наш алгоритм.&lt;br /&gt;
&lt;br /&gt;
Осталось доказать нижнюю границу для &amp;lt;tex&amp;gt;\chi \left(S_n\right)&amp;lt;/tex&amp;gt;, для этого воспользуемся неравенством&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;n \geqslant \gamma\left(K_p\right) = \left\{\frac{(p - 3)(p - 4)}{12}\right\}&amp;lt;/tex&amp;gt;, функция монотонно возрастает при &amp;lt;tex&amp;gt;p \geqslant 4&amp;lt;/tex&amp;gt;, и для любого &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; наибольшее значение функция &amp;lt;tex&amp;gt;\left\{\frac{(p - 3)(p - 4)}{12}\right\}&amp;lt;/tex&amp;gt; достигается при &amp;lt;tex&amp;gt;p=\left[\dfrac{7 + \sqrt{1 + 48n}}{2} \right]&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;\chi\left(K_p\right) = p&amp;lt;/tex&amp;gt;, откуда получаем, что &amp;lt;tex&amp;gt;H(n)&amp;lt;/tex&amp;gt; неулучшаемая нижняя граница для числа &amp;lt;tex&amp;gt;\chi\left(S_n\right)&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;
* [https://en.wikipedia.org/wiki/Heawood_conjecture Wikipedia {{---}} Heawood conjecture]&lt;br /&gt;
* [https://oeis.org/A000934 Последовательность чисел Хивуда]&lt;br /&gt;
* Харари - Теория графов (стр. 162 - 164)&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gaporf&amp;diff=71750</id>
		<title>Участник:Gaporf</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Gaporf&amp;diff=71750"/>
				<updated>2019-08-12T17:00:23Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Николай Акимов, группа M3238&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0&amp;diff=71669</id>
		<title>Алгебра</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B0&amp;diff=71669"/>
				<updated>2019-06-16T12:42:05Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Алгебра */ fixed operator&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Умножение линейных операторов=&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть &amp;lt;tex&amp;gt;\mathcal{A} \colon X \to Y &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{B} \colon Y \to Z &amp;lt;/tex&amp;gt;, причём &amp;lt;tex&amp;gt;\dim X = n&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\dim Y = m&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\dim Z = p&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда отображение &amp;lt;tex&amp;gt;\mathcal{C} \colon X \to Z&amp;lt;/tex&amp;gt; называется называется '''произведением линейных операторов''' &amp;lt;tex&amp;gt;\mathcal{B}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathcal{A} \ (\mathcal{C} = \mathcal{B} \cdot \mathcal{A})&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\forall x \in X \colon \ \mathcal{C}(x) = \mathcal{B}(\mathcal{A}x)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=Если &amp;lt;tex&amp;gt;\mathcal{C} = \mathcal{B} \cdot \mathcal{A}&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;\mathcal{C}&amp;lt;/tex&amp;gt; - '''линейный оператор''', т.е. &amp;lt;tex&amp;gt;\mathcal{C} \in X \times Z &amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof= УПРАЖНЕНИЕ&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\{e_i\}_{i=1}^n&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\{h_k\}_{k=1}^m&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\{l_s\}_{s=1}^p&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;Z&amp;lt;/tex&amp;gt; и пусть &amp;lt;tex&amp;gt; A_{[m \times n]} = ||\alpha_k^i||&amp;lt;/tex&amp;gt; - матрица &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; B_{[p \times m]} = ||\beta_k^i||&amp;lt;/tex&amp;gt; - матрица &amp;lt;tex&amp;gt;\mathcal{B}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C_{[p \times n]} = ||\gamma_k^i||&amp;lt;/tex&amp;gt; - матрица &amp;lt;tex&amp;gt;\mathcal{C}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\mathcal{C} = \mathcal{B} \cdot \mathcal{A}&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt;C = B \cdot A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
|proof=1. &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\mathcal{C}e_i = \sum\limits_{k=1}^{p} \gamma_{i}^{k} l_k&amp;lt;/tex&amp;gt;, т.е. &amp;lt;tex&amp;gt;\gamma_{i}^{k} = (Ce_i)^k&amp;lt;/tex&amp;gt; по определению матрицы &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
2. &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\mathcal{C}e_i = \mathcal{B} (\mathcal{A} e_i) = \mathcal{B} (\sum\limits_{j=1}^{m} \alpha_{i}^{j} h_j) \overset{\mathcal{B} - lin.op}{=} \sum\limits_{j=1}^{m} \alpha_{i}^{j} \mathcal{B}(h_j) = \sum\limits_{j=1}^{m} \alpha_{i}^{j} (\sum\limits_{k=1}^{p} \beta_{j}^{k} l_k) = &amp;lt;/tex&amp;gt;&amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt; \sum\limits_{k=1}^{p} (l_k \sum\limits_{j=1}^{m} \beta_{j}^{k} \alpha_{i}^{j}) &amp;lt;/tex&amp;gt;, тогда из 1 и 2: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\gamma_i^k = \sum\limits_{j=1}^{m} \beta_{j}^{k} \alpha_{i}^{j} \overset{def}{\Leftrightarrow} C_{[p \times n]} = B_{[p \times m]} \times A_{[m \times n]} &amp;lt;/tex&amp;gt;, для &amp;lt;tex&amp;gt;i = 1..n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;k = 1..p&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгебра и геометрия 1 курс]]&lt;br /&gt;
&lt;br /&gt;
=Алгебра=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Линейное пространство &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; над &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt; называется '''алгеброй''', если в нём задана вторая бинарная операция &amp;lt;tex&amp;gt;\cdot&amp;lt;/tex&amp;gt;, и при этом &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\forall x,y,z \in X &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \alpha \in F \colon&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
1) &amp;lt;tex&amp;gt;(x \cdot y) \cdot z = x \cdot (y \cdot z)&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2) &amp;lt;tex&amp;gt;(x + y) \cdot z = x \cdot z + y \cdot z&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
3) &amp;lt;tex&amp;gt;z \cdot (x + y) = z \cdot x + z \cdot y&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
4) &amp;lt;tex&amp;gt;\alpha(x \cdot y) = (\alpha x)y = x(\alpha y)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Nota Bene|notabene=Если &amp;lt;tex&amp;gt;\forall x,y \in X \colon x \cdot y = y \cdot x &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; называется '''коммутативной (абелевой)''' алгеброй.}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;X = F_n^n = \{ A_{[n \times n]} = ||\alpha_k^i||, \ \alpha_k^i \in F \}&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; - алгебра над &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt;. (не абелева)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&amp;lt;tex&amp;gt;X \times X&amp;lt;/tex&amp;gt; - алгебра над &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X \times X = \{ \mathcal{A} \colon X \Rightarrow X \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Изоморфные алгебры=&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; - алгебры над &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt;. Тогда назовём &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; '''изоморфными''', если &amp;lt;tex&amp;gt;\exists \Leftrightarrow&amp;lt;/tex&amp;gt; - линейный оператор между алгебрами, такой что &amp;lt;br&amp;gt;&lt;br /&gt;
1) &amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt; - взаимооднозначный л.о., т.е.&amp;lt;br&amp;gt;&lt;br /&gt;
Для &amp;lt;tex&amp;gt;x \in X, y \in Y \colon \ x \leftrightarrow y&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2) &amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt; сохраняет линейную и мультипликативную структуру&amp;lt;br&amp;gt;&lt;br /&gt;
 1. &amp;lt;tex&amp;gt;x_1 + x_2 \ \leftrightarrow \ y_1 + y_2&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 2. &amp;lt;tex&amp;gt;\alpha x_1 \ \leftrightarrow \ \alpha y_1&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 3. &amp;lt;tex&amp;gt;x_1x_2 \ \leftrightarrow \ x_1x_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Алгебры &amp;lt;tex&amp;gt;F_n^n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;X \times X&amp;lt;/tex&amp;gt; - изоморфны.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгебра и геометрия 1 курс]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80&amp;diff=71666</id>
		<title>Линейный оператор</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80&amp;diff=71666"/>
				<updated>2019-06-16T11:31:45Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Интегральный оператор */ fixed integral index&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Линейный оператор==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt; {{---}} линейные пространства над полем &amp;lt;tex&amp;gt;F&amp;lt;/tex&amp;gt;. Отображение &amp;lt;tex&amp;gt;\mathcal{A} \colon X \to Y&amp;lt;/tex&amp;gt; называется линейным оператором, если &amp;lt;tex&amp;gt;\forall x_1,x_2 \in X&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\forall \lambda \in F&amp;lt;/tex&amp;gt;:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathcal{A}(x_1+x_2)=\mathcal{A}(x_1)+\mathcal{A}(x_2)&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\mathcal{A}(\lambda \cdot x_1) = \lambda \cdot \mathcal{A}(x_1)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Линейный оператор &amp;lt;tex&amp;gt;\mathcal{A} \colon X \to X&amp;lt;/tex&amp;gt; называется автоморфизмом (или гомоморфизмом).&lt;br /&gt;
}}&lt;br /&gt;
{{Nota Bene|notabene=&amp;lt;tex&amp;gt;\mathcal{A}(x) = \mathcal{A}x&amp;lt;/tex&amp;gt;}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть &amp;lt;tex&amp;gt;\mathcal{A},\mathcal{B}\colon X \to Y&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{A}=\mathcal{B}&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;\forall x \in X:\mathcal{A}x = \mathcal{B}x&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&amp;lt;tex&amp;gt;\mathcal{O}&amp;lt;/tex&amp;gt; называется нулевым оператором, если &amp;lt;tex&amp;gt;\forall x, y \in X : \mathcal{O}x=\mathcal{O}y&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;I \colon X \to X&amp;lt;/tex&amp;gt;  по формуле &amp;lt;tex&amp;gt;Ix=x&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Линейный оператор проектирования ===&lt;br /&gt;
&amp;lt;tex&amp;gt;X=L_1 + L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{P}_{L_1}^{||L_2} \colon X \to L_1&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{P}_{L_2}^{||L1} \colon X \to L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NB: &amp;lt;tex&amp;gt;\mathcal{P}_{L_{1,2}}^{||L_{2,1}}\colon X \to X&amp;lt;/tex&amp;gt; (&amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; {{---}} п.п. &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
=== Оператор дифференцирования ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X=P_n&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{D} \colon P_n \to P_{n-1}&amp;lt;/tex&amp;gt; по формуле &amp;lt;tex&amp;gt;(\mathcal{D}p)(t)={dp(t) \over dt} = p^{'}(t)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Интегральный оператор ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;X = C(a,b); K(s,t)&amp;lt;/tex&amp;gt; - непрерывная функция; &amp;lt;tex&amp;gt; s \in (a,b); t \in (a,b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;(\mathcal{B}f)(s) = \int\limits_a^b K(s,t) \cdot f(t) \cdot dt&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{B} \colon C(a,b) \to C(a,b)&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Матрица линейного оператора ==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} \colon X \to Y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть п.п. &amp;lt;tex&amp;gt;X \leftrightarrow \{e_k\}_{k=1}^n, \dim X=n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть п.п. &amp;lt;tex&amp;gt;Y \leftrightarrow \{h_i\}_{i=1}^m, \dim Y = m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\underset{1\leq k\leq n}{\mathcal{A}e_k}=\displaystyle \sum_{i=1}^m \alpha_k^i \cdot h_i \Rightarrow A=||\alpha_k^i||&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;1\leq i\leq m, 1 \leq k \leq n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
A=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
\alpha_1^1 &amp;amp; \cdots &amp;amp; \alpha_n^1 \\&lt;br /&gt;
\alpha_1^2 &amp;amp; \cdots &amp;amp; \alpha_n^2 \\&lt;br /&gt;
\cdots &amp;amp; \cdots &amp;amp; \cdots \\&lt;br /&gt;
\alpha_1^m &amp;amp; \cdots &amp;amp; \alpha_n^m \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Nota Bene|notabene=Обратите внимание, что &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; означает оператор, а &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; {{---}} матрицу этого оператора.}}&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== Нулевой оператор ===&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
\mathcal{O}_{[m \times n]}=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
0 &amp;amp; \cdots &amp;amp; 0 \\&lt;br /&gt;
\cdots &amp;amp; \cdots &amp;amp; \cdots \\&lt;br /&gt;
0 &amp;amp; \cdots &amp;amp; 0 \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Оператор дифференцирования ===&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{D} \colon P_n \to P_{n-1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{1,t,t^2,...,t^n\}&amp;lt;/tex&amp;gt; - базис &amp;lt;tex&amp;gt;P_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;&lt;br /&gt;
D=&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
0 &amp;amp; 1 &amp;amp; 0 &amp;amp; 0 &amp;amp; \cdots &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 2 &amp;amp; 0 &amp;amp; \cdots &amp;amp; 0 \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 3 &amp;amp;\cdots &amp;amp; 0 \\&lt;br /&gt;
\cdots &amp;amp; \cdots &amp;amp; \cdots &amp;amp; \cdots &amp;amp;\cdots &amp;amp; \cdots \\&lt;br /&gt;
0 &amp;amp; 0 &amp;amp; 0 &amp;amp; 0 &amp;amp;\cdots &amp;amp; n \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Теорема об эквивалентности задания линейного оператора==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Задание Л.О. &amp;lt;tex&amp;gt;\mathcal{A}: X \rightarrow Y \Leftrightarrow &amp;lt;/tex&amp;gt; заданию его матрицы в паре базисов &amp;lt;tex&amp;gt;\{x_i\}_{i=1}^{n}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\{h_k\}_{k=1}^{m}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt; \Rightarrow \mathcal{A} = \sum\limits_{k=1}^{m} \alpha_{k}^{i}h_k &amp;lt;/tex&amp;gt; (единственным образом) &amp;lt;tex&amp;gt; \Rightarrow A=||\alpha_k^i||&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;1\leq i\leq n, 1 \leq k \leq m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Leftarrow x= \sum\limits_{i=1}^{n} \xi^i e_i &amp;lt;/tex&amp;gt; (единственным образом)&lt;br /&gt;
&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;\mathcal{A}x= \mathcal{A}(\sum\limits_{i=1}^{n} \xi^ie_i)= \sum\limits_{i=1}^{n} \xi^i \mathcal{A}e_i= \sum\limits_{i=1}^{n} \xi^i \sum\limits_{k=1}^{m} \alpha_{i}^{k}h_k=\sum\limits_{k=1}^{m}(\sum\limits_{i=1}^{n} \alpha_{i}^{k} \xi^i)h_k &amp;lt;/tex&amp;gt; (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\mathcal{A}x=y=\sum\limits_{k=1}^{m} \eta^kh_k &amp;lt;/tex&amp;gt; (2)&lt;br /&gt;
&lt;br /&gt;
из (1) и (2) получим, что &amp;lt;tex&amp;gt;\eta^k=\sum\limits_{i=1}^{n} \alpha_{i}^{k} \xi^i \Leftrightarrow A \cdot X= Y&amp;lt;/tex&amp;gt; (умножение матриц), тогда &amp;lt;tex&amp;gt;\mathcal{A}x=y&amp;lt;/tex&amp;gt;  &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгебра и геометрия 1 курс]]&lt;br /&gt;
[[Категория: Линейные операторы]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9&amp;diff=71635</id>
		<title>Универсальное семейство хеш-функций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%81%D0%B5%D0%BC%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D1%85%D0%B5%D1%88-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9&amp;diff=71635"/>
				<updated>2019-06-04T13:27:38Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Определение */ исправил опечатку&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Определение==&lt;br /&gt;
&lt;br /&gt;
Качественная хеш-функция (англ. ''hash function'') удовлетворяет (приближенно) условию простого равномерного [[Хеширование|хеширования]]: для каждого ключа, независимо от хеширования других ключей, равновероятно помещение его в любую из &amp;lt;tex&amp;gt; m &amp;lt;/tex&amp;gt; ячеек. Но это условие обычно невозможно проверить, так как распределение вероятностей, с которыми поступают входные данные, как правило, неизвестно. К тому же, вставляемые ключи могут и не быть независимыми. Если наш противник будет умышленно выбирать ключи для хеширования при помощи конкретной хеш-функции, то при некоторых реализациях хеш-таблиц может получиться так, что все ключи будут записаны в одну и ту же ячейку таблицы, что приведет к среднему времени выборки &amp;lt;tex&amp;gt; \Theta(n) &amp;lt;/tex&amp;gt;. Таким образом,  любая фиксированная хеш-функция становится уязвимой. И единственный эффективный выход из данной ситуации {{---}} случайный выбор хеш-функции. Такой подход называется универсальным хешированием. Он гарантирует хорошую производительность в среднем, вне зависимости от данных, выбранных нашим противником.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; H &amp;lt;/tex&amp;gt; {{---}} конечное множество хеш-функций, которые отображают пространство ключей &amp;lt;tex&amp;gt;\ U &amp;lt;/tex&amp;gt; в диапазон &amp;lt;tex&amp;gt; \{0, 1, 2, .. , m - 1\} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Такое множество называется '''универсальным''' (англ.  ''universal''), если для каждой пары ключей &amp;lt;tex&amp;gt; k, l \in U, (k\ne l)&amp;lt;/tex&amp;gt; количество хеш-функций &amp;lt;tex&amp;gt; h \in H &amp;lt;/tex&amp;gt;, для которых &amp;lt;tex&amp;gt; h(k) = h(l) &amp;lt;/tex&amp;gt; не превышает &amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt; \frac{|H|}{m} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Иными словами, при случайном выборе хеш-функции из &amp;lt;tex&amp;gt; H &amp;lt;/tex&amp;gt; вероятность коллизии между различными ключами &amp;lt;tex&amp;gt; k, l &amp;lt;/tex&amp;gt; не превышает вероятности совпадения двух случайным образом выбранных хеш-значений из множества &amp;lt;tex&amp;gt; \{0, 1, 2, .. , m - 1\} &amp;lt;/tex&amp;gt;, которая равна &amp;lt;tex dpi = &amp;quot;180&amp;quot;&amp;gt; \frac{1}{m} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Построение универсального множества хеш-функций==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Множество хеш функций &amp;lt;tex&amp;gt;H_{p,m}=\{h_{a,b}:a\in Z_p^*,b\in Z_p\}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;h_{a,b}(k)=((ak+b)\bmod p)\bmod m&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;Z_p^*=\{1,2,\dots,p-1\}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;Z_p=\{0,1,\dots,p-1\}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} простое число, является универсальным.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим &amp;lt;tex&amp;gt;k,l\in Z_p:k\ne l&amp;lt;/tex&amp;gt;. Пусть для данной хеш-функции &amp;lt;tex&amp;gt;h_{a,b}&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r=(ak+b)\bmod p&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s=(al+b)\bmod p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;r\ne s&amp;lt;/tex&amp;gt;, так как &amp;lt;tex&amp;gt;r-s\equiv a(k-l)\pmod p&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} простое число, &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(k-l)&amp;lt;/tex&amp;gt; не равны нулю по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Значит, произведение &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; также отлично от нуля по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Таким, образом, коллизии &amp;quot;по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;&amp;quot; отсутствуют. Более того, каждая из &amp;lt;tex&amp;gt;p(p-1)&amp;lt;/tex&amp;gt; возможных пар &amp;lt;tex&amp;gt;(a,b)&amp;lt;/tex&amp;gt;, приводят к различным парам &amp;lt;tex&amp;gt;(r,s):r\ne s&amp;lt;/tex&amp;gt;. Чтобы доказать это, достаточно рассмотреть возможность однозначного определения &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt; по заданным &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a=\left((r-s)((k-l)^{-1}\bmod p)\right)\bmod p,\ b=(r-ak)\bmod p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поскольку имеется только &amp;lt;tex&amp;gt;p(p-1)&amp;lt;/tex&amp;gt; возможных пар &amp;lt;tex&amp;gt;(r,s):r\ne s&amp;lt;/tex&amp;gt;, то имеется взаимнооднозначное соответствие между парами &amp;lt;tex&amp;gt;(a,b)&amp;lt;/tex&amp;gt; и парами &amp;lt;tex&amp;gt;(r,s):r\ne s&amp;lt;/tex&amp;gt;. Таким образом, для любых &amp;lt;tex&amp;gt;k,l&amp;lt;/tex&amp;gt; при равномерном случайном выборе пары &amp;lt;tex&amp;gt;(a,b)&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;Z_p^*\times Z_p&amp;lt;/tex&amp;gt;, получаемая в результате пара &amp;lt;tex&amp;gt;(r,s)&amp;lt;/tex&amp;gt; может быть с равной вероятностью любой из пар с отличающимися значениями по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отсюда следует, что вероятность того, что различные ключи &amp;lt;tex&amp;gt;k,l&amp;lt;/tex&amp;gt; приводят к коллизии, равна вероятности того, что &amp;lt;tex&amp;gt;r\equiv s\pmod m&amp;lt;/tex&amp;gt; при произвольном выборе отличающихся по модулю &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; значений &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. Для данного &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; имеется &amp;lt;tex&amp;gt;p-1&amp;lt;/tex&amp;gt; возможное значение &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. При этом число значений &amp;lt;tex&amp;gt;s:s\ne r&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;s\equiv r\pmod p&amp;lt;/tex&amp;gt;, не превышает&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\left\lceil \frac{p}{m}\right\rceil-1\le\frac{p+m-1}{m}-1=\frac{p-1}{m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вероятность того, что &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; приводит к коллизии с &amp;lt;tex&amp;gt;r&amp;lt;/tex&amp;gt; при приведении по модулю &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt;, не превышает &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\frac{p-1}{m}\cdot\frac{1}{p-1}=\frac{1}{m}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt;\forall k\ne l\in Z_p\ P(h_{a,b}(k)=h_{a,b}(l))\le\frac{1}{m}&amp;lt;/tex&amp;gt;, что означает, что множество хеш-функций &amp;lt;tex&amp;gt;H_{p,m}&amp;lt;/tex&amp;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; H &amp;lt;/tex&amp;gt; {{---}} универсальное семейство хеш-функций.&lt;br /&gt;
Говорят что оно обладает свойством '''попарной независимости'''(англ. ''pairwise independence''), если при фиксированных &amp;lt;tex&amp;gt; x, y&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt; (0 \le x, y \le m-1)&amp;lt;/tex&amp;gt; для каждой пары ключей &amp;lt;tex&amp;gt; k, l \in U (k\ne l) &amp;lt;/tex&amp;gt;  вероятность того, что &amp;lt;tex&amp;gt; h(k) = x &amp;lt;/tex&amp;gt;  и  &amp;lt;tex&amp;gt; h(l) = y &amp;lt;/tex&amp;gt;, равна  &amp;lt;tex dpi = &amp;quot;150&amp;quot;&amp;gt; \frac{1}{m^2} + o(\frac{1}{m^2}) &amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Построение попарно независимого множества хеш-функций==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Семейство хеш функций, описанное выше, также является попарно независимым.&lt;br /&gt;
|proof=&lt;br /&gt;
Для функции &amp;lt;tex&amp;gt;h_{a,b}&amp;lt;/tex&amp;gt; получаем&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;x = (ak+b)\bmod p \bmod m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;y = (al+b)\bmod p \bmod m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выразим отсюда &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;. Вычтя из первого уравнения второе, получим:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;x - y = a(k - l)\bmod p \bmod m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь сначала первое домножим на &amp;lt;tex&amp;gt;l&amp;lt;/tex&amp;gt;, и второе на &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;. Вычитаем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;lx - ky = b(l - k)\bmod p \bmod m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запишем иначе:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;x - y \equiv a(k - l)+im \pmod p&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;lx - ky \equiv b(l - k)+jm \pmod p&amp;lt;/tex&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;tex dpi = &amp;quot;135&amp;quot;&amp;gt; 0 \le i, j &amp;lt; \lfloor \frac{p}{m} \rfloor &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что эти равенства мы считаем выполненными, если при данных &amp;lt;tex&amp;gt;a, b, x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и '''каких-либо''' &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; они будут верными (исходя из того как мы их получили).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;k \ne l&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; {{---}} простое, тогда&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;a \equiv (k - l)^{-1}(x - y - im) \pmod p&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;b \equiv (l - k)^{-1}(lx - ky - jm)&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;\pmod p&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь заметим, что &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; принимает &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; различных значений, а &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;\lfloor \frac{p}{m} \rfloor&amp;lt;/tex&amp;gt; значений. Понятно, что для заданных &amp;lt;tex&amp;gt;x, y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; с вероятностью лишь  &amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt; \frac{1}{m} &amp;lt;/tex&amp;gt;  найдётся &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;, обращающий первое равенство в тождество; аналогично и со вторым равенством.   &lt;br /&gt;
&lt;br /&gt;
Остаётся подытожить наши выкладки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;P( [x = (ak+b)\bmod p \bmod m]&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt;\wedge&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;[y = (al+b)\bmod p \bmod m])&amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;P( [a \equiv (k - l)^{-1}(x - y - im)&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;\pmod p]&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt;\wedge&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;[b \equiv (l - k)^{-1}(lx - ky - jm)&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;\pmod p])&amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;P( a \equiv (k - l)^{-1}(x - y - im)&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;\pmod p)&amp;lt;/tex&amp;gt;  &amp;lt;tex&amp;gt;\cdot&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;P( b \equiv (l - k)^{-1}(lx - ky - jm)&amp;lt;/tex&amp;gt;   &amp;lt;tex&amp;gt;\pmod p)&amp;lt;/tex&amp;gt; &lt;br /&gt;
&amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;=&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex dpi = &amp;quot;130&amp;quot;&amp;gt;(\frac{1}{m} + o(\frac{1}{m})) \cdot (\frac{1}{m} + o(\frac{1}{m})) = \frac{1}{m^2} + o(\frac{1}{m^2})&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Переход к третьей строчке объясняется тем, что события, объединённые знаком &amp;lt;tex&amp;gt;\wedge&amp;lt;/tex&amp;gt;, независимы (т.к. случайные величины здесь только &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;b&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;x, y, k, l&amp;lt;/tex&amp;gt; {{---}} фиксированы).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
* Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн Алгоритмы: построение и анализ — 2-е изд. — М.: «Вильямс», 2005. — с. 294. — ISBN 5-8459-0857-4&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]][[Категория:Хеширование]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71306</id>
		<title>Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71306"/>
				<updated>2019-05-23T19:51:50Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Контекстно-свободная грамматика */ тире&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в [[нормальная форма Хомского|нормальной форме Хомского]] и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&amp;lt;/tex&amp;gt;. Требуется выяснить, выводится ли это слово в данной грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Контекстно-свободная грамматика ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная грамматика]]''' ('''КС-грамматика''', '''бесконтекстная грамматика''') {{---}} способ описания формального языка, представляющий собой четверку&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} [[Основные_определения: алфавит, слово, язык, конкатенация, свободный моноид слов|алфавит]], элементы которого называют '''терминалами''' (англ. ''terminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; {{---}} множество, элементы которого называют '''нетерминалами''' (англ. ''nonterminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} начальный символ грамматики (англ. ''start symbol'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} набор правил вывода (англ. ''production rules'' или ''productions'') вида &amp;lt;tex&amp;gt;A \rightarrow B_1 B_2 \ldots B_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \in N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_i \in \Sigma \cup N&amp;lt;/tex&amp;gt;, то есть у которых левые части {{---}} одиночные нетерминалы, а правые {{---}} последовательности терминалов и нетерминалов.&lt;br /&gt;
}}&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
Терминалы &amp;lt;tex&amp;gt;\Sigma = \{(, )\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt;N = \{S\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Правила вывода &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}  &lt;br /&gt;
 S \rightarrow \varepsilon\\&lt;br /&gt;
 S \rightarrow SS\\&lt;br /&gt;
 S \rightarrow (S)\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная грамматика задает язык [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]]. Например, последовательность &amp;lt;tex&amp;gt;(()(()))&amp;lt;/tex&amp;gt; может быть выведена следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S \Rightarrow (S) \Rightarrow (SS) \Rightarrow (()(S)) \Rightarrow (()(())) &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;A \rightarrow a&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; {{---}} терминал&lt;br /&gt;
* &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} нетерминалы, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; не являются начальными нетерминалами&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;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;
'''Алгоритм Кока-Янгера-Касами''' (англ. ''Cocke-Younger-Kasami algorithm'', англ. ''CYK-алгоритм'') {{---}} алгоритм, позволяющий по слову узнать, выводимо ли оно в заданной КС-грамматике в нормальной форме Хомского. Любую КС-грамматику можно привести к НФХ, поэтому алгоритм является универсальным для любой КС-грамматики.&lt;br /&gt;
&lt;br /&gt;
Будем решать задачу [[Динамическое_программирование|динамическим программированием]]. Дана строка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Заведем для неё трехмерный массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;|N| \times n \times n&amp;lt;/tex&amp;gt;, состоящий из логических значений, и &amp;lt;tex&amp;gt;d[A][i][j] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; правилами грамматики можно вывести подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим все пары &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle | j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i = j&amp;lt;/tex&amp;gt;. Инициализируем массив для всех нетерминалов, из которых выводится какой-либо символ строки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. В таком случае &amp;lt;tex&amp;gt;d[A][i][i] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;. Иначе &amp;lt;tex&amp;gt;d[A][i][i] = false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i \ne j&amp;lt;/tex&amp;gt;. Значения для всех нетерминалов и пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle | j' - i' &amp;lt; m \rbrace&amp;lt;/tex&amp;gt; уже вычислены, поэтому &amp;lt;tex&amp;gt;d[A][i][j] = \bigvee\limits_{A \rightarrow BC}\bigvee\limits_{k = i}^{j-1} d[B][i][k] \wedge d[C][k+1][j] \ \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если существует продукция вида &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt; и такое &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что подстрока &amp;lt;tex&amp;gt;w[i \ldots k]&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[k + 1 \ldots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Файл:CYK_rule_2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
После окончания работы значение &amp;lt;tex&amp;gt;d[S][1][n]&amp;lt;/tex&amp;gt; содержит ответ на вопрос, выводима ли данная строка в данной грамматике, где &amp;lt;tex&amp;gt;S&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;d[A][i][j] = \sum\limits_{A \rightarrow BC}\sum\limits_{k = i}^{j-1} d[B][i][k] \cdot d[C][k + 1][j] \ \ &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} количество способов получить подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Минимальная стоимость вывода слова ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;H(A \rightarrow BC)&amp;lt;/tex&amp;gt; {{---}} стоимость вывода по правилу &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;. Тогда, если использовать формулу &amp;lt;tex&amp;gt;d[A][i][j] = \min\limits_{A \rightarrow BC} \min\limits_{k = i}^{j-1}  ( d[B][i][k] + d[C][k + 1][j] + H(A \rightarrow BC) ) \ \ &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} минимальная стоимость вывода подстроки &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&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;A \rightarrow w[i]&amp;lt;/tex&amp;gt; выполняется за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проход по всем подстрокам выполняется за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;. В обработке одной подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. В итоге получаем конечную сложность &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, общее время работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. Кроме того, алгоритму требуется память на массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; объемом &amp;lt;tex&amp;gt;O(n^2 \cdot |N|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|N|&amp;lt;/tex&amp;gt; {{---}}  количество [[Формальные_грамматики#Определения|нетерминалов]] грамматики.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
Дана грамматика [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в нормальной форме Хомского.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}   &lt;br /&gt;
 A \rightarrow \varepsilon\ |\ BB\ |\ CD\\&lt;br /&gt;
 B \rightarrow BB\ |\ CD\\&lt;br /&gt;
 C \rightarrow (\\&lt;br /&gt;
 D \rightarrow BE\ |\ )\\&lt;br /&gt;
 E \rightarrow )\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дано слово &amp;lt;tex&amp;gt;w = ()(())&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Инициализация массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заполнение массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также == &lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики|Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
* [[Алгоритм_Эрли|Алгоритм Эрли]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:CYK_algorithm|Wikipedia {{---}} CYK algorithm]]&lt;br /&gt;
* [http://web.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf David Rodriguez-Velazquez, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
* [https://www.princeton.edu/~achaney/tmve/wiki100k/docs/CYK_algorithm.html Princeton University, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Динамическое программирование]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71305</id>
		<title>Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71305"/>
				<updated>2019-05-23T19:43:11Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия ещё&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=csgrammar&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободной грамматикой''' (англ. ''сontext-free grammar'') называется [[Формальные грамматики|грамматика]], у которой в левых частях всех правил стоят только одиночные нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=lang&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободный язык''' (англ. ''context-free language'') {{---}} язык, задаваемый контекстно-свободной грамматикой.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лево- и правосторонний вывод слова==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Выводом слова''' (англ. ''derivation of a word'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово &amp;lt;tex&amp;gt;\alpha&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;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы &lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал &lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow S(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выведем слово &amp;lt;tex&amp;gt;(()(()))()&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (S)\boldsymbol{S} \Rightarrow (S)(\boldsymbol{S})S\Rightarrow(S)()\boldsymbol{S}\Rightarrow(\boldsymbol{S})()\Rightarrow(\boldsymbol{S}(S))()\Rightarrow(S(S)(\boldsymbol{S}))()\Rightarrow(S(S)(\boldsymbol{S}(S)))()\Rightarrow (S(\boldsymbol{S})((S)))()\Rightarrow(\boldsymbol{S}()((S)))()\Rightarrow(()((\boldsymbol{S})))()\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левосторонним выводом слова''' (англ. ''leftmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правосторонним выводом слова''' (англ. ''rightmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим левосторонний вывод скобочной последовательности из примера:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дерево разбора==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Крона дерева разбора''' (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Построим дерево разбора скобочной последовательности из примера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree1.png]]&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и кроной &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\omega \in N^{*}&amp;lt;/tex&amp;gt;. Тогда в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; существует левое порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Используем индукцию по высоте дерева.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Базисом является высота &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, наименьшая из возможных для дерева разбора с терминальной кроной.&lt;br /&gt;
:Поскольку это дерево является деревом разбора, &amp;lt;tex&amp;gt;A \rightarrow \omega&amp;lt;/tex&amp;gt; должно быть продукцией. Таким образом, &amp;lt;tex&amp;gt;A \Rightarrow_{lm} \omega&amp;lt;/tex&amp;gt; есть одношаговое левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Существует корень с отметкой &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и сыновьями, отмеченными слева направо &amp;lt;tex&amp;gt;X_1X_2 \ldots X_k&amp;lt;/tex&amp;gt;. Символы &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; могут быть как терминалами, так и переменными.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то определим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; как цепочку, состоящую из одного &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Заметим, что в этом случае высота поддерева меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение &amp;lt;tex&amp;gt;X_i \Rightarrow^{*}_{lm} \omega_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\omega = \omega_1\omega_2 \ldots \omega_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим левое порождение цепочки &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
:Начнем с шага &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\ldots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Затем для &amp;lt;tex&amp;gt;i = 1, 2, \ldots, k \ &amp;lt;/tex&amp;gt; покажем, что имеет место следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное доказательство использует в действительности еще одну индукцию, на этот раз по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для базиса &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt; мы уже знаем, что &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\ldots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для индукции предположим, что существует следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_{i–1}X_iX_{i+1}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то не делаем ничего, но в дальнейшем рассматриваем &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; как терминальную цепочку &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Таким образом, приходим к существованию следующего порождения. &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; является переменной, то продолжаем порождением &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; в контексте уже построенного порождения. Таким образом, если этим порождением является: &amp;lt;tex&amp;gt;X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2\ldots \Rightarrow_{lm} \omega_i&amp;lt;/tex&amp;gt;, то продолжаем следующими порождениями: &lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_{i–1}X_iX_{i+1}\ldots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_{i–1}\alpha_1X_{i+1}\ldots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_{i–1}\alpha_2X_{i+1}\ldots X_k  \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом является порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда &amp;lt;tex&amp;gt;i = k&amp;lt;/tex&amp;gt;, результат представляет собой левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t2&lt;br /&gt;
|statement=Для каждой грамматики &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;N^{*}&amp;lt;/tex&amp;gt; цепочка &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных дерева разбора тогда и только тогда, когда &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных левых порождения из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве [[#t1|теоремы]]. В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Longleftarrow &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;
|definition=&lt;br /&gt;
Грамматика называется '''однозначной''' (англ. ''unambiguous grammar''), если у каждого слова имеется не более одного дерева разбора в этой грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma-&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} однозначная грамматика. Тогда &amp;lt;tex&amp;gt;\forall \omega \in \mathbb{L}(\Gamma)&amp;lt;/tex&amp;gt; существует ровно один левосторонний (правосторонний) вывод.&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Грамматика из примера не является однозначной.&lt;br /&gt;
|proof=Выше уже было построено дерево разбора для слова &amp;lt;tex&amp;gt;(()(()))()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим еще одно дерево разбора для данного слова.&lt;br /&gt;
&lt;br /&gt;
Например, оно будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree2.png]]&lt;br /&gt;
Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике &amp;lt;tex&amp;gt;\Rightarrow&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;
:&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы&lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта грамматика однозначна.&lt;br /&gt;
Для этого, используя индукцию, докажем, что для любого слова &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Если &amp;lt;tex&amp;gt;\omega=\varepsilon&amp;lt;/tex&amp;gt;, то оно выводится только по второму правилу &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; для него существует единственное дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Пусть &amp;lt;tex&amp;gt;\left\vert \omega \right\vert=n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \upsilon&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\left\vert \upsilon \right\vert &amp;lt; n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\upsilon&amp;lt;/tex&amp;gt; {{---}} правильная скобочная последовательность, у которой &amp;lt;tex&amp;gt;\exists!&amp;lt;/tex&amp;gt; дерево разбора. &lt;br /&gt;
&lt;br /&gt;
:Найдем в слове &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; минимальный индекс &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; такой, что слово &amp;lt;tex&amp;gt;\omega[0 \ldots i]&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью. Так как &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; минимальный, то &amp;lt;tex&amp;gt;\omega[0 \ldots i]=(\alpha)\ &amp;lt;/tex&amp;gt;. Из того, что &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;\beta=\omega[i+1 \ldots n-1]&amp;lt;/tex&amp;gt; {{---}} правильные скобочные последовательности, при этом &amp;lt;tex&amp;gt;\left\vert \alpha \right\vert&amp;lt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\vert \beta \right\vert&amp;lt;n \Rightarrow&amp;lt;/tex&amp;gt; по индукционному предположению предположению у &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; существуют единственные деревья разбора.&lt;br /&gt;
&lt;br /&gt;
:Если мы покажем, что из части &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; первого правила можно вывести только слово &amp;lt;tex&amp;gt;(\alpha)&amp;lt;/tex&amp;gt;, то утверждение будет доказано (так как из первой части первого правила выводится &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, а из второй только &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и для каждого из них по предположению существуют единственные деревья разбора).&lt;br /&gt;
&lt;br /&gt;
:Пусть из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0 \ldots j]=(\gamma)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt;, при этом &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, а не &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} противоречие. &lt;br /&gt;
&lt;br /&gt;
:Аналогично из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; не может быть выведена часть слова &amp;lt;tex&amp;gt;\omega[0 \ldots j] \ &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;, потому что тогда &amp;lt;tex&amp;gt;\omega[0 \ldots i]=(\alpha) \ &amp;lt;/tex&amp;gt; не будет правильной скобочной последовательностью, так как в позиции &amp;lt;tex&amp;gt;i-1&amp;lt;/tex&amp;gt; баланс скобок будет отрицательный.&lt;br /&gt;
&lt;br /&gt;
:Значит, из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0 \ldots i] \Rightarrow \omega \ &amp;lt;/tex&amp;gt; имеет единственное дерево разбора &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; данная грамматика однозначная.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют '''существенно неоднозначными'''.&lt;br /&gt;
{{main|Существенно неоднозначные языки}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Формальные грамматики]]&lt;br /&gt;
* [[Иерархия Хомского формальных грамматик]]&lt;br /&gt;
* [[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
* [[Существенно неоднозначные языки]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]]&lt;br /&gt;
* [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]]&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71304</id>
		<title>Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71304"/>
				<updated>2019-05-23T19:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Псевдокод */ tex&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&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;
Будем решать задачу динамическим программированием. Введём динамику &amp;lt;tex&amp;gt;a\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i \ldots j-1]\right] \ &amp;lt;/tex&amp;gt;, аналогично [[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|базовой версии]] алгоритма.  &lt;br /&gt;
&lt;br /&gt;
Также введём вспомогательный четырехмерный массив &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, j, k\right] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим все тройки &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle \mid j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;k &amp;lt; \left|\alpha\right|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''База динамики''': &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i] \ &amp;lt;/tex&amp;gt;, иначе  &amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i\right] =  true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow \varepsilon \ &amp;lt;/tex&amp;gt;, иначе &amp;lt;tex&amp;gt;a\left[A, i, i\right] =  false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] = true \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Переход''': &lt;br /&gt;
&lt;br /&gt;
:Пусть значения для всех нетерминалов, пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle \mid j' - i' &amp;lt; m \rbrace \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lbrace k' \mid k' &amp;lt; k \rbrace \ &amp;lt;/tex&amp;gt; уже вычислены, поэтому вспомогательная динамика: &amp;lt;tex&amp;gt; h\left[A \rightarrow \alpha, i, j+1, k\right] = \bigvee\limits_{r=i \ldots j+1}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha\left[k\right],r,j+1\right]\right)&amp;lt;/tex&amp;gt; То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right]&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го символа правой части правила. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j+1\right] &amp;lt;/tex&amp;gt;, но на результат это не повлияет, так как в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]=false \ &amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Но если &amp;lt;tex&amp;gt;\alpha\left[k\right]&amp;lt;/tex&amp;gt;  {{---}}  терминал, то подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right] \ &amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится, если &amp;lt;tex&amp;gt;w\left[r \ldots j\right]=\alpha\left[k\right] \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Базовая динамика выражается так: &amp;lt;tex&amp;gt;a\left[A,i,j\right]=\bigvee\limits_{A \rightarrow \alpha}h\left[A \rightarrow \alpha, i, j, \left|\alpha\right|\right] \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j-1] \ &amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если из длины правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right] &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* '''Завершение''': &lt;br /&gt;
&lt;br /&gt;
:После окончания работы ответ содержится в ячейке &amp;lt;tex&amp;gt;a\left[S, 1, n\right] &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 '''CYK_Modified'''(S, Г): &amp;lt;font color = darkgreen&amp;gt;// S {{---}} строка длины n, Г {{---}} КС-грамматика &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
       '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''if'''( A -&amp;gt; w[i] in Г) a[A, i, i+1] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; w[i] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i+1] = false&lt;br /&gt;
        '''if'''( A -&amp;gt; eps in Г) a[A, i, i] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; eps &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i] = false&lt;br /&gt;
        h[A-&amp;gt;alpha, i, i, 0] = true&lt;br /&gt;
      '''for''' m = 1..n&lt;br /&gt;
       '''for''' i = 1..n&lt;br /&gt;
           j = i+m&lt;br /&gt;
        '''for''' k = 1..M&lt;br /&gt;
         '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          h[A-&amp;gt;alpha, i, j+1, k] = OR( for r = i..j+1) (h[A-&amp;gt;alpha, i, r, k-1] &amp;amp; a[alpha[k],r,j+1])&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
        '''for''' j = 1..n&lt;br /&gt;
          '''for''' Rj -&amp;gt; alpha&lt;br /&gt;
           a[A, i, j] = OR( for A-&amp;gt;alpha) h[A-&amp;gt;alpha, i, j, |alpha|] &amp;lt;font color = darkgreen&amp;gt;// где |alpha| {{---}} размер правой части правила&amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''return''' a[S, 1, n]     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;M = \max\limits_{A \rightarrow \alpha}\left|\alpha\right|&amp;lt;/tex&amp;gt; — максимальную длину правой части правила.  &lt;br /&gt;
&lt;br /&gt;
Обработки правил вида &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A \rightarrow \varepsilon&amp;lt;/tex&amp;gt; и нахождение &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] \ &amp;lt;/tex&amp;gt; выполняются за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Время одного перехода вспомогательной динамики &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, суммарное число состояний &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&amp;lt;/tex&amp;gt;. Отсюда расчёт вспомогательной динамики занимает &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right) \ &amp;lt;/tex&amp;gt; времени, базовая динамика находится, как &amp;lt;tex&amp;gt;O \left( n^2 \cdot |\Gamma| \right)&amp;lt;/tex&amp;gt;. Итоговая временная сложность алгоритма равна &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt;. Алгоритму требуется &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M) \ &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;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71303</id>
		<title>Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71303"/>
				<updated>2019-05-23T19:38:27Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Псевдокод */ tex&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&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;
Будем решать задачу динамическим программированием. Введём динамику &amp;lt;tex&amp;gt;a\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i \ldots j-1]\right] \ &amp;lt;/tex&amp;gt;, аналогично [[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|базовой версии]] алгоритма.  &lt;br /&gt;
&lt;br /&gt;
Также введём вспомогательный четырехмерный массив &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, j, k\right] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим все тройки &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle \mid j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;k &amp;lt; \left|\alpha\right|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''База динамики''': &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i] \ &amp;lt;/tex&amp;gt;, иначе  &amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i\right] =  true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow \varepsilon \ &amp;lt;/tex&amp;gt;, иначе &amp;lt;tex&amp;gt;a\left[A, i, i\right] =  false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] = true \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Переход''': &lt;br /&gt;
&lt;br /&gt;
:Пусть значения для всех нетерминалов, пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle \mid j' - i' &amp;lt; m \rbrace \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lbrace k' \mid k' &amp;lt; k \rbrace \ &amp;lt;/tex&amp;gt; уже вычислены, поэтому вспомогательная динамика: &amp;lt;tex&amp;gt; h\left[A \rightarrow \alpha, i, j+1, k\right] = \bigvee\limits_{r=i \ldots j+1}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha\left[k\right],r,j+1\right]\right)&amp;lt;/tex&amp;gt; То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right]&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го символа правой части правила. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j+1\right] &amp;lt;/tex&amp;gt;, но на результат это не повлияет, так как в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]=false \ &amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Но если &amp;lt;tex&amp;gt;\alpha\left[k\right]&amp;lt;/tex&amp;gt;  {{---}}  терминал, то подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right] \ &amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится, если &amp;lt;tex&amp;gt;w\left[r \ldots j\right]=\alpha\left[k\right] \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Базовая динамика выражается так: &amp;lt;tex&amp;gt;a\left[A,i,j\right]=\bigvee\limits_{A \rightarrow \alpha}h\left[A \rightarrow \alpha, i, j, \left|\alpha\right|\right] \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j-1] \ &amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если из длины правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right] &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* '''Завершение''': &lt;br /&gt;
&lt;br /&gt;
:После окончания работы ответ содержится в ячейке &amp;lt;tex&amp;gt;a\left[S, 1, n\right] &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 '''CYK_Modified'''(S, Г): &amp;lt;font color = darkgreen&amp;gt;// S {{---}} строка длины n, Г {{---}} КС-грамматика &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''for''' i = 1 \ldots n&lt;br /&gt;
       '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''if'''( A -&amp;gt; w[i] in Г) a[A, i, i+1] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; w[i] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i+1] = false&lt;br /&gt;
        '''if'''( A -&amp;gt; eps in Г) a[A, i, i] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; eps &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i] = false&lt;br /&gt;
        h[A-&amp;gt;alpha, i, i, 0] = true&lt;br /&gt;
      '''for''' m = 1..n&lt;br /&gt;
       '''for''' i = 1..n&lt;br /&gt;
           j = i+m&lt;br /&gt;
        '''for''' k = 1..M&lt;br /&gt;
         '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          h[A-&amp;gt;alpha, i, j+1, k] = OR( for r = i..j+1) (h[A-&amp;gt;alpha, i, r, k-1] &amp;amp; a[alpha[k],r,j+1])&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
        '''for''' j = 1..n&lt;br /&gt;
          '''for''' Rj -&amp;gt; alpha&lt;br /&gt;
           a[A, i, j] = OR( for A-&amp;gt;alpha) h[A-&amp;gt;alpha, i, j, |alpha|] &amp;lt;font color = darkgreen&amp;gt;// где |alpha| {{---}} размер правой части правила&amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''return''' a[S, 1, n]     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;M = \max\limits_{A \rightarrow \alpha}\left|\alpha\right|&amp;lt;/tex&amp;gt; — максимальную длину правой части правила.  &lt;br /&gt;
&lt;br /&gt;
Обработки правил вида &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A \rightarrow \varepsilon&amp;lt;/tex&amp;gt; и нахождение &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] \ &amp;lt;/tex&amp;gt; выполняются за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Время одного перехода вспомогательной динамики &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, суммарное число состояний &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&amp;lt;/tex&amp;gt;. Отсюда расчёт вспомогательной динамики занимает &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right) \ &amp;lt;/tex&amp;gt; времени, базовая динамика находится, как &amp;lt;tex&amp;gt;O \left( n^2 \cdot |\Gamma| \right)&amp;lt;/tex&amp;gt;. Итоговая временная сложность алгоритма равна &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt;. Алгоритму требуется &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M) \ &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;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71302</id>
		<title>Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71302"/>
				<updated>2019-05-23T19:36:00Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Псевдокод */ tex&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&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;
Будем решать задачу динамическим программированием. Введём динамику &amp;lt;tex&amp;gt;a\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i \ldots j-1]\right] \ &amp;lt;/tex&amp;gt;, аналогично [[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|базовой версии]] алгоритма.  &lt;br /&gt;
&lt;br /&gt;
Также введём вспомогательный четырехмерный массив &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, j, k\right] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим все тройки &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle \mid j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;k &amp;lt; \left|\alpha\right|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''База динамики''': &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i] \ &amp;lt;/tex&amp;gt;, иначе  &amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i\right] =  true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow \varepsilon \ &amp;lt;/tex&amp;gt;, иначе &amp;lt;tex&amp;gt;a\left[A, i, i\right] =  false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] = true \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Переход''': &lt;br /&gt;
&lt;br /&gt;
:Пусть значения для всех нетерминалов, пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle \mid j' - i' &amp;lt; m \rbrace \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lbrace k' \mid k' &amp;lt; k \rbrace \ &amp;lt;/tex&amp;gt; уже вычислены, поэтому вспомогательная динамика: &amp;lt;tex&amp;gt; h\left[A \rightarrow \alpha, i, j+1, k\right] = \bigvee\limits_{r=i \ldots j+1}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha\left[k\right],r,j+1\right]\right)&amp;lt;/tex&amp;gt; То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right]&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го символа правой части правила. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j+1\right] &amp;lt;/tex&amp;gt;, но на результат это не повлияет, так как в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]=false \ &amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Но если &amp;lt;tex&amp;gt;\alpha\left[k\right]&amp;lt;/tex&amp;gt;  {{---}}  терминал, то подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right] \ &amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится, если &amp;lt;tex&amp;gt;w\left[r \ldots j\right]=\alpha\left[k\right] \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Базовая динамика выражается так: &amp;lt;tex&amp;gt;a\left[A,i,j\right]=\bigvee\limits_{A \rightarrow \alpha}h\left[A \rightarrow \alpha, i, j, \left|\alpha\right|\right] \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j-1] \ &amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если из длины правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right] &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* '''Завершение''': &lt;br /&gt;
&lt;br /&gt;
:После окончания работы ответ содержится в ячейке &amp;lt;tex&amp;gt;a\left[S, 1, n\right] &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 '''CYK_Modified'''(S, Г): &amp;lt;font color = darkgreen&amp;gt;// S {{---}} строка длины n, Г {{---}} КС-грамматика &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''for''' i = 1 \ldots n&lt;br /&gt;
       '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''if'''( A -&amp;gt; w[i] in Г) a[A, i, i+1] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; w[i] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i+1] = false&lt;br /&gt;
        '''if'''( A -&amp;gt; eps in Г) a[A, i, i] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; eps &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i] = false&lt;br /&gt;
        h[A-&amp;gt;alpha, i, i, 0] = true&lt;br /&gt;
      '''for''' m = 1 \ldots n&lt;br /&gt;
       '''for''' i = 1 \ldots n&lt;br /&gt;
           j = i+m&lt;br /&gt;
        '''for''' k = 1 \ldots M&lt;br /&gt;
         '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          h[A-&amp;gt;alpha, i, j+1, k] = OR( for r = i &amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt; j+1) (h[A-&amp;gt;alpha, i, r, k-1] &amp;amp; a[alpha[k],r,j+1])&lt;br /&gt;
      '''for''' i = 1 \ldots n&lt;br /&gt;
        '''for''' j = 1 \ldots n&lt;br /&gt;
          '''for''' Rj -&amp;gt; alpha&lt;br /&gt;
           a[A, i, j] = OR( for A-&amp;gt;alpha) h[A-&amp;gt;alpha, i, j, |alpha|] &amp;lt;font color = darkgreen&amp;gt;// где |alpha| {{---}} размер правой части правила&amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''return''' a[S, 1, n]     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;M = \max\limits_{A \rightarrow \alpha}\left|\alpha\right|&amp;lt;/tex&amp;gt; — максимальную длину правой части правила.  &lt;br /&gt;
&lt;br /&gt;
Обработки правил вида &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A \rightarrow \varepsilon&amp;lt;/tex&amp;gt; и нахождение &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] \ &amp;lt;/tex&amp;gt; выполняются за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Время одного перехода вспомогательной динамики &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, суммарное число состояний &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&amp;lt;/tex&amp;gt;. Отсюда расчёт вспомогательной динамики занимает &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right) \ &amp;lt;/tex&amp;gt; времени, базовая динамика находится, как &amp;lt;tex&amp;gt;O \left( n^2 \cdot |\Gamma| \right)&amp;lt;/tex&amp;gt;. Итоговая временная сложность алгоритма равна &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt;. Алгоритму требуется &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M) \ &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;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71301</id>
		<title>Алгоритм Эрли</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71301"/>
				<updated>2019-05-23T19:35:28Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия ещё&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''Алгоритм Эрли''' позволяет определить, выводится ли данное слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в данной [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободной]] грамматике &amp;lt;tex&amp;gt;G&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; и слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; выводится в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;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;w = w_0 w_1 \ldots w_{n-1}&amp;lt;/tex&amp;gt; {{---}} входная цепочка из &amp;lt;tex&amp;gt;\Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Объект вида &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta, i]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \rightarrow \alpha \beta &amp;lt;/tex&amp;gt; — правило из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;0 \leqslant i \leqslant n&amp;lt;/tex&amp;gt; — позиция в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, называется '''ситуацией''', относящейся к цепочке &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, где '''&amp;lt;tex&amp;gt; \cdot &amp;lt;/tex&amp;gt;''' {{---}} вспомогательный символ, который не явлется терминалом или нетерминалом ( &amp;lt;tex&amp;gt; \cdot \notin \Sigma \cup N&amp;lt;/tex&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Ситуации хранятся в множествах &amp;lt;tex&amp;gt;D_0, \ldots ,D_{n-1}&amp;lt;/tex&amp;gt;, называемых '''списками ситуаций'''. Причем наличие ситуации &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta , i]&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-м списке ситуаций &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; равносильно тому, что &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta) \wedge A \Rightarrow^* w_i \ldots w_{j-1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Последовательность списков ситуаций &amp;lt;tex&amp;gt;D_0, D_1, \ldots, D_{n-1} \ &amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;списком разбора&amp;lt;/b&amp;gt; для входной цепочки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Эрли ==&lt;br /&gt;
Чтобы воспользоваться леммой, необходимо найти &amp;lt;tex&amp;gt;D_n&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Алгоритм Эрли является [[Динамическое программирование|динамическим алгоритмом]]: он последовательно строит список разбора, причём при построении &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; используются &amp;lt;tex&amp;gt;D_0, \ldots, D_{j}&amp;lt;/tex&amp;gt; (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент).&lt;br /&gt;
&lt;br /&gt;
Алгоритм основывается на следующих трёх правилах:&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot w_{j} \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;w_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ый символ строки), то &amp;lt;tex&amp;gt;[A \rightarrow \alpha w_{j} \cdot \beta, i] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_j&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \ \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
Для простоты добавим новый стартовый вспомогательный нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правило &amp;lt;tex&amp;gt;(S' \rightarrow S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{earley}(G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Инициализация &amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; D_{0} = \lbrace [S' \rightarrow \cdot \ S, 0] \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;i = 1&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;D_i&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Вычисление ситуаций &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;j = 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; изменяется&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Результат &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''if'''  &amp;lt;tex&amp;gt;[S' \rightarrow S \ \cdot, 0] \in D_{len(w)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' ''true''&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''return''' ''false''    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return'''&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i] \in D_{j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;w_{j - 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha a \cdot \beta, i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, j] \in D_{i} &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректность алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Приведенный алгоритм правильно строит все списки ситуаций. &lt;br /&gt;
То есть алгоритм поддерживает инвариант &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] \in D_{j} \Longleftrightarrow \exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta) \wedge A \Rightarrow^* w_i \ldots w_{j-1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по исполнению алгоритма.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''База  индукции:'' &amp;lt;/u&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0] \in D_0 \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''Индукционный переход:'' &amp;lt;/u&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть предположение верно для всех списков ситуаций с номерами меньше &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt;. Разберемся, в результате применения какого правила ситуация &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] &amp;lt;/tex&amp;gt; попала в &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{scan} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это произошло, если &amp;lt;tex&amp;gt; \alpha = \alpha ' a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; [A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha' \Rightarrow^* w_i \ldots w_{j-2}&amp;lt;/tex&amp;gt;,&amp;lt;br/&amp;gt; &lt;br /&gt;
тогда в силу &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\alpha = \alpha ' a \Rightarrow^* w_i \ldots w_{j-2}w_{j-1} = w_i \ldots w_{j-1} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом условия: &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha \Rightarrow^* w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt; выполняются.&lt;br /&gt;
&lt;br /&gt;
2. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \varepsilon &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;, что автоматически влечет второй пункт утверждения.&amp;lt;br/&amp;gt;&lt;br /&gt;
Кроме того &amp;lt;tex&amp;gt;\exists  i' \le i&amp;lt;/tex&amp;gt; и ситуация &amp;lt;tex&amp;gt;[A' \rightarrow \alpha ' \cdot A \delta ', i'] \in D_i&amp;lt;/tex&amp;gt;, из чего по предположению индукции следует &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt; &lt;br /&gt;
и &amp;lt;tex&amp;gt; \alpha ' \Rightarrow^* w_{i'} \ldots w_{i-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Получаем, что &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;S \Rightarrow^* w_0 \ldots w_{i'-1} \alpha' A \delta' \delta '' &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0 \ldots w_{i'-1} w_{i'} \ldots w_{i-1} A \delta' \delta ''&lt;br /&gt;
&amp;lt;/tex&amp;gt;, в итоге &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt;, что нам и требовалось.&lt;br /&gt;
&lt;br /&gt;
3. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{complete} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \alpha ' A' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\exists i', \delta : [A \rightarrow \alpha ' \cdot A' \beta, i] \in D_{i'} \wedge [A' \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Cледовательно &amp;lt;tex&amp;gt;\alpha = \alpha ' A' \Rightarrow^* w_i \ldots w_{i'-1} w_{i'} \ldots w_{j} = w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt;, что дает нам второй пункт утверждения, а так как первый пункт следует из индукционного предположения, все хорошо.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longleftarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
В обратную сторону будем доказывать индукцией по суммарной длине вывода  &amp;lt;tex&amp;gt;w_0 \ldots w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;. После чего применим&lt;br /&gt;
индукцию по длине вывода &amp;lt;tex&amp;gt;w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим три случая последнего символа &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;tex&amp;gt;\alpha = \alpha ' a&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha ' \Rightarrow^* w_i \ldots w_{j-2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции: &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;, а отсюда по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;tex&amp;gt;\alpha = \alpha ' B&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\exists i' : \alpha ' \Rightarrow^* w_i \ldots w_{i'-1} \wedge B ' \Rightarrow^* w_{i'} \ldots w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Тогда имеем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot  \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;. Также можно записать &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt;, как &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} w_i \ldots w_{i'-1}B \beta \delta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а также &amp;lt;tex&amp;gt;B \rightarrow \eta \wedge \eta \rightarrow w_{i'} \ldots w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Применяя индукцию по второму параметру получим &amp;lt;tex&amp;gt;[B \rightarrow \eta \cdot, i'] \in D_j \ &amp;lt;/tex&amp;gt;, откуда по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' B \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;tex&amp;gt;\alpha = \varepsilon &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Тогда либо &amp;lt;tex&amp;gt;i = 0 \wedge A = S \wedge \delta = \varepsilon&amp;lt;/tex&amp;gt;, что доказывает базу индукции,&amp;lt;br/&amp;gt;&lt;br /&gt;
либо вывод можно записать в виде &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w{i'-1}w_{i'} \ldots w{i-1} A \delta ' \delta '' = w_0 \ldots w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; для некоторого правила &amp;lt;tex&amp;gt;(A' \rightarrow w_{i'} \ldots w_{i-1} A \delta ') \in P&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Отсюда по предположению индукции &amp;lt;tex&amp;gt;[A' \rightarrow \cdot w_{i'} \ldots w_{i-1} A \delta ', i'] \in D_{i'} \ &amp;lt;/tex&amp;gt;, &lt;br /&gt;
что после нескольких применений правила &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; приводит к &amp;lt;tex&amp;gt;[A' \rightarrow w_{i'} \ldots w_{i-1} \cdot  A \delta ', i'] \in D_{i} \ &amp;lt;/tex&amp;gt;,&lt;br /&gt;
после чего по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt;[A \rightarrow \cdot \beta, i] \in D_{j} \ &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;w = (a + a)&amp;lt;/tex&amp;gt; в грамматике со следующими правилами:&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T + S&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F * T&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow ( S )&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_0&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;
|&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0]&amp;lt;/tex&amp;gt; || 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( \cdot S ), 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_2&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[S \rightarrow T + \cdot S, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_4&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot , 3]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T + S \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_5&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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S )\cdot , 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0] \in D_5&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;w \in L(G) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ]]&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[http://lpcs.math.msu.su/~sk/lehre/fivt2013/Earley.pdf Алексей Сорокин {{---}} Алгоритм Эрли]&lt;br /&gt;
* Ахо А., Ульман Д.{{---}} Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. {{---}} М.:«Мир», 1978. С. 358 — 364.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71300</id>
		<title>Удаление eps-правил из грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71300"/>
				<updated>2019-05-23T19:32:46Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Поисправлял ещё многоточия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Используемые определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Правила вида &amp;lt;tex&amp;gt;A \to \varepsilon&amp;lt;/tex&amp;gt; называются '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-rule'').&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-generating''), если &amp;lt;tex&amp;gt;A \Rightarrow^* \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм поиска &amp;amp;epsilon;-порождающих нетерминалов ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' множество &amp;lt;tex&amp;gt;\varepsilon&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;
# Перебираем правила грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Если найдено правило &amp;lt;tex&amp;gt;A \rightarrow C_1C_2 \ldots C_k&amp;lt;/tex&amp;gt;, для которого верно, что каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; принадлежит множеству, то добавить &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в множество.&lt;br /&gt;
# Если на шаге 2 множество изменилось, то повторить шаг 2.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Описанный выше алгоритм находит все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
Для доказательства корректности алгоритма достаточно показать, что, если множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов на очередной итерации алгоритма не изменялось, то алгоритм нашел все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы.&lt;br /&gt;
&lt;br /&gt;
Пусть после завершения алгоритма существуют нетерминалы такие, что они являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но не были найдены алгоритмом. Выберем из этих нетерминалов нетерминал &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, из которого выводится &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; за наименьшее число шагов. Тогда в грамматике есть правило &amp;lt;tex&amp;gt;B \rightarrow C_1C_2 \ldots C_k&amp;lt;/tex&amp;gt;, где каждый нетерминал &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающий. Каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; входит в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов, так как иначе вместо &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; необходимо было взять &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt;. Следовательно, на одной из итераций алгоритма &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; уже добавился в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;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;\mathtt{isEpsilon[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить пометку, является он &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим или нет.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{concernedRules[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить список номеров тех правил, в правой части которых он встречается;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{counter[rule_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого правила будем хранить счетчик количества нетерминалов в правой части, которые еще не помечены &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{Q} \ &amp;lt;/tex&amp;gt; {{---}} очередь нетерминалов, помеченных &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но еще не обработанных.&lt;br /&gt;
&lt;br /&gt;
Сначала проставим &amp;lt;tex&amp;gt;\mathtt{false}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\mathtt{isEpsilon} \ &amp;lt;/tex&amp;gt; для всех нетерминалов, а в &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; для каждого правила запишем количество нетерминалов справа от него. Те правила, для которых &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; сразу же оказался нулевым, добавим в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; и объявим истинным соответствующий &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;, так как это &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила. Теперь будем доставать из очереди по одному нетерминалу, смотреть на список &amp;lt;tex&amp;gt;\mathtt{concernedRules} \ &amp;lt;/tex&amp;gt; для него и уменьшать &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; для всех правил оттуда. Если &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; какого-то правила в этот момент обнулился, то нетерминал из левой части этого правила помечается &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим, если еще не был помечен до этого, и добавляется в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;. Продолжаем, пока очередь не станет пустой.&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Базовый алгоритм работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2)&amp;lt;/tex&amp;gt;. В алгоритме с модификацией нетерминал попадает в очередь ровно один раз, соответственно ровно один раз мы пройдемся по списку правил, в правой части которых он лежит. Суммарно получается &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику, причем сразу пронумеруем правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow DS &amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;C\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;D\rightarrow d&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Поскольку правило 6 содержит справа терминалы, оно заведомо не будет влиять на ответ, поэтому мы не будем его учитывать.''&lt;br /&gt;
&lt;br /&gt;
Построим массив списков &amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=5 |&amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1, 4&lt;br /&gt;
|1&lt;br /&gt;
|1, 4&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:solid 2px gray&amp;quot;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!Комментарий&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{ \right \}&amp;lt;/tex&amp;gt; &lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Зададим начальные значения массивам &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{A,C \right \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2 |Заметим, что правила 3 и 5 являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами. Пометим левые нетерминалы из этих правил и добавим их в очередь. После этого в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; лежит &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; остался без изменений.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{C \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, декрементируем те счетчики, которые относятся к связанным с ним правилам. К очереди ничего не добавится.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{B \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. После проведения действий из алгоритма в очередь добавится &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{S \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. После действий алгоритма в очередь добавится &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{ \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Ничего не добавится в очередь и она останется пустой. Алгоритм закончил свое выполнение. Итого в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил входят все нетерминалы, кроме &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Если применять алгоритм без модификации с очередью, то действия будут следующие:&lt;br /&gt;
# Возьмём множество состоящее из &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов &amp;lt;tex&amp;gt;\lbrace A, C \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Добавим &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; в множество, так как правая часть правила &amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt; состоит только из нетерминалов из множества.&lt;br /&gt;
# Повторим второй пункт для правила &amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt; и получим множество &amp;lt;tex&amp;gt;\lbrace A, B, C, S \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Больше нет нерассмотренных правил, содержащих справа только нетерминалы из множества.&lt;br /&gt;
&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами являются &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм удаления &amp;amp;epsilon;-правил из грамматики ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma'=\langle N,\Sigma, P', S' \rangle&amp;lt;/tex&amp;gt; без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил (может присутствовать правило &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, но в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не встречается в правых частях правил); &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Добавить все правила из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найти все &amp;lt;tex&amp;gt;\varepsilon&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 \ldots B_k \alpha_k \ &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;\alpha_i&amp;lt;/tex&amp;gt; — последовательности из терминалов и нетерминалов, &amp;lt;tex&amp;gt;B_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы) добавить в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt; все возможные варианты правил, в которых либо присутствует, либо удалён каждый из нетерминалов &amp;lt;tex&amp;gt;B_j\; (1 \leqslant j \leqslant k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Удалить все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила из &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если в исходной грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; выводилось &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то необходимо добавить новый нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt;, сделать его стартовым, добавить правило &amp;lt;tex&amp;gt;S' \rightarrow S|\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если грамматика &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; была построена с помощью описанного выше алгоритма по грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Сначала докажем, что, если не выполнять шаг 5 алгоритма, то получится грамматика &amp;lt;tex&amp;gt;\Gamma' : L(\Gamma') = L(\Gamma) \setminus \lbrace \varepsilon \rbrace &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для этого достаточно доказать, что&lt;br /&gt;
&amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
В этом случае в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt;. По построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow \alpha&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; — цепочка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, элементы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами. Тогда в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть порождения &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} \alpha \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;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;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma'}{\Rightarrow}X_1 X_2 \ldots X_k \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Первое использованное правило должно быть построено по правилу грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A \rightarrow Y_1 Y_2 \ldots Y_m&amp;lt;/tex&amp;gt;, где последовательность &amp;lt;tex&amp;gt;Y_1 Y_2 \ldots Y_m&amp;lt;/tex&amp;gt; совпадает с последовательностью &amp;lt;tex&amp;gt;X_1 X_2 \ldots X_k&amp;lt;/tex&amp;gt;, символы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&amp;lt;br/&amp;gt;&lt;br /&gt;
Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2 \ldots w_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то &amp;lt;tex&amp;gt;w_i = X_i&amp;lt;/tex&amp;gt;, a если нетерминал, то порождение &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. По предположению &amp;lt;tex&amp;gt;X_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;A \underset {\Gamma}{\Rightarrow} Y_1 Y_2 \ldots Y_m \underset{\Gamma}{\Rightarrow}^* X_1 X_2 \ldots X_k \underset{\Gamma}{\Rightarrow}^* w_1 w_2 \ldots w_k = w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt; присутствует в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;, это же правило будет и в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, поэтому &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Переход'''. Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma}{\Rightarrow}Y_1 Y_2 \ldots Y_m \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2 \ldots w_m&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Y_{i_1}, Y_{i_2}, \ldots, Y_{i_p}&amp;lt;/tex&amp;gt; — подпоследовательность, состоящая из всех элементов, таких, что &amp;lt;tex&amp;gt;w_{i_k} \ne \varepsilon&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;Y_{i_1} Y_{i_2} \ldots Y_{i_p} \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;p \geqslant 1&amp;lt;/tex&amp;gt;, поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;A \rightarrow Y_{i_1} Y_{i_2} \ldots Y_{i_p}&amp;lt;/tex&amp;gt; является правилом в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; по построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Так как каждое из порождений &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, к ним можно применить предположение индукции и заключить, что, если &amp;lt;tex&amp;gt;w_i \ne \varepsilon&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Y_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} Y_{i_1} Y_{i_2} \ldots Y_{i_p} \underset{\Gamma'}{\Rightarrow}^* w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подставив &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в утверждение (*), видим, что &amp;lt;tex&amp;gt;w \in L(\Gamma)&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L(\Gamma')&amp;lt;/tex&amp;gt;. Так как после выполнения шага 5 алгоритма в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; могло добавиться только пустое слово &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то язык, задаваемый КС-грамматикой &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, совпадает с языком, задаваемым КС-грамматикой &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Рассмотрим грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow T_1 T_2 T_3 \ldots T_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_1\rightarrow t_1|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_2\rightarrow t_2|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots\&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_n\rightarrow t_n|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Из нетерминала &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; можно вывести &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; сочетаний нетерминалов &amp;lt;tex&amp;gt;T_i&amp;lt;/tex&amp;gt;. Таким образом в худшем случае алгоритм работает за &amp;lt;tex&amp;gt;O(2^{\left| \Gamma \right|})&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим теперь грамматику с устраненными [[Удаление_длинных_правил_из_грамматики|длинными правилами]]. После применения данного алгоритма, который работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, в грамматике станет на &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt; больше правил, но при этом все они будут размером &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого по-прежнему  &amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Однако алгоритм удаления &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил будет работать за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, поскольку для каждого правила можно будет добавить только &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; сочетаний нетерминалов.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ней &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&lt;br /&gt;
# Переберём для каждого правила все возможные сочетания &amp;amp;epsilon;-порождающих нетерминалов и добавим новые правила:&lt;br /&gt;
#* &amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;S \rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
#* &amp;lt;tex&amp;gt;B \rightarrow A|C&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;B \rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Удалим праила &amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C\rightarrow \varepsilon&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;
:&amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|ABCd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow A|AC|C&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.''  '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 273: ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Chomsky_normal_form Wikipedia — Chomsky normal form]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71299</id>
		<title>Удаление eps-правил из грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71299"/>
				<updated>2019-05-23T19:28:40Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Используемые определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Правила вида &amp;lt;tex&amp;gt;A \to \varepsilon&amp;lt;/tex&amp;gt; называются '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-rule'').&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-generating''), если &amp;lt;tex&amp;gt;A \Rightarrow^* \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм поиска &amp;amp;epsilon;-порождающих нетерминалов ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' множество &amp;lt;tex&amp;gt;\varepsilon&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;
# Перебираем правила грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Если найдено правило &amp;lt;tex&amp;gt;A \rightarrow C_1C_2 \ldots .C_k&amp;lt;/tex&amp;gt;, для которого верно, что каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; принадлежит множеству, то добавить &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в множество.&lt;br /&gt;
# Если на шаге 2 множество изменилось, то повторить шаг 2.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Описанный выше алгоритм находит все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
Для доказательства корректности алгоритма достаточно показать, что, если множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов на очередной итерации алгоритма не изменялось, то алгоритм нашел все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы.&lt;br /&gt;
&lt;br /&gt;
Пусть после завершения алгоритма существуют нетерминалы такие, что они являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но не были найдены алгоритмом. Выберем из этих нетерминалов нетерминал &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, из которого выводится &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; за наименьшее число шагов. Тогда в грамматике есть правило &amp;lt;tex&amp;gt;B \rightarrow C_1C_2 \ldots .C_k&amp;lt;/tex&amp;gt;, где каждый нетерминал &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающий. Каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; входит в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов, так как иначе вместо &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; необходимо было взять &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt;. Следовательно, на одной из итераций алгоритма &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; уже добавился в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;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;\mathtt{isEpsilon[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить пометку, является он &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим или нет.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{concernedRules[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить список номеров тех правил, в правой части которых он встречается;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{counter[rule_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого правила будем хранить счетчик количества нетерминалов в правой части, которые еще не помечены &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{Q} \ &amp;lt;/tex&amp;gt; {{---}} очередь нетерминалов, помеченных &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но еще не обработанных.&lt;br /&gt;
&lt;br /&gt;
Сначала проставим &amp;lt;tex&amp;gt;\mathtt{false}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\mathtt{isEpsilon} \ &amp;lt;/tex&amp;gt; для всех нетерминалов, а в &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; для каждого правила запишем количество нетерминалов справа от него. Те правила, для которых &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; сразу же оказался нулевым, добавим в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; и объявим истинным соответствующий &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;, так как это &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила. Теперь будем доставать из очереди по одному нетерминалу, смотреть на список &amp;lt;tex&amp;gt;\mathtt{concernedRules} \ &amp;lt;/tex&amp;gt; для него и уменьшать &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; для всех правил оттуда. Если &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; какого-то правила в этот момент обнулился, то нетерминал из левой части этого правила помечается &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим, если еще не был помечен до этого, и добавляется в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;. Продолжаем, пока очередь не станет пустой.&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Базовый алгоритм работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2)&amp;lt;/tex&amp;gt;. В алгоритме с модификацией нетерминал попадает в очередь ровно один раз, соответственно ровно один раз мы пройдемся по списку правил, в правой части которых он лежит. Суммарно получается &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику, причем сразу пронумеруем правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow DS &amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;C\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;D\rightarrow d&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Поскольку правило 6 содержит справа терминалы, оно заведомо не будет влиять на ответ, поэтому мы не будем его учитывать.''&lt;br /&gt;
&lt;br /&gt;
Построим массив списков &amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=5 |&amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1, 4&lt;br /&gt;
|1&lt;br /&gt;
|1, 4&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:solid 2px gray&amp;quot;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!Комментарий&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{ \right \}&amp;lt;/tex&amp;gt; &lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Зададим начальные значения массивам &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{A,C \right \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2 |Заметим, что правила 3 и 5 являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами. Пометим левые нетерминалы из этих правил и добавим их в очередь. После этого в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; лежит &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; остался без изменений.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{C \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, декрементируем те счетчики, которые относятся к связанным с ним правилам. К очереди ничего не добавится.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{B \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. После проведения действий из алгоритма в очередь добавится &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{S \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. После действий алгоритма в очередь добавится &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{ \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Ничего не добавится в очередь и она останется пустой. Алгоритм закончил свое выполнение. Итого в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил входят все нетерминалы, кроме &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Если применять алгоритм без модификации с очередью, то действия будут следующие:&lt;br /&gt;
# Возьмём множество состоящее из &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов &amp;lt;tex&amp;gt;\lbrace A, C \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Добавим &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; в множество, так как правая часть правила &amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt; состоит только из нетерминалов из множества.&lt;br /&gt;
# Повторим второй пункт для правила &amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt; и получим множество &amp;lt;tex&amp;gt;\lbrace A, B, C, S \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Больше нет нерассмотренных правил, содержащих справа только нетерминалы из множества.&lt;br /&gt;
&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами являются &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм удаления &amp;amp;epsilon;-правил из грамматики ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma'=\langle N,\Sigma, P', S' \rangle&amp;lt;/tex&amp;gt; без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил (может присутствовать правило &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, но в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не встречается в правых частях правил); &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Добавить все правила из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найти все &amp;lt;tex&amp;gt;\varepsilon&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 \ldots B_k \alpha_k \ &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;\alpha_i&amp;lt;/tex&amp;gt; — последовательности из терминалов и нетерминалов, &amp;lt;tex&amp;gt;B_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы) добавить в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt; все возможные варианты правил, в которых либо присутствует, либо удалён каждый из нетерминалов &amp;lt;tex&amp;gt;B_j\; (1 \leqslant j \leqslant k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Удалить все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила из &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если в исходной грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; выводилось &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то необходимо добавить новый нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt;, сделать его стартовым, добавить правило &amp;lt;tex&amp;gt;S' \rightarrow S|\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если грамматика &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; была построена с помощью описанного выше алгоритма по грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Сначала докажем, что, если не выполнять шаг 5 алгоритма, то получится грамматика &amp;lt;tex&amp;gt;\Gamma' : L(\Gamma') = L(\Gamma) \setminus \lbrace \varepsilon \rbrace &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для этого достаточно доказать, что&lt;br /&gt;
&amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
В этом случае в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt;. По построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow \alpha&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; — цепочка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, элементы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами. Тогда в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть порождения &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} \alpha \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;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;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma'}{\Rightarrow}X_1 X_2 \ldots X_k \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Первое использованное правило должно быть построено по правилу грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A \rightarrow Y_1 Y_2 \ldots Y_m&amp;lt;/tex&amp;gt;, где последовательность &amp;lt;tex&amp;gt;Y_1 Y_2 \ldots Y_m&amp;lt;/tex&amp;gt; совпадает с последовательностью &amp;lt;tex&amp;gt;X_1 X_2 \ldots X_k&amp;lt;/tex&amp;gt;, символы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&amp;lt;br/&amp;gt;&lt;br /&gt;
Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2 \ldots w_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то &amp;lt;tex&amp;gt;w_i = X_i&amp;lt;/tex&amp;gt;, a если нетерминал, то порождение &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. По предположению &amp;lt;tex&amp;gt;X_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;A \underset {\Gamma}{\Rightarrow} Y_1 Y_2 \ldots Y_m \underset{\Gamma}{\Rightarrow}^* X_1 X_2 \ldots X_k \underset{\Gamma}{\Rightarrow}^* w_1 w_2 \ldots w_k = w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt; присутствует в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;, это же правило будет и в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, поэтому &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Переход'''. Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma}{\Rightarrow}Y_1 Y_2 \ldots Y_m \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2 \ldots w_m&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Y_{i_1}, Y_{i_2}, \ldots, Y_{i_p}&amp;lt;/tex&amp;gt; — подпоследовательность, состоящая из всех элементов, таких, что &amp;lt;tex&amp;gt;w_{i_k} \ne \varepsilon&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;Y_{i_1} Y_{i_2} \ldots Y_{i_p} \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;p \geqslant 1&amp;lt;/tex&amp;gt;, поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;A \rightarrow Y_{i_1} Y_{i_2} \ldots Y_{i_p}&amp;lt;/tex&amp;gt; является правилом в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; по построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Так как каждое из порождений &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, к ним можно применить предположение индукции и заключить, что, если &amp;lt;tex&amp;gt;w_i \ne \varepsilon&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Y_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} Y_{i_1} Y_{i_2} \ldots Y_{i_p} \underset{\Gamma'}{\Rightarrow}^* w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подставив &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в утверждение (*), видим, что &amp;lt;tex&amp;gt;w \in L(\Gamma)&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L(\Gamma')&amp;lt;/tex&amp;gt;. Так как после выполнения шага 5 алгоритма в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; могло добавиться только пустое слово &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то язык, задаваемый КС-грамматикой &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, совпадает с языком, задаваемым КС-грамматикой &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Рассмотрим грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow T_1 T_2 T_3 \ldots T_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_1\rightarrow t_1|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_2\rightarrow t_2|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots\&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_n\rightarrow t_n|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Из нетерминала &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; можно вывести &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; сочетаний нетерминалов &amp;lt;tex&amp;gt;T_i&amp;lt;/tex&amp;gt;. Таким образом в худшем случае алгоритм работает за &amp;lt;tex&amp;gt;O(2^{\left| \Gamma \right|})&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим теперь грамматику с устраненными [[Удаление_длинных_правил_из_грамматики|длинными правилами]]. После применения данного алгоритма, который работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, в грамматике станет на &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt; больше правил, но при этом все они будут размером &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого по-прежнему  &amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Однако алгоритм удаления &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил будет работать за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, поскольку для каждого правила можно будет добавить только &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; сочетаний нетерминалов.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ней &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&lt;br /&gt;
# Переберём для каждого правила все возможные сочетания &amp;amp;epsilon;-порождающих нетерминалов и добавим новые правила:&lt;br /&gt;
#* &amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;S \rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
#* &amp;lt;tex&amp;gt;B \rightarrow A|C&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;B \rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Удалим праила &amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C\rightarrow \varepsilon&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;
:&amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|ABCd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow A|AC|C&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.''  '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 273: ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Chomsky_normal_form Wikipedia — Chomsky normal form]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71298</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71298"/>
				<updated>2019-05-23T19:26:10Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Добавил см. также&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\ldots) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \} \ &amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1 \ldots |Q| :\ a[i] = 1 \ldots |Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) \ &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u = q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y \ &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x| \ (\mathrm{mod} \ 2 )&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&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;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71297</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71297"/>
				<updated>2019-05-23T19:19:25Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия ещё&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\ldots) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \} \ &amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1 \ldots |Q| :\ a[i] = 1 \ldots |Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) \ &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u = q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y \ &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x| \ (\mathrm{mod} \ 2 )&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71296</id>
		<title>Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71296"/>
				<updated>2019-05-23T17:55:48Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в [[нормальная форма Хомского|нормальной форме Хомского]] и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&amp;lt;/tex&amp;gt;. Требуется выяснить, выводится ли это слово в данной грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Контекстно-свободная грамматика ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная грамматика]]''' ('''КС-грамматика''', '''бесконтекстная грамматика''') {{---}} способ описания формального языка, представляющий собой четверку&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} [[Основные_определения: алфавит, слово, язык, конкатенация, свободный моноид слов|алфавит]], элементы которого называют '''терминалами''' (англ. ''terminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; {{---}} множество, элементы которого называют '''нетерминалами''' (англ. ''nonterminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} начальный символ грамматики (англ. ''start symbol'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} набор правил вывода (англ. ''production rules'' или ''productions'') вида &amp;lt;tex&amp;gt;A \rightarrow B_1 B_2 \ldots B_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \in N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_i \in \Sigma \cup N&amp;lt;/tex&amp;gt;, то есть у которых левые части {{---}} одиночные нетерминалы, а правые - последовательности терминалов и нетерминалов.&lt;br /&gt;
}}&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
Терминалы &amp;lt;tex&amp;gt;\Sigma = \{(, )\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt;N = \{S\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Правила вывода &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}  &lt;br /&gt;
 S \rightarrow \varepsilon\\&lt;br /&gt;
 S \rightarrow SS\\&lt;br /&gt;
 S \rightarrow (S)\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная грамматика задает язык [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]]. Например, последовательность &amp;lt;tex&amp;gt;(()(()))&amp;lt;/tex&amp;gt; может быть выведена следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S \Rightarrow (S) \Rightarrow (SS) \Rightarrow (()(S)) \Rightarrow (()(())) &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;A \rightarrow a&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; {{---}} терминал&lt;br /&gt;
* &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} нетерминалы, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; не являются начальными нетерминалами&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;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;
'''Алгоритм Кока-Янгера-Касами''' (англ. ''Cocke-Younger-Kasami algorithm'', англ. ''CYK-алгоритм'') {{---}} алгоритм, позволяющий по слову узнать, выводимо ли оно в заданной КС-грамматике в нормальной форме Хомского. Любую КС-грамматику можно привести к НФХ, поэтому алгоритм является универсальным для любой КС-грамматики.&lt;br /&gt;
&lt;br /&gt;
Будем решать задачу [[Динамическое_программирование|динамическим программированием]]. Дана строка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Заведем для неё трехмерный массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;|N| \times n \times n&amp;lt;/tex&amp;gt;, состоящий из логических значений, и &amp;lt;tex&amp;gt;d[A][i][j] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; правилами грамматики можно вывести подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим все пары &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle | j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i = j&amp;lt;/tex&amp;gt;. Инициализируем массив для всех нетерминалов, из которых выводится какой-либо символ строки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. В таком случае &amp;lt;tex&amp;gt;d[A][i][i] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;. Иначе &amp;lt;tex&amp;gt;d[A][i][i] = false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i \ne j&amp;lt;/tex&amp;gt;. Значения для всех нетерминалов и пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle | j' - i' &amp;lt; m \rbrace&amp;lt;/tex&amp;gt; уже вычислены, поэтому &amp;lt;tex&amp;gt;d[A][i][j] = \bigvee\limits_{A \rightarrow BC}\bigvee\limits_{k = i}^{j-1} d[B][i][k] \wedge d[C][k+1][j] \ \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если существует продукция вида &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt; и такое &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что подстрока &amp;lt;tex&amp;gt;w[i \ldots k]&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[k + 1 \ldots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Файл:CYK_rule_2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
После окончания работы значение &amp;lt;tex&amp;gt;d[S][1][n]&amp;lt;/tex&amp;gt; содержит ответ на вопрос, выводима ли данная строка в данной грамматике, где &amp;lt;tex&amp;gt;S&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;d[A][i][j] = \sum\limits_{A \rightarrow BC}\sum\limits_{k = i}^{j-1} d[B][i][k] \cdot d[C][k + 1][j] \ \ &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} количество способов получить подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Минимальная стоимость вывода слова ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;H(A \rightarrow BC)&amp;lt;/tex&amp;gt; {{---}} стоимость вывода по правилу &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;. Тогда, если использовать формулу &amp;lt;tex&amp;gt;d[A][i][j] = \min\limits_{A \rightarrow BC} \min\limits_{k = i}^{j-1}  ( d[B][i][k] + d[C][k + 1][j] + H(A \rightarrow BC) ) \ \ &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} минимальная стоимость вывода подстроки &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&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;A \rightarrow w[i]&amp;lt;/tex&amp;gt; выполняется за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проход по всем подстрокам выполняется за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;. В обработке одной подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. В итоге получаем конечную сложность &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, общее время работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. Кроме того, алгоритму требуется память на массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; объемом &amp;lt;tex&amp;gt;O(n^2 \cdot |N|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|N|&amp;lt;/tex&amp;gt; {{---}}  количество [[Формальные_грамматики#Определения|нетерминалов]] грамматики.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
Дана грамматика [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в нормальной форме Хомского.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}   &lt;br /&gt;
 A \rightarrow \varepsilon\ |\ BB\ |\ CD\\&lt;br /&gt;
 B \rightarrow BB\ |\ CD\\&lt;br /&gt;
 C \rightarrow (\\&lt;br /&gt;
 D \rightarrow BE\ |\ )\\&lt;br /&gt;
 E \rightarrow )\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дано слово &amp;lt;tex&amp;gt;w = ()(())&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Инициализация массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заполнение массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также == &lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики|Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
* [[Алгоритм_Эрли|Алгоритм Эрли]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:CYK_algorithm|Wikipedia {{---}} CYK algorithm]]&lt;br /&gt;
* [http://web.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf David Rodriguez-Velazquez, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
* [https://www.princeton.edu/~achaney/tmve/wiki100k/docs/CYK_algorithm.html Princeton University, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Динамическое программирование]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71295</id>
		<title>Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71295"/>
				<updated>2019-05-23T17:54:39Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&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;
Будем решать задачу динамическим программированием. Введём динамику &amp;lt;tex&amp;gt;a\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i \ldots j-1]\right] \ &amp;lt;/tex&amp;gt;, аналогично [[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|базовой версии]] алгоритма.  &lt;br /&gt;
&lt;br /&gt;
Также введём вспомогательный четырехмерный массив &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, j, k\right] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим все тройки &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle \mid j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;k &amp;lt; \left|\alpha\right|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''База динамики''': &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i] \ &amp;lt;/tex&amp;gt;, иначе  &amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i\right] =  true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow \varepsilon \ &amp;lt;/tex&amp;gt;, иначе &amp;lt;tex&amp;gt;a\left[A, i, i\right] =  false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] = true \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Переход''': &lt;br /&gt;
&lt;br /&gt;
:Пусть значения для всех нетерминалов, пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle \mid j' - i' &amp;lt; m \rbrace \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lbrace k' \mid k' &amp;lt; k \rbrace \ &amp;lt;/tex&amp;gt; уже вычислены, поэтому вспомогательная динамика: &amp;lt;tex&amp;gt; h\left[A \rightarrow \alpha, i, j+1, k\right] = \bigvee\limits_{r=i \ldots j+1}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha\left[k\right],r,j+1\right]\right)&amp;lt;/tex&amp;gt; То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right]&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го символа правой части правила. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j+1\right] &amp;lt;/tex&amp;gt;, но на результат это не повлияет, так как в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]=false \ &amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Но если &amp;lt;tex&amp;gt;\alpha\left[k\right]&amp;lt;/tex&amp;gt;  {{---}}  терминал, то подстроку &amp;lt;tex&amp;gt;w[i \ldots j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots r-1\right] \ &amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r \ldots j]&amp;lt;/tex&amp;gt; выводится, если &amp;lt;tex&amp;gt;w\left[r \ldots j\right]=\alpha\left[k\right] \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Базовая динамика выражается так: &amp;lt;tex&amp;gt;a\left[A,i,j\right]=\bigvee\limits_{A \rightarrow \alpha}h\left[A \rightarrow \alpha, i, j, \left|\alpha\right|\right] \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \ldots j-1] \ &amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если из длины правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i \ldots j-1\right] &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* '''Завершение''': &lt;br /&gt;
&lt;br /&gt;
:После окончания работы ответ содержится в ячейке &amp;lt;tex&amp;gt;a\left[S, 1, n\right] &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 '''CYK_Modified'''(S, Г): &amp;lt;font color = darkgreen&amp;gt;// S {{---}} строка длины n, Г {{---}} КС-грамматика &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''for''' i = 1 \ldots n&lt;br /&gt;
       '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''if'''( A -&amp;gt; w[i] in Г) a[A, i, i+1] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; w[i] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i+1] = false&lt;br /&gt;
        '''if'''( A -&amp;gt; eps in Г) a[A, i, i] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; eps &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i] = false&lt;br /&gt;
        h[A-&amp;gt;alpha, i, i, 0] = true&lt;br /&gt;
      '''for''' m = 1 \ldots n&lt;br /&gt;
       '''for''' i = 1 \ldots n&lt;br /&gt;
           j = i+m&lt;br /&gt;
        '''for''' k = 1 \ldots M&lt;br /&gt;
         '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          h[A-&amp;gt;alpha, i, j+1, k] = OR( for r = i \ldots j+1) (h[A-&amp;gt;alpha, i, r, k-1] &amp;amp; a[alpha[k],r,j+1])&lt;br /&gt;
      '''for''' i = 1 \ldots n&lt;br /&gt;
        '''for''' j = 1 \ldots n&lt;br /&gt;
          '''for''' Rj -&amp;gt; alpha&lt;br /&gt;
           a[A, i, j] = OR( for A-&amp;gt;alpha) h[A-&amp;gt;alpha, i, j, |alpha|] &amp;lt;font color = darkgreen&amp;gt;// где |alpha| {{---}} размер правой части правила&amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''return''' a[S, 1, n]     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;M = \max\limits_{A \rightarrow \alpha}\left|\alpha\right|&amp;lt;/tex&amp;gt; — максимальную длину правой части правила.  &lt;br /&gt;
&lt;br /&gt;
Обработки правил вида &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A \rightarrow \varepsilon&amp;lt;/tex&amp;gt; и нахождение &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] \ &amp;lt;/tex&amp;gt; выполняются за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Время одного перехода вспомогательной динамики &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, суммарное число состояний &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&amp;lt;/tex&amp;gt;. Отсюда расчёт вспомогательной динамики занимает &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right) \ &amp;lt;/tex&amp;gt; времени, базовая динамика находится, как &amp;lt;tex&amp;gt;O \left( n^2 \cdot |\Gamma| \right)&amp;lt;/tex&amp;gt;. Итоговая временная сложность алгоритма равна &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt;. Алгоритму требуется &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M) \ &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;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71294</id>
		<title>Алгоритм Эрли</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71294"/>
				<updated>2019-05-23T17:50:23Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''Алгоритм Эрли''' позволяет определить, выводится ли данное слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в данной [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободной]] грамматике &amp;lt;tex&amp;gt;G&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; и слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; выводится в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;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;w = w_0 w_1 \ldots w_{n-1}&amp;lt;/tex&amp;gt; {{---}} входная цепочка из &amp;lt;tex&amp;gt;\Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Объект вида &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta, i]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \rightarrow \alpha \beta &amp;lt;/tex&amp;gt; — правило из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;0 \leqslant i \leqslant n&amp;lt;/tex&amp;gt; — позиция в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, называется '''ситуацией''', относящейся к цепочке &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, где '''&amp;lt;tex&amp;gt; \cdot &amp;lt;/tex&amp;gt;''' {{---}} вспомогательный символ, который не явлется терминалом или нетерминалом ( &amp;lt;tex&amp;gt; \cdot \notin \Sigma \cup N&amp;lt;/tex&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Ситуации хранятся в множествах &amp;lt;tex&amp;gt;D_0, \ldots ,D_{n-1}&amp;lt;/tex&amp;gt;, называемых '''списками ситуаций'''. Причем наличие ситуации &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta , i]&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-м списке ситуаций &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; равносильно тому, что &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta) \wedge A \Rightarrow^* w_i \ldots w_{j-1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Последовательность списков ситуаций &amp;lt;tex&amp;gt;D_0, D_1, .., D_{n-1} \ &amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;списком разбора&amp;lt;/b&amp;gt; для входной цепочки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Эрли ==&lt;br /&gt;
Чтобы воспользоваться леммой, необходимо найти &amp;lt;tex&amp;gt;D_n&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Алгоритм Эрли является [[Динамическое программирование|динамическим алгоритмом]]: он последовательно строит список разбора, причём при построении &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; используются &amp;lt;tex&amp;gt;D_0, \ldots, D_{j}&amp;lt;/tex&amp;gt; (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент).&lt;br /&gt;
&lt;br /&gt;
Алгоритм основывается на следующих трёх правилах:&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot w_{j} \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;w_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ый символ строки), то &amp;lt;tex&amp;gt;[A \rightarrow \alpha w_{j} \cdot \beta, i] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_j&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \ \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
Для простоты добавим новый стартовый вспомогательный нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правило &amp;lt;tex&amp;gt;(S' \rightarrow S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{earley}(G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Инициализация &amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; D_{0} = \lbrace [S' \rightarrow \cdot \ S, 0] \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;i = 1&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;D_i&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Вычисление ситуаций &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;j = 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; изменяется&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Результат &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''if'''  &amp;lt;tex&amp;gt;[S' \rightarrow S \ \cdot, 0] \in D_{len(w)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' ''true''&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''return''' ''false''    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return'''&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i] \in D_{j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;w_{j - 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha a \cdot \beta, i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, j] \in D_{i} &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректность алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Приведенный алгоритм правильно строит все списки ситуаций. &lt;br /&gt;
То есть алгоритм поддерживает инвариант &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] \in D_{j} \Longleftrightarrow \exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta) \wedge A \Rightarrow^* w_i \ldots w_{j-1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по исполнению алгоритма.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''База  индукции:'' &amp;lt;/u&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0] \in D_0 \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''Индукционный переход:'' &amp;lt;/u&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть предположение верно для всех списков ситуаций с номерами меньше &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt;. Разберемся, в результате применения какого правила ситуация &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] &amp;lt;/tex&amp;gt; попала в &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{scan} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это произошло, если &amp;lt;tex&amp;gt; \alpha = \alpha ' a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; [A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha' \Rightarrow^* w_i \ldots w_{j-2}&amp;lt;/tex&amp;gt;,&amp;lt;br/&amp;gt; &lt;br /&gt;
тогда в силу &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\alpha = \alpha ' a \Rightarrow^* w_i \ldots w_{j-2}w_{j-1} = w_i \ldots w_{j-1} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом условия: &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha \Rightarrow^* w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt; выполняются.&lt;br /&gt;
&lt;br /&gt;
2. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \varepsilon &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;, что автоматически влечет второй пункт утверждения.&amp;lt;br/&amp;gt;&lt;br /&gt;
Кроме того &amp;lt;tex&amp;gt;\exists  i' \le i&amp;lt;/tex&amp;gt; и ситуация &amp;lt;tex&amp;gt;[A' \rightarrow \alpha ' \cdot A \delta ', i'] \in D_i&amp;lt;/tex&amp;gt;, из чего по предположению индукции следует &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt; &lt;br /&gt;
и &amp;lt;tex&amp;gt; \alpha ' \Rightarrow^* w_{i'} \ldots w_{i-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Получаем, что &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;S \Rightarrow^* w_0 \ldots w_{i'-1} \alpha' A \delta' \delta '' &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0 \ldots w_{i'-1} w_{i'} \ldots w_{i-1} A \delta' \delta ''&lt;br /&gt;
&amp;lt;/tex&amp;gt;, в итоге &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt;, что нам и требовалось.&lt;br /&gt;
&lt;br /&gt;
3. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{complete} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \alpha ' A' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\exists i', \delta : [A \rightarrow \alpha ' \cdot A' \beta, i] \in D_{i'} \wedge [A' \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Cледовательно &amp;lt;tex&amp;gt;\alpha = \alpha ' A' \Rightarrow^* w_i \ldots w_{i'-1} w_{i'} \ldots w_{j} = w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt;, что дает нам второй пункт утверждения, а так как первый пункт следует из индукционного предположения, все хорошо.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longleftarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
В обратную сторону будем доказывать индукцией по суммарной длине вывода  &amp;lt;tex&amp;gt;w_0 \ldots w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;. После чего применим&lt;br /&gt;
индукцию по длине вывода &amp;lt;tex&amp;gt;w_i \ldots w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим три случая последнего символа &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;tex&amp;gt;\alpha = \alpha ' a&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha ' \Rightarrow^* w_i \ldots w_{j-2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции: &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;, а отсюда по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;tex&amp;gt;\alpha = \alpha ' B&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\exists i' : \alpha ' \Rightarrow^* w_i \ldots w_{i'-1} \wedge B ' \Rightarrow^* w_{i'} \ldots w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Тогда имеем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot  \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;. Также можно записать &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} A \delta&amp;lt;/tex&amp;gt;, как &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w_{i-1} w_i \ldots w_{i'-1}B \beta \delta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а также &amp;lt;tex&amp;gt;B \rightarrow \eta \wedge \eta \rightarrow w_{i'} \ldots w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Применяя индукцию по второму параметру получим &amp;lt;tex&amp;gt;[B \rightarrow \eta \cdot, i'] \in D_j \ &amp;lt;/tex&amp;gt;, откуда по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' B \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;tex&amp;gt;\alpha = \varepsilon &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Тогда либо &amp;lt;tex&amp;gt;i = 0 \wedge A = S \wedge \delta = \varepsilon&amp;lt;/tex&amp;gt;, что доказывает базу индукции,&amp;lt;br/&amp;gt;&lt;br /&gt;
либо вывод можно записать в виде &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0 \ldots w{i'-1}w_{i'} \ldots w{i-1} A \delta ' \delta '' = w_0 \ldots w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; для некоторого правила &amp;lt;tex&amp;gt;(A' \rightarrow w_{i'} \ldots w_{i-1} A \delta ') \in P&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Отсюда по предположению индукции &amp;lt;tex&amp;gt;[A' \rightarrow \cdot w_{i'} \ldots w_{i-1} A \delta ', i'] \in D_{i'} \ &amp;lt;/tex&amp;gt;, &lt;br /&gt;
что после нескольких применений правила &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; приводит к &amp;lt;tex&amp;gt;[A' \rightarrow w_{i'} \ldots w_{i-1} \cdot  A \delta ', i'] \in D_{i} \ &amp;lt;/tex&amp;gt;,&lt;br /&gt;
после чего по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt;[A \rightarrow \cdot \beta, i] \in D_{j} \ &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;w = (a + a)&amp;lt;/tex&amp;gt; в грамматике со следующими правилами:&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T + S&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F * T&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow ( S )&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_0&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;
|&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0]&amp;lt;/tex&amp;gt; || 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( \cdot S ), 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_2&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[S \rightarrow T + \cdot S, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_4&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot , 3]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T + S \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_5&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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S )\cdot , 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0] \in D_5&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;w \in L(G) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ]]&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[http://lpcs.math.msu.su/~sk/lehre/fivt2013/Earley.pdf Алексей Сорокин {{---}} Алгоритм Эрли]&lt;br /&gt;
* Ахо А., Ульман Д.{{---}} Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. {{---}} М.:«Мир», 1978. С. 358 — 364.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71293</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71293"/>
				<updated>2019-05-23T17:40:16Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\ldots) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \} \ &amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1..|Q| :\ a[i] = 1..|Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) \ &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u = q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y \ &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x| \ (\mathrm{mod} \ 2 )&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71292</id>
		<title>Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71292"/>
				<updated>2019-05-23T17:38:25Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: Исправил многоточия&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=csgrammar&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободной грамматикой''' (англ. ''сontext-free grammar'') называется [[Формальные грамматики|грамматика]], у которой в левых частях всех правил стоят только одиночные нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=lang&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободный язык''' (англ. ''context-free language'') {{---}} язык, задаваемый контекстно-свободной грамматикой.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лево- и правосторонний вывод слова==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Выводом слова''' (англ. ''derivation of a word'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово &amp;lt;tex&amp;gt;\alpha&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;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы &lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал &lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow S(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выведем слово &amp;lt;tex&amp;gt;(()(()))()&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (S)\boldsymbol{S} \Rightarrow (S)(\boldsymbol{S})S\Rightarrow(S)()\boldsymbol{S}\Rightarrow(\boldsymbol{S})()\Rightarrow(\boldsymbol{S}(S))()\Rightarrow(S(S)(\boldsymbol{S}))()\Rightarrow(S(S)(\boldsymbol{S}(S)))()\Rightarrow (S(\boldsymbol{S})((S)))()\Rightarrow(\boldsymbol{S}()((S)))()\Rightarrow(()((\boldsymbol{S})))()\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левосторонним выводом слова''' (англ. ''leftmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правосторонним выводом слова''' (англ. ''rightmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим левосторонний вывод скобочной последовательности из примера:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дерево разбора==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Крона дерева разбора''' (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Построим дерево разбора скобочной последовательности из примера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree1.png]]&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и кроной &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\omega \in N^{*}&amp;lt;/tex&amp;gt;. Тогда в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; существует левое порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Используем индукцию по высоте дерева.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Базисом является высота &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, наименьшая из возможных для дерева разбора с терминальной кроной.&lt;br /&gt;
:Поскольку это дерево является деревом разбора, &amp;lt;tex&amp;gt;A \rightarrow \omega&amp;lt;/tex&amp;gt; должно быть продукцией. Таким образом, &amp;lt;tex&amp;gt;A \Rightarrow_{lm} \omega&amp;lt;/tex&amp;gt; есть одношаговое левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Существует корень с отметкой &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и сыновьями, отмеченными слева направо &amp;lt;tex&amp;gt;X_1X_2 \ldots X_k&amp;lt;/tex&amp;gt;. Символы &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; могут быть как терминалами, так и переменными.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то определим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; как цепочку, состоящую из одного &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Заметим, что в этом случае высота поддерева меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение &amp;lt;tex&amp;gt;X_i \Rightarrow^{*}_{lm} \omega_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\omega = \omega_1\omega_2 \ldots \omega_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим левое порождение цепочки &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
:Начнем с шага &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\ldots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Затем для &amp;lt;tex&amp;gt;i = 1, 2, \ldots, k \ &amp;lt;/tex&amp;gt; покажем, что имеет место следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное доказательство использует в действительности еще одну индукцию, на этот раз по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для базиса &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt; мы уже знаем, что &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\ldots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для индукции предположим, что существует следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_{i–1}X_iX_{i+1}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то не делаем ничего, но в дальнейшем рассматриваем &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; как терминальную цепочку &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Таким образом, приходим к существованию следующего порождения. &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; является переменной, то продолжаем порождением &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; в контексте уже построенного порождения. Таким образом, если этим порождением является: &amp;lt;tex&amp;gt;X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2\ldots \Rightarrow_{lm} \omega_i&amp;lt;/tex&amp;gt;, то продолжаем следующими порождениями: &lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_{i–1}X_iX_{i+1}\ldots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_{i–1}\alpha_1X_{i+1}\ldots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_{i–1}\alpha_2X_{i+1}\ldots X_k  \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\ldots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом является порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\ldots\omega_iX_{i+1}X_{i+2}\ldots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда &amp;lt;tex&amp;gt;i = k&amp;lt;/tex&amp;gt;, результат представляет собой левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t2&lt;br /&gt;
|statement=Для каждой грамматики &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;N^{*}&amp;lt;/tex&amp;gt; цепочка &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных дерева разбора тогда и только тогда, когда &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных левых порождения из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве [[#t1|теоремы]]. В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Longleftarrow &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;
|definition=&lt;br /&gt;
Грамматика называется '''однозначной''' (англ. ''unambiguous grammar''), если у каждого слова имеется не более одного дерева разбора в этой грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma-&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} однозначная грамматика. Тогда &amp;lt;tex&amp;gt;\forall \omega \in \mathbb{L}(\Gamma)&amp;lt;/tex&amp;gt; существует ровно один левосторонний (правосторонний) вывод.&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Грамматика из примера не является однозначной.&lt;br /&gt;
|proof=Выше уже было построено дерево разбора для слова &amp;lt;tex&amp;gt;(()(()))()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим еще одно дерево разбора для данного слова.&lt;br /&gt;
&lt;br /&gt;
Например, оно будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree2.png]]&lt;br /&gt;
Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике &amp;lt;tex&amp;gt;\Rightarrow&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;
:&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы&lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта грамматика однозначна.&lt;br /&gt;
Для этого, используя индукцию, докажем, что для любого слова &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Если &amp;lt;tex&amp;gt;\omega=\varepsilon&amp;lt;/tex&amp;gt;, то оно выводится только по второму правилу &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; для него существует единственное дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Пусть &amp;lt;tex&amp;gt;\left\vert \omega \right\vert=n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \upsilon&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\left\vert \upsilon \right\vert &amp;lt; n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\upsilon&amp;lt;/tex&amp;gt; {{---}} правильная скобочная последовательность, у которой &amp;lt;tex&amp;gt;\exists!&amp;lt;/tex&amp;gt; дерево разбора. &lt;br /&gt;
&lt;br /&gt;
:Найдем в слове &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; минимальный индекс &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; такой, что слово &amp;lt;tex&amp;gt;\omega[0..i]&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью. Так как &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; минимальный, то &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)\ &amp;lt;/tex&amp;gt;. Из того, что &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;\beta=\omega[i+1..n-1]&amp;lt;/tex&amp;gt; {{---}} правильные скобочные последовательности, при этом &amp;lt;tex&amp;gt;\left\vert \alpha \right\vert&amp;lt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\vert \beta \right\vert&amp;lt;n \Rightarrow&amp;lt;/tex&amp;gt; по индукционному предположению предположению у &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; существуют единственные деревья разбора.&lt;br /&gt;
&lt;br /&gt;
:Если мы покажем, что из части &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; первого правила можно вывести только слово &amp;lt;tex&amp;gt;(\alpha)&amp;lt;/tex&amp;gt;, то утверждение будет доказано (так как из первой части первого правила выводится &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, а из второй только &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и для каждого из них по предположению существуют единственные деревья разбора).&lt;br /&gt;
&lt;br /&gt;
:Пусть из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j]=(\gamma)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt;, при этом &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, а не &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} противоречие. &lt;br /&gt;
&lt;br /&gt;
:Аналогично из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; не может быть выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j] \ &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;, потому что тогда &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha) \ &amp;lt;/tex&amp;gt; не будет правильной скобочной последовательностью, так как в позиции &amp;lt;tex&amp;gt;i-1&amp;lt;/tex&amp;gt; баланс скобок будет отрицательный.&lt;br /&gt;
&lt;br /&gt;
:Значит, из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..i] \Rightarrow \omega \ &amp;lt;/tex&amp;gt; имеет единственное дерево разбора &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; данная грамматика однозначная.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют '''существенно неоднозначными'''.&lt;br /&gt;
{{main|Существенно неоднозначные языки}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Формальные грамматики]]&lt;br /&gt;
* [[Иерархия Хомского формальных грамматик]]&lt;br /&gt;
* [[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
* [[Существенно неоднозначные языки]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]]&lt;br /&gt;
* [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]]&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71227</id>
		<title>Алгоритм Эрли</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71227"/>
				<updated>2019-05-14T20:27:00Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Псевдокод */ Исправил псевдокод&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''Алгоритм Эрли''' позволяет определить, выводится ли данное слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в данной [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободной]] грамматике &amp;lt;tex&amp;gt;G&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; и слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; выводится в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;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;w = w_0 w_1 ... w_{n-1}&amp;lt;/tex&amp;gt; {{---}} входная цепочка из &amp;lt;tex&amp;gt;\Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Объект вида &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta, i]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \rightarrow \alpha \beta &amp;lt;/tex&amp;gt; — правило из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;0 \leqslant i \leqslant n&amp;lt;/tex&amp;gt; — позиция в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, называется '''ситуацией''', относящейся к цепочке &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, где '''&amp;lt;tex&amp;gt; \cdot &amp;lt;/tex&amp;gt;''' {{---}} вспомогательный символ, который не явлется терминалом или нетерминалом ( &amp;lt;tex&amp;gt; \cdot \notin \Sigma \cup N&amp;lt;/tex&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Ситуации хранятся в множествах &amp;lt;tex&amp;gt;D_0,...,D_{n-1}&amp;lt;/tex&amp;gt;, называемых '''списками ситуаций'''. Причем наличие ситуации &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta , i]&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-м списке ситуаций &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; равносильно тому, что &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Последовательность списков ситуаций &amp;lt;tex&amp;gt;D_0, D_1, .., D_{n-1} \ &amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;списком разбора&amp;lt;/b&amp;gt; для входной цепочки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Эрли ==&lt;br /&gt;
Чтобы воспользоваться леммой, необходимо найти &amp;lt;tex&amp;gt;D_n&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Алгоритм Эрли является [[Динамическое программирование|динамическим алгоритмом]]: он последовательно строит список разбора, причём при построении &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; используются &amp;lt;tex&amp;gt;D_0, \ldots, D_{j}&amp;lt;/tex&amp;gt; (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент).&lt;br /&gt;
&lt;br /&gt;
Алгоритм основывается на следующих трёх правилах:&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot w_{j} \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;w_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ый символ строки), то &amp;lt;tex&amp;gt;[A \rightarrow \alpha w_{j} \cdot \beta, i] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_j&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \ \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
Для простоты добавим новый стартовый вспомогательный нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правило &amp;lt;tex&amp;gt;(S' \rightarrow S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{earley}(G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Инициализация &amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; D_{0} = \lbrace [S' \rightarrow \cdot \ S, 0] \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;i = 1&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;D_i&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Вычисление ситуаций &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;j = 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; изменяется&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Результат &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''if'''  &amp;lt;tex&amp;gt;[S' \rightarrow S \ \cdot, 0] \in D_{len(w)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' ''true''&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''return''' ''false''    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return'''&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i] \in D_{j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;w_{j - 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha a \cdot \beta, i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, j] \in D_{i} &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректность алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Приведенный алгоритм правильно строит все списки ситуаций. &lt;br /&gt;
То есть алгоритм поддерживает инвариант &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] \in D_{j} \Longleftrightarrow \exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по исполнению алгоритма.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''База  индукции:'' &amp;lt;/u&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0] \in D_0 \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''Индукционный переход:'' &amp;lt;/u&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть предположение верно для всех списков ситуаций с номерами меньше &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt;. Разберемся, в результате применения какого правила ситуация &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] &amp;lt;/tex&amp;gt; попала в &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{scan} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это произошло, если &amp;lt;tex&amp;gt; \alpha = \alpha ' a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; [A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;,&amp;lt;br/&amp;gt; &lt;br /&gt;
тогда в силу &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\alpha = \alpha ' a \Rightarrow^* w_i...w_{j-2}w_{j-1} = w_i...w_{j-1} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом условия: &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha \Rightarrow^* w_i...w_{j-1}&amp;lt;/tex&amp;gt; выполняются.&lt;br /&gt;
&lt;br /&gt;
2. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \varepsilon &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;, что автоматически влечет второй пункт утверждения.&amp;lt;br/&amp;gt;&lt;br /&gt;
Кроме того &amp;lt;tex&amp;gt;\exists  i' \le i&amp;lt;/tex&amp;gt; и ситуация &amp;lt;tex&amp;gt;[A' \rightarrow \alpha ' \cdot A \delta ', i'] \in D_i&amp;lt;/tex&amp;gt;, из чего по предположению индукции следует &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt; &lt;br /&gt;
и &amp;lt;tex&amp;gt; \alpha ' \Rightarrow^* w_{i'}...w_{i-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Получаем, что &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;S \Rightarrow^* w_0...w_{i'-1} \alpha' A \delta' \delta '' &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i'-1} w_{i'}...w_{i-1} A \delta' \delta ''&lt;br /&gt;
&amp;lt;/tex&amp;gt;, в итоге &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, что нам и требовалось.&lt;br /&gt;
&lt;br /&gt;
3. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{complete} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \alpha ' A' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\exists i', \delta : [A \rightarrow \alpha ' \cdot A' \beta, i] \in D_{i'} \wedge [A' \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Cледовательно &amp;lt;tex&amp;gt;\alpha = \alpha ' A' \Rightarrow^* w_i...w_{i'-1} w_{i'}...w_{j} = w_i...w_{j-1}&amp;lt;/tex&amp;gt;, что дает нам второй пункт утверждения, а так как первый пункт следует из индукционного предположения, все хорошо.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longleftarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
В обратную сторону будем доказывать индукцией по суммарной длине вывода  &amp;lt;tex&amp;gt;w_0...w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;. После чего применим&lt;br /&gt;
индукцию по длине вывода &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим три случая последнего символа &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;tex&amp;gt;\alpha = \alpha ' a&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha ' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции: &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;, а отсюда по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;tex&amp;gt;\alpha = \alpha ' B&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\exists i' : \alpha ' \Rightarrow^* w_i...w_{i'-1} \wedge B ' \Rightarrow^* w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Тогда имеем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot  \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;. Также можно записать &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, как &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} w_i...w_{i'-1}B \beta \delta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а также &amp;lt;tex&amp;gt;B \rightarrow \eta \wedge \eta \rightarrow w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Применяя индукцию по второму параметру получим &amp;lt;tex&amp;gt;[B \rightarrow \eta \cdot, i'] \in D_j \ &amp;lt;/tex&amp;gt;, откуда по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' B \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;tex&amp;gt;\alpha = \varepsilon &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Тогда либо &amp;lt;tex&amp;gt;i = 0 \wedge A = S \wedge \delta = \varepsilon&amp;lt;/tex&amp;gt;, что доказывает базу индукции,&amp;lt;br/&amp;gt;&lt;br /&gt;
либо вывод можно записать в виде &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w{i'-1}w_{i'}...w{i-1} A \delta ' \delta '' = w_0...w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; для некоторого правила &amp;lt;tex&amp;gt;(A' \rightarrow w_{i'}...w_{i-1} A \delta ') \in P&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Отсюда по предположению индукции &amp;lt;tex&amp;gt;[A' \rightarrow \cdot w_{i'}...w_{i-1} A \delta ', i'] \in D_{i'} \ &amp;lt;/tex&amp;gt;, &lt;br /&gt;
что после нескольких применений правила &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; приводит к &amp;lt;tex&amp;gt;[A' \rightarrow w_{i'}...w_{i-1} \cdot  A \delta ', i'] \in D_{i} \ &amp;lt;/tex&amp;gt;,&lt;br /&gt;
после чего по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt;[A \rightarrow \cdot \beta, i] \in D_{j} \ &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;w = (a + a)&amp;lt;/tex&amp;gt; в грамматике со следующими правилами:&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T + S&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F * T&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow ( S )&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_0&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;
|&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0]&amp;lt;/tex&amp;gt; || 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( \cdot S ), 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_2&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[S \rightarrow T + \cdot S, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_4&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot , 3]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T + S \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_5&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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S )\cdot , 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0] \in D_5&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;w \in L(G) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ]]&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[http://lpcs.math.msu.su/~sk/lehre/fivt2013/Earley.pdf Алексей Сорокин {{---}} Алгоритм Эрли]&lt;br /&gt;
* Ахо А., Ульман Д.{{---}} Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. {{---}} М.:«Мир», 1978. С. 358 — 364.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71226</id>
		<title>Алгоритм Эрли</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71226"/>
				<updated>2019-05-14T20:20:15Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Корректность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''Алгоритм Эрли''' позволяет определить, выводится ли данное слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в данной [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободной]] грамматике &amp;lt;tex&amp;gt;G&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; и слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; выводится в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;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;w = w_0 w_1 ... w_{n-1}&amp;lt;/tex&amp;gt; {{---}} входная цепочка из &amp;lt;tex&amp;gt;\Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Объект вида &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta, i]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \rightarrow \alpha \beta &amp;lt;/tex&amp;gt; — правило из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;0 \leqslant i \leqslant n&amp;lt;/tex&amp;gt; — позиция в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, называется '''ситуацией''', относящейся к цепочке &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, где '''&amp;lt;tex&amp;gt; \cdot &amp;lt;/tex&amp;gt;''' {{---}} вспомогательный символ, который не явлется терминалом или нетерминалом ( &amp;lt;tex&amp;gt; \cdot \notin \Sigma \cup N&amp;lt;/tex&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Ситуации хранятся в множествах &amp;lt;tex&amp;gt;D_0,...,D_{n-1}&amp;lt;/tex&amp;gt;, называемых '''списками ситуаций'''. Причем наличие ситуации &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta , i]&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-м списке ситуаций &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; равносильно тому, что &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Последовательность списков ситуаций &amp;lt;tex&amp;gt;D_0, D_1, .., D_{n-1} \ &amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;списком разбора&amp;lt;/b&amp;gt; для входной цепочки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Эрли ==&lt;br /&gt;
Чтобы воспользоваться леммой, необходимо найти &amp;lt;tex&amp;gt;D_n&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Алгоритм Эрли является [[Динамическое программирование|динамическим алгоритмом]]: он последовательно строит список разбора, причём при построении &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; используются &amp;lt;tex&amp;gt;D_0, \ldots, D_{j}&amp;lt;/tex&amp;gt; (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент).&lt;br /&gt;
&lt;br /&gt;
Алгоритм основывается на следующих трёх правилах:&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot w_{j} \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;w_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ый символ строки), то &amp;lt;tex&amp;gt;[A \rightarrow \alpha w_{j} \cdot \beta, i] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_j&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \ \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
Для простоты добавим новый стартовый вспомогательный нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правило &amp;lt;tex&amp;gt;(S' \rightarrow S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{earley}(G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Инициализация &amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; D_{0} = \lbrace [S' \rightarrow \cdot \ S, 0] \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;i = 1&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;D_i&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Вычисление ситуаций &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;j = 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; изменяется&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Результат &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''if'''  &amp;lt;tex&amp;gt;[S' \rightarrow S \ \cdot, 0] \in D_{len(w)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' ''true''&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''return''' ''false''    &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Первое правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return'''&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i] \in D_{j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;w_{j - 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Второе правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_{i} &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Третье правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректность алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Приведенный алгоритм правильно строит все списки ситуаций. &lt;br /&gt;
То есть алгоритм поддерживает инвариант &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] \in D_{j} \Longleftrightarrow \exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по исполнению алгоритма.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''База  индукции:'' &amp;lt;/u&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0] \in D_0 \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''Индукционный переход:'' &amp;lt;/u&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть предположение верно для всех списков ситуаций с номерами меньше &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt;. Разберемся, в результате применения какого правила ситуация &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] &amp;lt;/tex&amp;gt; попала в &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{scan} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это произошло, если &amp;lt;tex&amp;gt; \alpha = \alpha ' a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; [A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;,&amp;lt;br/&amp;gt; &lt;br /&gt;
тогда в силу &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\alpha = \alpha ' a \Rightarrow^* w_i...w_{j-2}w_{j-1} = w_i...w_{j-1} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом условия: &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha \Rightarrow^* w_i...w_{j-1}&amp;lt;/tex&amp;gt; выполняются.&lt;br /&gt;
&lt;br /&gt;
2. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \varepsilon &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;, что автоматически влечет второй пункт утверждения.&amp;lt;br/&amp;gt;&lt;br /&gt;
Кроме того &amp;lt;tex&amp;gt;\exists  i' \le i&amp;lt;/tex&amp;gt; и ситуация &amp;lt;tex&amp;gt;[A' \rightarrow \alpha ' \cdot A \delta ', i'] \in D_i&amp;lt;/tex&amp;gt;, из чего по предположению индукции следует &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt; &lt;br /&gt;
и &amp;lt;tex&amp;gt; \alpha ' \Rightarrow^* w_{i'}...w_{i-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Получаем, что &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;S \Rightarrow^* w_0...w_{i'-1} \alpha' A \delta' \delta '' &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i'-1} w_{i'}...w_{i-1} A \delta' \delta ''&lt;br /&gt;
&amp;lt;/tex&amp;gt;, в итоге &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, что нам и требовалось.&lt;br /&gt;
&lt;br /&gt;
3. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{complete} \ &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \alpha ' A' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\exists i', \delta : [A \rightarrow \alpha ' \cdot A' \beta, i] \in D_{i'} \wedge [A' \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Cледовательно &amp;lt;tex&amp;gt;\alpha = \alpha ' A' \Rightarrow^* w_i...w_{i'-1} w_{i'}...w_{j} = w_i...w_{j-1}&amp;lt;/tex&amp;gt;, что дает нам второй пункт утверждения, а так как первый пункт следует из индукционного предположения, все хорошо.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longleftarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
В обратную сторону будем доказывать индукцией по суммарной длине вывода  &amp;lt;tex&amp;gt;w_0...w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;. После чего применим&lt;br /&gt;
индукцию по длине вывода &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим три случая последнего символа &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;tex&amp;gt;\alpha = \alpha ' a&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha ' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции: &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;, а отсюда по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;tex&amp;gt;\alpha = \alpha ' B&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\exists i' : \alpha ' \Rightarrow^* w_i...w_{i'-1} \wedge B ' \Rightarrow^* w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Тогда имеем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot  \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;. Также можно записать &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, как &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} w_i...w_{i'-1}B \beta \delta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а также &amp;lt;tex&amp;gt;B \rightarrow \eta \wedge \eta \rightarrow w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Применяя индукцию по второму параметру получим &amp;lt;tex&amp;gt;[B \rightarrow \eta \cdot, i'] \in D_j \ &amp;lt;/tex&amp;gt;, откуда по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' B \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;tex&amp;gt;\alpha = \varepsilon &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Тогда либо &amp;lt;tex&amp;gt;i = 0 \wedge A = S \wedge \delta = \varepsilon&amp;lt;/tex&amp;gt;, что доказывает базу индукции,&amp;lt;br/&amp;gt;&lt;br /&gt;
либо вывод можно записать в виде &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w{i'-1}w_{i'}...w{i-1} A \delta ' \delta '' = w_0...w_{i-1} A \delta \ &amp;lt;/tex&amp;gt; для некоторого правила &amp;lt;tex&amp;gt;(A' \rightarrow w_{i'}...w_{i-1} A \delta ') \in P&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Отсюда по предположению индукции &amp;lt;tex&amp;gt;[A' \rightarrow \cdot w_{i'}...w_{i-1} A \delta ', i'] \in D_{i'} \ &amp;lt;/tex&amp;gt;, &lt;br /&gt;
что после нескольких применений правила &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; приводит к &amp;lt;tex&amp;gt;[A' \rightarrow w_{i'}...w_{i-1} \cdot  A \delta ', i'] \in D_{i} \ &amp;lt;/tex&amp;gt;,&lt;br /&gt;
после чего по правилу &amp;lt;tex&amp;gt; \mathtt{predict} \ &amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt;[A \rightarrow \cdot \beta, i] \in D_{j} \ &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;w = (a + a)&amp;lt;/tex&amp;gt; в грамматике со следующими правилами:&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T + S&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F * T&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow ( S )&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_0&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;
|&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0]&amp;lt;/tex&amp;gt; || 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( \cdot S ), 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_2&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[S \rightarrow T + \cdot S, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_4&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot , 3]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T + S \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_5&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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S )\cdot , 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0] \in D_5&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;w \in L(G) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ]]&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[http://lpcs.math.msu.su/~sk/lehre/fivt2013/Earley.pdf Алексей Сорокин {{---}} Алгоритм Эрли]&lt;br /&gt;
* Ахо А., Ульман Д.{{---}} Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. {{---}} М.:«Мир», 1978. С. 358 — 364.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71225</id>
		<title>Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71225"/>
				<updated>2019-05-14T20:07:43Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Алгоритм для произвольной грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&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;
Будем решать задачу динамическим программированием. Введём динамику &amp;lt;tex&amp;gt;a\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i..j-1]\right] \ &amp;lt;/tex&amp;gt;, аналогично [[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|базовой версии]] алгоритма.  &lt;br /&gt;
&lt;br /&gt;
Также введём вспомогательный четырехмерный массив &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, j, k\right] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..j-1\right]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим все тройки &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle \mid j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;k &amp;lt; \left|\alpha\right|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''База динамики''': &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i] \ &amp;lt;/tex&amp;gt;, иначе  &amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i\right] =  true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow \varepsilon \ &amp;lt;/tex&amp;gt;, иначе &amp;lt;tex&amp;gt;a\left[A, i, i\right] =  false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] = true \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Переход''': &lt;br /&gt;
&lt;br /&gt;
:Пусть значения для всех нетерминалов, пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle \mid j' - i' &amp;lt; m \rbrace \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lbrace k' \mid k' &amp;lt; k \rbrace \ &amp;lt;/tex&amp;gt; уже вычислены, поэтому вспомогательная динамика: &amp;lt;tex&amp;gt; h\left[A \rightarrow \alpha, i, j+1, k\right] = \bigvee\limits_{r=i..j+1}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha\left[k\right],r,j+1\right]\right)&amp;lt;/tex&amp;gt; То есть, подстроку &amp;lt;tex&amp;gt;w[i..j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..r-1\right]&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r..j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го символа правой части правила. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j+1\right] &amp;lt;/tex&amp;gt;, но на результат это не повлияет, так как в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]=false \ &amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Но если &amp;lt;tex&amp;gt;\alpha\left[k\right]&amp;lt;/tex&amp;gt;  {{---}}  терминал, то подстроку &amp;lt;tex&amp;gt;w[i..j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..r-1\right] \ &amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r..j]&amp;lt;/tex&amp;gt; выводится, если &amp;lt;tex&amp;gt;w\left[r..j\right]=\alpha\left[k\right] \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Базовая динамика выражается так: &amp;lt;tex&amp;gt;a\left[A,i,j\right]=\bigvee\limits_{A \rightarrow \alpha}h\left[A \rightarrow \alpha, i, j, \left|\alpha\right|\right] \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i..j-1] \ &amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если из длины правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..j-1\right] &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* '''Завершение''': &lt;br /&gt;
&lt;br /&gt;
:После окончания работы ответ содержится в ячейке &amp;lt;tex&amp;gt;a\left[S, 1, n\right] &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 '''CYK_Modified'''(S, Г): &amp;lt;font color = darkgreen&amp;gt;// S {{---}} строка длины n, Г {{---}} КС-грамматика &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
       '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''if'''( A -&amp;gt; w[i] in Г) a[A, i, i+1] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; w[i] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i+1] = false&lt;br /&gt;
        '''if'''( A -&amp;gt; eps in Г) a[A, i, i] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; eps &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i] = false&lt;br /&gt;
        h[A-&amp;gt;alpha, i, i, 0] = true&lt;br /&gt;
      '''for''' m = 1..n&lt;br /&gt;
       '''for''' i = 1..n&lt;br /&gt;
           j = i+m&lt;br /&gt;
        '''for''' k = 1..M&lt;br /&gt;
         '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          h[A-&amp;gt;alpha, i, j+1, k] = OR( for r = i..j+1) (h[A-&amp;gt;alpha, i, r, k-1] &amp;amp; a[alpha[k],r,j+1])&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
        '''for''' j = 1..n&lt;br /&gt;
          '''for''' Rj -&amp;gt; alpha&lt;br /&gt;
           a[A, i, j] = OR( for A-&amp;gt;alpha) h[A-&amp;gt;alpha, i, j, |alpha|] &amp;lt;font color = darkgreen&amp;gt;// где |alpha| {{---}} размер правой части правила&amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''return''' a[S, 1, n]     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;M = \max\limits_{A \rightarrow \alpha}\left|\alpha\right|&amp;lt;/tex&amp;gt; — максимальную длину правой части правила.  &lt;br /&gt;
&lt;br /&gt;
Обработки правил вида &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A \rightarrow \varepsilon&amp;lt;/tex&amp;gt; и нахождение &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] \ &amp;lt;/tex&amp;gt; выполняются за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Время одного перехода вспомогательной динамики &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, суммарное число состояний &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&amp;lt;/tex&amp;gt;. Отсюда расчёт вспомогательной динамики занимает &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right) \ &amp;lt;/tex&amp;gt; времени, базовая динамика находится, как &amp;lt;tex&amp;gt;O \left( n^2 \cdot |\Gamma| \right)&amp;lt;/tex&amp;gt;. Итоговая временная сложность алгоритма равна &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt;. Алгоритму требуется &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M) \ &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;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71224</id>
		<title>Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71224"/>
				<updated>2019-05-14T20:03:09Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Минимальная стоимость вывода слова */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в [[нормальная форма Хомского|нормальной форме Хомского]] и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&amp;lt;/tex&amp;gt;. Требуется выяснить, выводится ли это слово в данной грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Контекстно-свободная грамматика ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная грамматика]]''' ('''КС-грамматика''', '''бесконтекстная грамматика''') {{---}} способ описания формального языка, представляющий собой четверку&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} [[Основные_определения: алфавит, слово, язык, конкатенация, свободный моноид слов|алфавит]], элементы которого называют '''терминалами''' (англ. ''terminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; {{---}} множество, элементы которого называют '''нетерминалами''' (англ. ''nonterminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} начальный символ грамматики (англ. ''start symbol'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} набор правил вывода (англ. ''production rules'' или ''productions'') вида &amp;lt;tex&amp;gt;A \rightarrow B_1 B_2 ... B_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \in N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_i \in \Sigma \cup N&amp;lt;/tex&amp;gt;, то есть у которых левые части {{---}} одиночные нетерминалы, а правые - последовательности терминалов и нетерминалов.&lt;br /&gt;
}}&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
Терминалы &amp;lt;tex&amp;gt;\Sigma = \{(, )\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt;N = \{S\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Правила вывода &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}  &lt;br /&gt;
 S \rightarrow \varepsilon\\&lt;br /&gt;
 S \rightarrow SS\\&lt;br /&gt;
 S \rightarrow (S)\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная грамматика задает язык [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]]. Например, последовательность &amp;lt;tex&amp;gt;(()(()))&amp;lt;/tex&amp;gt; может быть выведена следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S \Rightarrow (S) \Rightarrow (SS) \Rightarrow (()(S)) \Rightarrow (()(())) &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;A \rightarrow a&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; {{---}} терминал&lt;br /&gt;
* &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} нетерминалы, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; не являются начальными нетерминалами&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;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;
'''Алгоритм Кока-Янгера-Касами''' (англ. ''Cocke-Younger-Kasami algorithm'', англ. ''CYK-алгоритм'') {{---}} алгоритм, позволяющий по слову узнать, выводимо ли оно в заданной КС-грамматике в нормальной форме Хомского. Любую КС-грамматику можно привести к НФХ, поэтому алгоритм является универсальным для любой КС-грамматики.&lt;br /&gt;
&lt;br /&gt;
Будем решать задачу [[Динамическое_программирование|динамическим программированием]]. Дана строка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Заведем для неё трехмерный массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;|N| \times n \times n&amp;lt;/tex&amp;gt;, состоящий из логических значений, и &amp;lt;tex&amp;gt;d[A][i][j] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; правилами грамматики можно вывести подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим все пары &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle | j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i = j&amp;lt;/tex&amp;gt;. Инициализируем массив для всех нетерминалов, из которых выводится какой-либо символ строки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. В таком случае &amp;lt;tex&amp;gt;d[A][i][i] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;. Иначе &amp;lt;tex&amp;gt;d[A][i][i] = false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i \ne j&amp;lt;/tex&amp;gt;. Значения для всех нетерминалов и пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle | j' - i' &amp;lt; m \rbrace&amp;lt;/tex&amp;gt; уже вычислены, поэтому &amp;lt;tex&amp;gt;d[A][i][j] = \bigvee\limits_{A \rightarrow BC}\bigvee\limits_{k = i}^{j-1} d[B][i][k] \wedge d[C][k+1][j] \ \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если существует продукция вида &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt; и такое &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что подстрока &amp;lt;tex&amp;gt;w[i \dots k]&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[k + 1 \dots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Файл:CYK_rule_2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
После окончания работы значение &amp;lt;tex&amp;gt;d[S][1][n]&amp;lt;/tex&amp;gt; содержит ответ на вопрос, выводима ли данная строка в данной грамматике, где &amp;lt;tex&amp;gt;S&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;d[A][i][j] = \sum\limits_{A \rightarrow BC}\sum\limits_{k = i}^{j-1} d[B][i][k] \cdot d[C][k + 1][j] \ \ &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} количество способов получить подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Минимальная стоимость вывода слова ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;H(A \rightarrow BC)&amp;lt;/tex&amp;gt; {{---}} стоимость вывода по правилу &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;. Тогда, если использовать формулу &amp;lt;tex&amp;gt;d[A][i][j] = \min\limits_{A \rightarrow BC} \min\limits_{k = i}^{j-1}  ( d[B][i][k] + d[C][k + 1][j] + H(A \rightarrow BC) ) \ \ &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} минимальная стоимость вывода подстроки &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&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;A \rightarrow w[i]&amp;lt;/tex&amp;gt; выполняется за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проход по всем подстрокам выполняется за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;. В обработке одной подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. В итоге получаем конечную сложность &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, общее время работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. Кроме того, алгоритму требуется память на массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; объемом &amp;lt;tex&amp;gt;O(n^2 \cdot |N|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|N|&amp;lt;/tex&amp;gt; {{---}}  количество [[Формальные_грамматики#Определения|нетерминалов]] грамматики.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
Дана грамматика [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в нормальной форме Хомского.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}   &lt;br /&gt;
 A \rightarrow \varepsilon\ |\ BB\ |\ CD\\&lt;br /&gt;
 B \rightarrow BB\ |\ CD\\&lt;br /&gt;
 C \rightarrow (\\&lt;br /&gt;
 D \rightarrow BE\ |\ )\\&lt;br /&gt;
 E \rightarrow )\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дано слово &amp;lt;tex&amp;gt;w = ()(())&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Инициализация массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заполнение массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также == &lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики|Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
* [[Алгоритм_Эрли|Алгоритм Эрли]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:CYK_algorithm|Wikipedia {{---}} CYK algorithm]]&lt;br /&gt;
* [http://web.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf David Rodriguez-Velazquez, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
* [https://www.princeton.edu/~achaney/tmve/wiki100k/docs/CYK_algorithm.html Princeton University, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Динамическое программирование]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71223</id>
		<title>Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71223"/>
				<updated>2019-05-14T20:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Количество способов вывести слово */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в [[нормальная форма Хомского|нормальной форме Хомского]] и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&amp;lt;/tex&amp;gt;. Требуется выяснить, выводится ли это слово в данной грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Контекстно-свободная грамматика ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная грамматика]]''' ('''КС-грамматика''', '''бесконтекстная грамматика''') {{---}} способ описания формального языка, представляющий собой четверку&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} [[Основные_определения: алфавит, слово, язык, конкатенация, свободный моноид слов|алфавит]], элементы которого называют '''терминалами''' (англ. ''terminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; {{---}} множество, элементы которого называют '''нетерминалами''' (англ. ''nonterminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} начальный символ грамматики (англ. ''start symbol'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} набор правил вывода (англ. ''production rules'' или ''productions'') вида &amp;lt;tex&amp;gt;A \rightarrow B_1 B_2 ... B_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \in N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_i \in \Sigma \cup N&amp;lt;/tex&amp;gt;, то есть у которых левые части {{---}} одиночные нетерминалы, а правые - последовательности терминалов и нетерминалов.&lt;br /&gt;
}}&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
Терминалы &amp;lt;tex&amp;gt;\Sigma = \{(, )\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt;N = \{S\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Правила вывода &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}  &lt;br /&gt;
 S \rightarrow \varepsilon\\&lt;br /&gt;
 S \rightarrow SS\\&lt;br /&gt;
 S \rightarrow (S)\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная грамматика задает язык [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]]. Например, последовательность &amp;lt;tex&amp;gt;(()(()))&amp;lt;/tex&amp;gt; может быть выведена следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S \Rightarrow (S) \Rightarrow (SS) \Rightarrow (()(S)) \Rightarrow (()(())) &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;A \rightarrow a&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; {{---}} терминал&lt;br /&gt;
* &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} нетерминалы, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; не являются начальными нетерминалами&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;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;
'''Алгоритм Кока-Янгера-Касами''' (англ. ''Cocke-Younger-Kasami algorithm'', англ. ''CYK-алгоритм'') {{---}} алгоритм, позволяющий по слову узнать, выводимо ли оно в заданной КС-грамматике в нормальной форме Хомского. Любую КС-грамматику можно привести к НФХ, поэтому алгоритм является универсальным для любой КС-грамматики.&lt;br /&gt;
&lt;br /&gt;
Будем решать задачу [[Динамическое_программирование|динамическим программированием]]. Дана строка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Заведем для неё трехмерный массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;|N| \times n \times n&amp;lt;/tex&amp;gt;, состоящий из логических значений, и &amp;lt;tex&amp;gt;d[A][i][j] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; правилами грамматики можно вывести подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим все пары &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle | j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i = j&amp;lt;/tex&amp;gt;. Инициализируем массив для всех нетерминалов, из которых выводится какой-либо символ строки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. В таком случае &amp;lt;tex&amp;gt;d[A][i][i] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;. Иначе &amp;lt;tex&amp;gt;d[A][i][i] = false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i \ne j&amp;lt;/tex&amp;gt;. Значения для всех нетерминалов и пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle | j' - i' &amp;lt; m \rbrace&amp;lt;/tex&amp;gt; уже вычислены, поэтому &amp;lt;tex&amp;gt;d[A][i][j] = \bigvee\limits_{A \rightarrow BC}\bigvee\limits_{k = i}^{j-1} d[B][i][k] \wedge d[C][k+1][j] \ \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если существует продукция вида &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt; и такое &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что подстрока &amp;lt;tex&amp;gt;w[i \dots k]&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[k + 1 \dots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Файл:CYK_rule_2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
После окончания работы значение &amp;lt;tex&amp;gt;d[S][1][n]&amp;lt;/tex&amp;gt; содержит ответ на вопрос, выводима ли данная строка в данной грамматике, где &amp;lt;tex&amp;gt;S&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;d[A][i][j] = \sum\limits_{A \rightarrow BC}\sum\limits_{k = i}^{j-1} d[B][i][k] \cdot d[C][k + 1][j] \ \ &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} количество способов получить подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Минимальная стоимость вывода слова ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;H(A \rightarrow BC)&amp;lt;/tex&amp;gt; {{---}} стоимость вывода по правилу &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;. Тогда, если использовать формулу &amp;lt;tex&amp;gt;d[A][i][j] = \min\limits_{A \rightarrow BC} \min\limits_{k = i}^{j-1}  ( d[B][i][k] + d[C][k + 1][j] + H(A \rightarrow BC) )&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} минимальная стоимость вывода подстроки &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&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;A \rightarrow w[i]&amp;lt;/tex&amp;gt; выполняется за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проход по всем подстрокам выполняется за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;. В обработке одной подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. В итоге получаем конечную сложность &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, общее время работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. Кроме того, алгоритму требуется память на массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; объемом &amp;lt;tex&amp;gt;O(n^2 \cdot |N|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|N|&amp;lt;/tex&amp;gt; {{---}}  количество [[Формальные_грамматики#Определения|нетерминалов]] грамматики.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
Дана грамматика [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в нормальной форме Хомского.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}   &lt;br /&gt;
 A \rightarrow \varepsilon\ |\ BB\ |\ CD\\&lt;br /&gt;
 B \rightarrow BB\ |\ CD\\&lt;br /&gt;
 C \rightarrow (\\&lt;br /&gt;
 D \rightarrow BE\ |\ )\\&lt;br /&gt;
 E \rightarrow )\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дано слово &amp;lt;tex&amp;gt;w = ()(())&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Инициализация массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заполнение массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также == &lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики|Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
* [[Алгоритм_Эрли|Алгоритм Эрли]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:CYK_algorithm|Wikipedia {{---}} CYK algorithm]]&lt;br /&gt;
* [http://web.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf David Rodriguez-Velazquez, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
* [https://www.princeton.edu/~achaney/tmve/wiki100k/docs/CYK_algorithm.html Princeton University, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Динамическое программирование]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71222</id>
		<title>Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71222"/>
				<updated>2019-05-14T19:53:07Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Однозначные грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=csgrammar&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободной грамматикой''' (англ. ''сontext-free grammar'') называется [[Формальные грамматики|грамматика]], у которой в левых частях всех правил стоят только одиночные нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=lang&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободный язык''' (англ. ''context-free language'') {{---}} язык, задаваемый контекстно-свободной грамматикой.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лево- и правосторонний вывод слова==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Выводом слова''' (англ. ''derivation of a word'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово &amp;lt;tex&amp;gt;\alpha&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;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы &lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал &lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow S(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выведем слово &amp;lt;tex&amp;gt;(()(()))()&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (S)\boldsymbol{S} \Rightarrow (S)(\boldsymbol{S})S\Rightarrow(S)()\boldsymbol{S}\Rightarrow(\boldsymbol{S})()\Rightarrow(\boldsymbol{S}(S))()\Rightarrow(S(S)(\boldsymbol{S}))()\Rightarrow(S(S)(\boldsymbol{S}(S)))()\Rightarrow (S(\boldsymbol{S})((S)))()\Rightarrow(\boldsymbol{S}()((S)))()\Rightarrow(()((\boldsymbol{S})))()\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левосторонним выводом слова''' (англ. ''leftmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правосторонним выводом слова''' (англ. ''rightmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим левосторонний вывод скобочной последовательности из примера:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дерево разбора==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Крона дерева разбора''' (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Построим дерево разбора скобочной последовательности из примера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree1.png]]&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и кроной &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\omega \in N^{*}&amp;lt;/tex&amp;gt;. Тогда в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; существует левое порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Используем индукцию по высоте дерева.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Базисом является высота &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, наименьшая из возможных для дерева разбора с терминальной кроной.&lt;br /&gt;
:Поскольку это дерево является деревом разбора, &amp;lt;tex&amp;gt;A \rightarrow \omega&amp;lt;/tex&amp;gt; должно быть продукцией. Таким образом, &amp;lt;tex&amp;gt;A \Rightarrow_{lm} \omega&amp;lt;/tex&amp;gt; есть одношаговое левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Существует корень с отметкой &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и сыновьями, отмеченными слева направо &amp;lt;tex&amp;gt;X_1X_2 \dots X_k&amp;lt;/tex&amp;gt;. Символы &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; могут быть как терминалами, так и переменными.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то определим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; как цепочку, состоящую из одного &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Заметим, что в этом случае высота поддерева меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение &amp;lt;tex&amp;gt;X_i \Rightarrow^{*}_{lm} \omega_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\omega = \omega_1\omega_2 \dots \omega_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим левое порождение цепочки &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
:Начнем с шага &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Затем для &amp;lt;tex&amp;gt;i = 1, 2, \dots, k \ &amp;lt;/tex&amp;gt; покажем, что имеет место следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное доказательство использует в действительности еще одну индукцию, на этот раз по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для базиса &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt; мы уже знаем, что &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для индукции предположим, что существует следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то не делаем ничего, но в дальнейшем рассматриваем &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; как терминальную цепочку &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Таким образом, приходим к существованию следующего порождения. &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; является переменной, то продолжаем порождением &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; в контексте уже построенного порождения. Таким образом, если этим порождением является: &amp;lt;tex&amp;gt;X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2\dots \Rightarrow_{lm} \omega_i&amp;lt;/tex&amp;gt;, то продолжаем следующими порождениями: &lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_1X_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_2X_{i+1}\dots X_k  \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом является порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда &amp;lt;tex&amp;gt;i = k&amp;lt;/tex&amp;gt;, результат представляет собой левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t2&lt;br /&gt;
|statement=Для каждой грамматики &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;N^{*}&amp;lt;/tex&amp;gt; цепочка &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных дерева разбора тогда и только тогда, когда &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных левых порождения из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве [[#t1|теоремы]]. В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Longleftarrow &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;
|definition=&lt;br /&gt;
Грамматика называется '''однозначной''' (англ. ''unambiguous grammar''), если у каждого слова имеется не более одного дерева разбора в этой грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma-&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} однозначная грамматика. Тогда &amp;lt;tex&amp;gt;\forall \omega \in \mathbb{L}(\Gamma)&amp;lt;/tex&amp;gt; существует ровно один левосторонний (правосторонний) вывод.&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Грамматика из примера не является однозначной.&lt;br /&gt;
|proof=Выше уже было построено дерево разбора для слова &amp;lt;tex&amp;gt;(()(()))()&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим еще одно дерево разбора для данного слова.&lt;br /&gt;
&lt;br /&gt;
Например, оно будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree2.png]]&lt;br /&gt;
Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике &amp;lt;tex&amp;gt;\Rightarrow&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;
:&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы&lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта грамматика однозначна.&lt;br /&gt;
Для этого, используя индукцию, докажем, что для любого слова &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Если &amp;lt;tex&amp;gt;\omega=\varepsilon&amp;lt;/tex&amp;gt;, то оно выводится только по второму правилу &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; для него существует единственное дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Пусть &amp;lt;tex&amp;gt;\left\vert \omega \right\vert=n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \upsilon&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\left\vert \upsilon \right\vert &amp;lt; n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\upsilon&amp;lt;/tex&amp;gt; {{---}} правильная скобочная последовательность, у которой &amp;lt;tex&amp;gt;\exists!&amp;lt;/tex&amp;gt; дерево разбора. &lt;br /&gt;
&lt;br /&gt;
:Найдем в слове &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; минимальный индекс &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; такой, что слово &amp;lt;tex&amp;gt;\omega[0..i]&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью. Так как &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; минимальный, то &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)\ &amp;lt;/tex&amp;gt;. Из того, что &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;\beta=\omega[i+1..n-1]&amp;lt;/tex&amp;gt; {{---}} правильные скобочные последовательности, при этом &amp;lt;tex&amp;gt;\left\vert \alpha \right\vert&amp;lt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\vert \beta \right\vert&amp;lt;n \Rightarrow&amp;lt;/tex&amp;gt; по индукционному предположению предположению у &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; существуют единственные деревья разбора.&lt;br /&gt;
&lt;br /&gt;
:Если мы покажем, что из части &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; первого правила можно вывести только слово &amp;lt;tex&amp;gt;(\alpha)&amp;lt;/tex&amp;gt;, то утверждение будет доказано (так как из первой части первого правила выводится &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, а из второй только &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и для каждого из них по предположению существуют единственные деревья разбора).&lt;br /&gt;
&lt;br /&gt;
:Пусть из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j]=(\gamma)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt;, при этом &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, а не &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} противоречие. &lt;br /&gt;
&lt;br /&gt;
:Аналогично из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; не может быть выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j] \ &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;, потому что тогда &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha) \ &amp;lt;/tex&amp;gt; не будет правильной скобочной последовательностью, так как в позиции &amp;lt;tex&amp;gt;i-1&amp;lt;/tex&amp;gt; баланс скобок будет отрицательный.&lt;br /&gt;
&lt;br /&gt;
:Значит, из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..i] \Rightarrow \omega \ &amp;lt;/tex&amp;gt; имеет единственное дерево разбора &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; данная грамматика однозначная.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют '''существенно неоднозначными'''.&lt;br /&gt;
{{main|Существенно неоднозначные языки}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Формальные грамматики]]&lt;br /&gt;
* [[Иерархия Хомского формальных грамматик]]&lt;br /&gt;
* [[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
* [[Существенно неоднозначные языки]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]]&lt;br /&gt;
* [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]]&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71221</id>
		<title>Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71221"/>
				<updated>2019-05-14T19:50:23Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Лево- и правосторонний вывод слова */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=csgrammar&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободной грамматикой''' (англ. ''сontext-free grammar'') называется [[Формальные грамматики|грамматика]], у которой в левых частях всех правил стоят только одиночные нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=lang&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободный язык''' (англ. ''context-free language'') {{---}} язык, задаваемый контекстно-свободной грамматикой.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лево- и правосторонний вывод слова==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Выводом слова''' (англ. ''derivation of a word'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово &amp;lt;tex&amp;gt;\alpha&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;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы &lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал &lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow S(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выведем слово &amp;lt;tex&amp;gt;(()(()))()&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (S)\boldsymbol{S} \Rightarrow (S)(\boldsymbol{S})S\Rightarrow(S)()\boldsymbol{S}\Rightarrow(\boldsymbol{S})()\Rightarrow(\boldsymbol{S}(S))()\Rightarrow(S(S)(\boldsymbol{S}))()\Rightarrow(S(S)(\boldsymbol{S}(S)))()\Rightarrow (S(\boldsymbol{S})((S)))()\Rightarrow(\boldsymbol{S}()((S)))()\Rightarrow(()((\boldsymbol{S})))()\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левосторонним выводом слова''' (англ. ''leftmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правосторонним выводом слова''' (англ. ''rightmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим левосторонний вывод скобочной последовательности из примера:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дерево разбора==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Крона дерева разбора''' (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Построим дерево разбора скобочной последовательности из примера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree1.png]]&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и кроной &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\omega \in N^{*}&amp;lt;/tex&amp;gt;. Тогда в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; существует левое порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Используем индукцию по высоте дерева.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Базисом является высота &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, наименьшая из возможных для дерева разбора с терминальной кроной.&lt;br /&gt;
:Поскольку это дерево является деревом разбора, &amp;lt;tex&amp;gt;A \rightarrow \omega&amp;lt;/tex&amp;gt; должно быть продукцией. Таким образом, &amp;lt;tex&amp;gt;A \Rightarrow_{lm} \omega&amp;lt;/tex&amp;gt; есть одношаговое левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Существует корень с отметкой &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и сыновьями, отмеченными слева направо &amp;lt;tex&amp;gt;X_1X_2 \dots X_k&amp;lt;/tex&amp;gt;. Символы &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; могут быть как терминалами, так и переменными.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то определим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; как цепочку, состоящую из одного &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Заметим, что в этом случае высота поддерева меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение &amp;lt;tex&amp;gt;X_i \Rightarrow^{*}_{lm} \omega_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\omega = \omega_1\omega_2 \dots \omega_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим левое порождение цепочки &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
:Начнем с шага &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Затем для &amp;lt;tex&amp;gt;i = 1, 2, \dots, k \ &amp;lt;/tex&amp;gt; покажем, что имеет место следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное доказательство использует в действительности еще одну индукцию, на этот раз по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для базиса &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt; мы уже знаем, что &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для индукции предположим, что существует следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то не делаем ничего, но в дальнейшем рассматриваем &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; как терминальную цепочку &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Таким образом, приходим к существованию следующего порождения. &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; является переменной, то продолжаем порождением &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; в контексте уже построенного порождения. Таким образом, если этим порождением является: &amp;lt;tex&amp;gt;X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2\dots \Rightarrow_{lm} \omega_i&amp;lt;/tex&amp;gt;, то продолжаем следующими порождениями: &lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_1X_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_2X_{i+1}\dots X_k  \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом является порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда &amp;lt;tex&amp;gt;i = k&amp;lt;/tex&amp;gt;, результат представляет собой левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t2&lt;br /&gt;
|statement=Для каждой грамматики &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;N^{*}&amp;lt;/tex&amp;gt; цепочка &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных дерева разбора тогда и только тогда, когда &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных левых порождения из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве [[#t1|теоремы]]. В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Longleftarrow &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;
|definition=&lt;br /&gt;
Грамматика называется '''однозначной''' (англ. ''unambiguous grammar''), если у каждого слова имеется не более одного дерева разбора в этой грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma-&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} однозначная грамматика. Тогда &amp;lt;tex&amp;gt;\forall \omega \in \mathbb{L}(\Gamma)&amp;lt;/tex&amp;gt; существует ровно один левосторонний (правосторонний) вывод.&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Грамматика из примера не является однозначной.&lt;br /&gt;
|proof=Выше уже было построено дерево разбора для слова &amp;lt;tex&amp;gt;&amp;quot;(()(()))()&amp;quot;&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим еще одно дерево разбора для данного слова.&lt;br /&gt;
&lt;br /&gt;
Например, оно будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree2.png]]&lt;br /&gt;
Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике &amp;lt;tex&amp;gt;\Rightarrow&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;
:&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы&lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта грамматика однозначна.&lt;br /&gt;
Для этого, используя индукцию, докажем, что для любого слова &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Если &amp;lt;tex&amp;gt;\omega=\varepsilon&amp;lt;/tex&amp;gt;, то оно выводится только по второму правилу &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; для него существует единственное дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Пусть &amp;lt;tex&amp;gt;\left\vert \omega \right\vert=n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \upsilon&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\left\vert \upsilon \right\vert &amp;lt; n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\upsilon&amp;lt;/tex&amp;gt; {{---}} правильная скобочная последовательность, у которой &amp;lt;tex&amp;gt;\exists!&amp;lt;/tex&amp;gt; дерево разбора. &lt;br /&gt;
&lt;br /&gt;
:Найдем в слове &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; минимальный индекс &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; такой, что слово &amp;lt;tex&amp;gt;\omega[0..i]&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью. Так как &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; минимальный, то &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)\ &amp;lt;/tex&amp;gt;. Из того, что &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;\beta=\omega[i+1..n-1]&amp;lt;/tex&amp;gt; {{---}} правильные скобочные последовательности, при этом &amp;lt;tex&amp;gt;\left\vert \alpha \right\vert&amp;lt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\vert \beta \right\vert&amp;lt;n \Rightarrow&amp;lt;/tex&amp;gt; по индукционному предположению предположению у &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; существуют единственные деревья разбора.&lt;br /&gt;
&lt;br /&gt;
:Если мы покажем, что из части &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; первого правила можно вывести только слово &amp;lt;tex&amp;gt;(\alpha)&amp;lt;/tex&amp;gt;, то утверждение будет доказано (так как из первой части первого правила выводится &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, а из второй только &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и для каждого из них по предположению существуют единственные деревья разбора).&lt;br /&gt;
&lt;br /&gt;
:Пусть из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j]=(\gamma)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt;, при этом &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, а не &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} противоречие. &lt;br /&gt;
&lt;br /&gt;
:Аналогично из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; не может быть выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j] \ &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;, потому что тогда &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha) \ &amp;lt;/tex&amp;gt; не будет правильной скобочной последовательностью, так как в позиции &amp;lt;tex&amp;gt;i-1&amp;lt;/tex&amp;gt; баланс скобок будет отрицательный.&lt;br /&gt;
&lt;br /&gt;
:Значит, из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..i] \Rightarrow \omega \ &amp;lt;/tex&amp;gt; имеет единственное дерево разбора &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; данная грамматика однозначная.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют '''существенно неоднозначными'''.&lt;br /&gt;
{{main|Существенно неоднозначные языки}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Формальные грамматики]]&lt;br /&gt;
* [[Иерархия Хомского формальных грамматик]]&lt;br /&gt;
* [[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
* [[Существенно неоднозначные языки]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]]&lt;br /&gt;
* [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]]&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71220</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71220"/>
				<updated>2019-05-14T19:47:43Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Определения */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(...) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \} \ &amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1..|Q| :\ a[i] = 1..|Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) \ &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u = q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y \ &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x| \ (\mathrm{mod} \ 2 )&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71219</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71219"/>
				<updated>2019-05-14T19:43:47Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Правый контекст */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(...) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \}&amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1..|Q| :\ a[i] = 1..|Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) \ &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u = q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y \ &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x| \ (\mathrm{mod} \ 2 )&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71218</id>
		<title>Алгоритм Эрли</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71218"/>
				<updated>2019-05-14T19:05:10Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''Алгоритм Эрли''' позволяет определить, выводится ли данное слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в данной [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободной]] грамматике &amp;lt;tex&amp;gt;G&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; и слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; выводится в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;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;w = w_0 w_1 ... w_{n-1}&amp;lt;/tex&amp;gt; {{---}} входная цепочка из &amp;lt;tex&amp;gt;\Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Объект вида &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta, i]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \rightarrow \alpha \beta &amp;lt;/tex&amp;gt; — правило из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;0 \leqslant i \leqslant n&amp;lt;/tex&amp;gt; — позиция в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, называется '''ситуацией''', относящейся к цепочке &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, где '''&amp;lt;tex&amp;gt; \cdot &amp;lt;/tex&amp;gt;''' {{---}} вспомогательный символ, который не явлется терминалом или нетерминалом ( &amp;lt;tex&amp;gt; \cdot \notin \Sigma \cup N&amp;lt;/tex&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Ситуации хранятся в множествах &amp;lt;tex&amp;gt;D_0,...,D_{n-1}&amp;lt;/tex&amp;gt;, называемых '''списками ситуаций'''. Причем наличие ситуации &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta , i]&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-м списке ситуаций &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; равносильно тому, что &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Последовательность списков ситуаций &amp;lt;tex&amp;gt;D_0, D_1, .., D_{n-1} \ &amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;списком разбора&amp;lt;/b&amp;gt; для входной цепочки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Эрли ==&lt;br /&gt;
Чтобы воспользоваться леммой, необходимо найти &amp;lt;tex&amp;gt;D_n&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Алгоритм Эрли является [[Динамическое программирование|динамическим алгоритмом]]: он последовательно строит список разбора, причём при построении &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; используются &amp;lt;tex&amp;gt;D_0, \ldots, D_{j}&amp;lt;/tex&amp;gt; (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент).&lt;br /&gt;
&lt;br /&gt;
Алгоритм основывается на следующих трёх правилах:&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot w_{j} \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;w_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ый символ строки), то &amp;lt;tex&amp;gt;[A \rightarrow \alpha w_{j} \cdot \beta, i] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_j&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \ \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
Для простоты добавим новый стартовый вспомогательный нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правило &amp;lt;tex&amp;gt;(S' \rightarrow S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{earley}(G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Инициализация &amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; D_{0} = \lbrace [S' \rightarrow \cdot \ S, 0] \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;i = 1&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;D_i&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Вычисление ситуаций &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;j = 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; изменяется&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Результат &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''if'''  &amp;lt;tex&amp;gt;[S' \rightarrow S \ \cdot, 0] \in D_{len(w)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' ''true''&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''return''' ''false''    &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Первое правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return'''&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i] \in D_{j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;w_{j - 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Второе правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_{i} &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Третье правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректность алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Приведенный алгоритм правильно строит все списки ситуаций. &lt;br /&gt;
То есть алгоритм поддерживает инвариант &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] \in D_{j} \Longleftrightarrow \exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по исполнению алгоритма.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''База  индукции:'' &amp;lt;/u&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0] \in D_0&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''Индукционный переход:'' &amp;lt;/u&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть предположение верно для всех списков ситуаций с номерами меньше &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt;. Разберемся, в результате применения какого правила ситуация &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] &amp;lt;/tex&amp;gt; попала в &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это произошло, если &amp;lt;tex&amp;gt; \alpha = \alpha ' a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; [A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;,&amp;lt;br/&amp;gt; &lt;br /&gt;
тогда в силу &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\alpha = \alpha ' a \Rightarrow^* w_i...w_{j-2}w_{j-1} = w_i...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом условия: &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha \Rightarrow^* w_i...w_{j-1}&amp;lt;/tex&amp;gt; выполняются.&lt;br /&gt;
&lt;br /&gt;
2. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{predict}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \varepsilon &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;, что автоматически влечет второй пункт утверждения.&amp;lt;br/&amp;gt;&lt;br /&gt;
Кроме того &amp;lt;tex&amp;gt;\exists  i' \le i&amp;lt;/tex&amp;gt; и ситуация &amp;lt;tex&amp;gt;[A' \rightarrow \alpha ' \cdot A \delta ', i'] \in D_i&amp;lt;/tex&amp;gt;, из чего по предположению индукции следует &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt; &lt;br /&gt;
и &amp;lt;tex&amp;gt; \alpha ' \Rightarrow^* w_{i'}...w_{i-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Получаем, что &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;S \Rightarrow^* w_0...w_{i'-1} \alpha' A \delta' \delta '' &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i'-1} w_{i'}...w_{i-1} A \delta' \delta ''&lt;br /&gt;
&amp;lt;/tex&amp;gt;, в итоге &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, что нам и требовалось.&lt;br /&gt;
&lt;br /&gt;
3. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \alpha ' A' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\exists i', \delta : [A \rightarrow \alpha ' \cdot A' \beta, i] \in D_{i'} \wedge [A' \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Cледовательно &amp;lt;tex&amp;gt;\alpha = \alpha ' A' \Rightarrow^* w_i...w_{i'-1} w_{i'}...w_{j} = w_i...w_{j-1}&amp;lt;/tex&amp;gt;, что дает нам второй пункт утверждения, а так как первый пункт следует из индукционного предположения, все хорошо.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longleftarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
В обратную сторону будем доказывать индукцией по суммарной длине вывода  &amp;lt;tex&amp;gt;w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;. После чего применим&lt;br /&gt;
индукцию по длине вывода &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим три случая последнего символа &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;tex&amp;gt;\alpha = \alpha ' a&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha ' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции: &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;, а отсюда по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;tex&amp;gt;\alpha = \alpha ' B&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\exists i' : \alpha ' \Rightarrow^* w_i...w_{i'-1} \wedge B ' \Rightarrow^* w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Тогда имеем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot  \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;. Также можно записать &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, как &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} w_i...w_{i'-1}B \beta \delta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а также &amp;lt;tex&amp;gt;B \rightarrow \eta \wedge \eta \rightarrow w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Применяя индукцию по второму параметру получим &amp;lt;tex&amp;gt;[B \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;, откуда по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' B \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;tex&amp;gt;\alpha = \varepsilon &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Тогда либо &amp;lt;tex&amp;gt;i = 0 \wedge A = S \wedge \delta = \varepsilon&amp;lt;/tex&amp;gt;, что доказывает базу индукции,&amp;lt;br/&amp;gt;&lt;br /&gt;
либо вывод можно записать в виде &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w{i'-1}w_{i'}...w{i-1} A \delta ' \delta '' = w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; для некоторого правила &amp;lt;tex&amp;gt;(A' \rightarrow w_{i'}...w_{i-1} A \delta ') \in P&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Отсюда по предположению индукции &amp;lt;tex&amp;gt;[A' \rightarrow \cdot w_{i'}...w_{i-1} A \delta ', i'] \in D_{i'}&amp;lt;/tex&amp;gt;, &lt;br /&gt;
что после нескольких применений правила &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; приводит к &amp;lt;tex&amp;gt;[A' \rightarrow w_{i'}...w_{i-1} \cdot  A \delta ', i'] \in D_{i}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
после чего по правилу &amp;lt;tex&amp;gt; \mathtt{predict}&amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt;[A \rightarrow \cdot \beta, i] \in D_{j}&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;w = (a + a)&amp;lt;/tex&amp;gt; в грамматике со следующими правилами:&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T + S&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F * T&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow ( S )&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_0&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;
|&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0]&amp;lt;/tex&amp;gt; || 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( \cdot S ), 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_2&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[S \rightarrow T + \cdot S, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_4&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot , 3]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T + S \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_5&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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S )\cdot , 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0] \in D_5&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;w \in L(G) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ]]&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[http://lpcs.math.msu.su/~sk/lehre/fivt2013/Earley.pdf Алексей Сорокин {{---}} Алгоритм Эрли]&lt;br /&gt;
* Ахо А., Ульман Д.{{---}} Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. {{---}} М.:«Мир», 1978. С. 358 — 364.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71217</id>
		<title>Алгоритм Эрли</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%AD%D1%80%D0%BB%D0%B8&amp;diff=71217"/>
				<updated>2019-05-14T18:53:32Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Алгоритм Эрли */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''Алгоритм Эрли''' позволяет определить, выводится ли данное слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в данной [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободной]] грамматике &amp;lt;tex&amp;gt;G&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; и слово &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' &amp;lt;tex&amp;gt;true&amp;lt;/tex&amp;gt;, если &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; выводится в &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;false&amp;lt;/tex&amp;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;w = w_0 w_1 ... w_{n-1}&amp;lt;/tex&amp;gt; {{---}} входная цепочка из &amp;lt;tex&amp;gt;\Sigma^*&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Объект вида &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta, i]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \rightarrow \alpha \beta &amp;lt;/tex&amp;gt; — правило из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;0 \leqslant i \leqslant n&amp;lt;/tex&amp;gt; — позиция в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, называется '''ситуацией''', относящейся к цепочке &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, где '''&amp;lt;tex&amp;gt; \cdot &amp;lt;/tex&amp;gt;''' {{---}} вспомогательный символ, который не явлется терминалом или нетерминалом ( &amp;lt;tex&amp;gt; \cdot \notin \Sigma \cup N&amp;lt;/tex&amp;gt;).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Ситуации хранятся в множествах &amp;lt;tex&amp;gt;D_0,...,D_{n-1}&amp;lt;/tex&amp;gt;, называемых '''списками ситуаций'''. Причем наличие ситуации &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot \beta , i]&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-м списке ситуаций &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; равносильно тому, что &lt;br /&gt;
&amp;lt;tex&amp;gt;\exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
Последовательность списков ситуаций &amp;lt;tex&amp;gt;D_0, D_1, .., D_{n-1}&amp;lt;/tex&amp;gt; называется &amp;lt;b&amp;gt;списком разбора&amp;lt;/b&amp;gt; для входной цепочки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм Эрли ==&lt;br /&gt;
Чтобы воспользоваться леммой, необходимо найти &amp;lt;tex&amp;gt;D_n&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Алгоритм Эрли является [[Динамическое программирование|динамическим алгоритмом]]: он последовательно строит список разбора, причём при построении &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; используются &amp;lt;tex&amp;gt;D_0, \ldots, D_{j}&amp;lt;/tex&amp;gt; (то есть элементы списков с меньшими номерами и ситуации, содержащиеся в текущем списке на данный момент).&lt;br /&gt;
&lt;br /&gt;
Алгоритм основывается на следующих трёх правилах:&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot w_{j} \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;w_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ый символ строки), то &amp;lt;tex&amp;gt;[A \rightarrow \alpha w_{j} \cdot \beta, i] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_j&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_i&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k] \in D_j&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;[A \rightarrow \alpha \ \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Псевдокод ===&lt;br /&gt;
Для простоты добавим новый стартовый вспомогательный нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правило &amp;lt;tex&amp;gt;(S' \rightarrow S)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{earley}(G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Инициализация &amp;lt;/font&amp;gt;&lt;br /&gt;
   &amp;lt;tex&amp;gt; D_{0} = \lbrace [S' \rightarrow \cdot \ S, 0] \rbrace &amp;lt;/tex&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;i = 1&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;D_i&amp;lt;/tex&amp;gt; = &amp;lt;tex&amp;gt;\varnothing &amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Вычисление ситуаций &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;j = 0&amp;lt;/tex&amp;gt; '''to''' &amp;lt;tex&amp;gt;len(w) - 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
     &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''while''' &amp;lt;tex&amp;gt;D_j&amp;lt;/tex&amp;gt; изменяется&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;&lt;br /&gt;
   &amp;lt;font color=green&amp;gt;// Результат &amp;lt;/font&amp;gt;&lt;br /&gt;
   '''if'''  &amp;lt;tex&amp;gt;[S' \rightarrow S \ \cdot, 0] \in D_{len(w)} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return''' ''true''&lt;br /&gt;
   '''else'''&lt;br /&gt;
     '''return''' ''false''    &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Первое правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{scan}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''if''' &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''return'''&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i] \in D_{j - 1} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''if''' &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; == &amp;lt;tex&amp;gt;w_{j - 1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot a \beta, i]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Второе правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{complete}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[B \rightarrow \eta \ \cdot, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, k] \in D_{i} &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[A \rightarrow \alpha B \cdot \beta, k]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=green&amp;gt;// Третье правило &amp;lt;/font&amp;gt;&lt;br /&gt;
 '''function''' &amp;lt;tex&amp;gt;\mathtt{predict}(D, j, G, w)&amp;lt;/tex&amp;gt;:&lt;br /&gt;
   '''for''' &amp;lt;tex&amp;gt;[A \rightarrow \alpha \cdot B \beta, i] \in D_{j} &amp;lt;/tex&amp;gt;&lt;br /&gt;
     '''for''' &amp;lt;tex&amp;gt;(B \rightarrow \eta) \in P &amp;lt;/tex&amp;gt;&lt;br /&gt;
       &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\cup&amp;lt;/tex&amp;gt;= &amp;lt;tex&amp;gt;[B \rightarrow \cdot \ \eta, j]&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Корректность алгоритма==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Приведенный алгоритм правильно строит все списки ситуаций. &lt;br /&gt;
То есть алгоритм поддерживает инвариант &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] \in D_{j} \Longleftrightarrow \exists \delta \in \Sigma \cup N : ((S' \Rightarrow^* w_0...w_{i-1} A \delta) \wedge A \Rightarrow^* w_i...w_{j-1})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по исполнению алгоритма.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''База  индукции:'' &amp;lt;/u&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0] \in D_0&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt; ''Индукционный переход:'' &amp;lt;/u&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть предположение верно для всех списков ситуаций с номерами меньше &amp;lt;tex&amp;gt; j &amp;lt;/tex&amp;gt;. Разберемся, в результате применения какого правила ситуация &amp;lt;tex&amp;gt; [A \rightarrow \alpha \cdot \beta, i] &amp;lt;/tex&amp;gt; попала в &amp;lt;tex&amp;gt;D_{j}&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Это произошло, если &amp;lt;tex&amp;gt; \alpha = \alpha ' a&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; [A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;,&amp;lt;br/&amp;gt; &lt;br /&gt;
тогда в силу &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;\alpha = \alpha ' a \Rightarrow^* w_i...w_{j-2}w_{j-1} = w_i...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом условия: &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha \Rightarrow^* w_i...w_{j-1}&amp;lt;/tex&amp;gt; выполняются.&lt;br /&gt;
&lt;br /&gt;
2. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{predict}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \varepsilon &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;, что автоматически влечет второй пункт утверждения.&amp;lt;br/&amp;gt;&lt;br /&gt;
Кроме того &amp;lt;tex&amp;gt;\exists  i' \le i&amp;lt;/tex&amp;gt; и ситуация &amp;lt;tex&amp;gt;[A' \rightarrow \alpha ' \cdot A \delta ', i'] \in D_i&amp;lt;/tex&amp;gt;, из чего по предположению индукции следует &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt; &lt;br /&gt;
и &amp;lt;tex&amp;gt; \alpha ' \Rightarrow^* w_{i'}...w_{i-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Получаем, что &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i'-1} A' \delta ''&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;S \Rightarrow^* w_0...w_{i'-1} \alpha' A \delta' \delta '' &amp;lt;/tex&amp;gt;, следовательно &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i'-1} w_{i'}...w_{i-1} A \delta' \delta ''&lt;br /&gt;
&amp;lt;/tex&amp;gt;, в итоге &amp;lt;tex&amp;gt; S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, что нам и требовалось.&lt;br /&gt;
&lt;br /&gt;
3. Включаем по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По построению: &amp;lt;tex&amp;gt; \alpha = \alpha ' A' &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\exists i', \delta : [A \rightarrow \alpha ' \cdot A' \beta, i] \in D_{i'} \wedge [A' \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Cледовательно &amp;lt;tex&amp;gt;\alpha = \alpha ' A' \Rightarrow^* w_i...w_{i'-1} w_{i'}...w_{j} = w_i...w_{j-1}&amp;lt;/tex&amp;gt;, что дает нам второй пункт утверждения, а так как первый пункт следует из индукционного предположения, все хорошо.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;lt;tex&amp;gt;\Longleftarrow&amp;lt;/tex&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
В обратную сторону будем доказывать индукцией по суммарной длине вывода  &amp;lt;tex&amp;gt;w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;. После чего применим&lt;br /&gt;
индукцию по длине вывода &amp;lt;tex&amp;gt;w_i...w_{j-1}&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Рассмотрим три случая последнего символа &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;tex&amp;gt;\alpha = \alpha ' a&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;a = w_{j-1}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\alpha ' \Rightarrow^* w_i...w_{j-2}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
По предположению индукции: &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' \cdot a \beta, i] \in D_{j-1}&amp;lt;/tex&amp;gt;, а отсюда по правилу &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
2. &amp;lt;tex&amp;gt;\alpha = \alpha ' B&amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;\exists i' : \alpha ' \Rightarrow^* w_i...w_{i'-1} \wedge B ' \Rightarrow^* w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Тогда имеем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' a \cdot  \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;. Также можно записать &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt;, как &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w_{i-1} w_i...w_{i'-1}B \beta \delta&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а также &amp;lt;tex&amp;gt;B \rightarrow \eta \wedge \eta \rightarrow w_{i'}...w_{j-1}&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Применяя индукцию по второму параметру получим &amp;lt;tex&amp;gt;[B \rightarrow \eta \cdot, i'] \in D_j&amp;lt;/tex&amp;gt;, откуда по правилу &amp;lt;tex&amp;gt; \mathtt{complete}&amp;lt;/tex&amp;gt; получаем &amp;lt;tex&amp;gt;[A \rightarrow \alpha ' B \cdot \beta, i] \in D_{j}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3. &amp;lt;tex&amp;gt;\alpha = \varepsilon &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt;i=j&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Тогда либо &amp;lt;tex&amp;gt;i = 0 \wedge A = S \wedge \delta = \varepsilon&amp;lt;/tex&amp;gt;, что доказывает базу индукции,&amp;lt;br/&amp;gt;&lt;br /&gt;
либо вывод можно записать в виде &amp;lt;tex&amp;gt;S' \Rightarrow^* w_0...w{i'-1}w_{i'}...w{i-1} A \delta ' \delta '' = w_0...w_{i-1} A \delta&amp;lt;/tex&amp;gt; для некоторого правила &amp;lt;tex&amp;gt;(A' \rightarrow w_{i'}...w_{i-1} A \delta ') \in P&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
Отсюда по предположению индукции &amp;lt;tex&amp;gt;[A' \rightarrow \cdot w_{i'}...w_{i-1} A \delta ', i'] \in D_{i'}&amp;lt;/tex&amp;gt;, &lt;br /&gt;
что после нескольких применений правила &amp;lt;tex&amp;gt; \mathtt{scan}&amp;lt;/tex&amp;gt; приводит к &amp;lt;tex&amp;gt;[A' \rightarrow w_{i'}...w_{i-1} \cdot  A \delta ', i'] \in D_{i}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
после чего по правилу &amp;lt;tex&amp;gt; \mathtt{predict}&amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt;[A \rightarrow \cdot \beta, i] \in D_{j}&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;w = (a + a)&amp;lt;/tex&amp;gt; в грамматике со следующими правилами:&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T + S&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow T &amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F * T&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;T \rightarrow F&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow ( S )&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;F \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_0&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;
|&amp;lt;tex&amp;gt;[S' \rightarrow \cdot S, 0]&amp;lt;/tex&amp;gt; || 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 0]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( \cdot S ), 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 1]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_2&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_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;
|&amp;lt;tex&amp;gt;[S \rightarrow T + \cdot S, 1]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T + S, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow \cdot T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F * T, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow \cdot F, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot ( S ), 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow \cdot a, 3]&amp;lt;/tex&amp;gt; || 3&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_4&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;
|&amp;lt;tex&amp;gt;[F \rightarrow a \cdot , 3]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 3]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T + S \cdot , 1]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S \cdot ), 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;D_5&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;
|&amp;lt;tex&amp;gt;[F \rightarrow ( S )\cdot , 0]&amp;lt;/tex&amp;gt; || 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot * T, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[T \rightarrow F \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot + S, 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S \rightarrow T \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0]&amp;lt;/tex&amp;gt; || 2&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;tex&amp;gt;[S' \rightarrow S \cdot , 0] \in D_5&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;w \in L(G) &amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ]]&lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
*[http://lpcs.math.msu.su/~sk/lehre/fivt2013/Earley.pdf Алексей Сорокин {{---}} Алгоритм Эрли]&lt;br /&gt;
* Ахо А., Ульман Д.{{---}} Теория синтакcического анализа, перевода и компиляции. Том 1. Синтаксический анализ. Пер. с англ. {{---}} М.:«Мир», 1978. С. 358 — 364.&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71214</id>
		<title>Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71214"/>
				<updated>2019-05-14T15:26:43Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Оценка сложности */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&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;
Будем решать задачу динамическим программированием. Введём динамику &amp;lt;tex&amp;gt;a\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i..j-1]\right] \ &amp;lt;/tex&amp;gt;, аналогично [[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|базовой версии]] алгоритма.  &lt;br /&gt;
&lt;br /&gt;
Также введём вспомогательный четырехмерный массив &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, j, k\right] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..j-1\right]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим все тройки &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle \mid j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;k &amp;lt; \left|\alpha\right|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''База динамики''': &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i] \ &amp;lt;/tex&amp;gt;, иначе  &amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i\right] =  true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow \varepsilon \ &amp;lt;/tex&amp;gt;, иначе &amp;lt;tex&amp;gt;a\left[A, i, i\right] =  false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] = true \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Переход''': &lt;br /&gt;
&lt;br /&gt;
:Пусть значения для всех нетерминалов, пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle \mid j' - i' &amp;lt; m \rbrace \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lbrace k' \mid k' &amp;lt; k \rbrace \ &amp;lt;/tex&amp;gt; уже вычислены, поэтому вспомогательная динамика: &amp;lt;tex&amp;gt; h\left[A \rightarrow \alpha, i, j+1, k\right] = \bigvee\limits_{r=i..j+1}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha\left[k\right],r,j+1\right]\right)&amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i..j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..r-1\right]&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r..j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го символа правой части правила. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]&amp;lt;/tex&amp;gt;, но на результат это не повлияет, так как в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]=false&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Но если &amp;lt;tex&amp;gt;\alpha\left[k\right]&amp;lt;/tex&amp;gt;  {{---}}  терминал, то подстроку &amp;lt;tex&amp;gt;w[i..j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..r-1\right] \ &amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r..j]&amp;lt;/tex&amp;gt; выводится, если &amp;lt;tex&amp;gt;w\left[r..j\right]=\alpha\left[k\right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Базовая динамика выражается так: &amp;lt;tex&amp;gt;a\left[A,i,j\right]=\bigvee\limits_{A \rightarrow \alpha}h\left[A \rightarrow \alpha, i, j, \left|\alpha\right|\right] \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i..j-1] \ &amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если из длины правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..j-1\right] \ &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* '''Завершение''': &lt;br /&gt;
&lt;br /&gt;
:После окончания работы ответ содержится в ячейке &amp;lt;tex&amp;gt;a\left[S, 1, n\right] &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 '''CYK_Modified'''(S, Г): &amp;lt;font color = darkgreen&amp;gt;// S {{---}} строка длины n, Г {{---}} КС-грамматика &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
       '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''if'''( A -&amp;gt; w[i] in Г) a[A, i, i+1] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; w[i] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i+1] = false&lt;br /&gt;
        '''if'''( A -&amp;gt; eps in Г) a[A, i, i] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; eps &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i] = false&lt;br /&gt;
        h[A-&amp;gt;alpha, i, i, 0] = true&lt;br /&gt;
      '''for''' m = 1..n&lt;br /&gt;
       '''for''' i = 1..n&lt;br /&gt;
           j = i+m&lt;br /&gt;
        '''for''' k = 1..M&lt;br /&gt;
         '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          h[A-&amp;gt;alpha, i, j+1, k] = OR( for r = i..j+1) (h[A-&amp;gt;alpha, i, r, k-1] &amp;amp; a[alpha[k],r,j+1])&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
        '''for''' j = 1..n&lt;br /&gt;
          '''for''' Rj -&amp;gt; alpha&lt;br /&gt;
           a[A, i, j] = OR( for A-&amp;gt;alpha) h[A-&amp;gt;alpha, i, j, |alpha|] &amp;lt;font color = darkgreen&amp;gt;// где |alpha| {{---}} размер правой части правила&amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''return''' a[S, 1, n]     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;M = \max\limits_{A \rightarrow \alpha}\left|\alpha\right|&amp;lt;/tex&amp;gt; — максимальную длину правой части правила.  &lt;br /&gt;
&lt;br /&gt;
Обработки правил вида &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A \rightarrow \varepsilon&amp;lt;/tex&amp;gt; и нахождение &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] \ &amp;lt;/tex&amp;gt; выполняются за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Время одного перехода вспомогательной динамики &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, суммарное число состояний &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&amp;lt;/tex&amp;gt;. Отсюда расчёт вспомогательной динамики занимает &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right) \ &amp;lt;/tex&amp;gt; времени, базовая динамика находится, как &amp;lt;tex&amp;gt;O \left( n^2 \cdot |\Gamma| \right)&amp;lt;/tex&amp;gt;. Итоговая временная сложность алгоритма равна &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt;. Алгоритму требуется &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M) \ &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;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71213</id>
		<title>Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8,_%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BB%D1%8F_%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71213"/>
				<updated>2019-05-14T15:25:55Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Алгоритм для произвольной грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&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;
Будем решать задачу динамическим программированием. Введём динамику &amp;lt;tex&amp;gt;a\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i..j-1]\right] \ &amp;lt;/tex&amp;gt;, аналогично [[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|базовой версии]] алгоритма.  &lt;br /&gt;
&lt;br /&gt;
Также введём вспомогательный четырехмерный массив &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, j, k\right] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..j-1\right]&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим все тройки &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle \mid j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; такое, что &amp;lt;tex&amp;gt;k &amp;lt; \left|\alpha\right|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''База динамики''': &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i] \ &amp;lt;/tex&amp;gt;, иначе  &amp;lt;tex&amp;gt;a\left[A, i, i+1\right] = false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a\left[A, i, i\right] =  true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow \varepsilon \ &amp;lt;/tex&amp;gt;, иначе &amp;lt;tex&amp;gt;a\left[A, i, i\right] =  false \ &amp;lt;/tex&amp;gt;; &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right] = true \ &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* '''Переход''': &lt;br /&gt;
&lt;br /&gt;
:Пусть значения для всех нетерминалов, пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle \mid j' - i' &amp;lt; m \rbrace \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\lbrace k' \mid k' &amp;lt; k \rbrace \ &amp;lt;/tex&amp;gt; уже вычислены, поэтому вспомогательная динамика: &amp;lt;tex&amp;gt; h\left[A \rightarrow \alpha, i, j+1, k\right] = \bigvee\limits_{r=i..j+1}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha\left[k\right],r,j+1\right]\right)&amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i..j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..r-1\right]&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r..j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-го символа правой части правила. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]&amp;lt;/tex&amp;gt;, но на результат это не повлияет, так как в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j+1\right]=false&amp;lt;/tex&amp;gt;.  &lt;br /&gt;
&lt;br /&gt;
:Но если &amp;lt;tex&amp;gt;\alpha\left[k\right]&amp;lt;/tex&amp;gt;  {{---}}  терминал, то подстроку &amp;lt;tex&amp;gt;w[i..j]&amp;lt;/tex&amp;gt; можно вывести из префикса длины &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; правой части данного правила, если из префикса длины &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..r-1\right] \ &amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[r..j]&amp;lt;/tex&amp;gt; выводится, если &amp;lt;tex&amp;gt;w\left[r..j\right]=\alpha\left[k\right]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Базовая динамика выражается так: &amp;lt;tex&amp;gt;a\left[A,i,j\right]=\bigvee\limits_{A \rightarrow \alpha}h\left[A \rightarrow \alpha, i, j, \left|\alpha\right|\right] \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i..j-1] \ &amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если из длины правой части данного правила можно вывести &amp;lt;tex&amp;gt;w\left[i..j-1\right] \ &amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
* '''Завершение''': &lt;br /&gt;
&lt;br /&gt;
:После окончания работы ответ содержится в ячейке &amp;lt;tex&amp;gt;a\left[S, 1, n\right] &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n = |w|&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 '''CYK_Modified'''(S, Г): &amp;lt;font color = darkgreen&amp;gt;// S {{---}} строка длины n, Г {{---}} КС-грамматика &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
       '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''if'''( A -&amp;gt; w[i] in Г) a[A, i, i+1] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; w[i] &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i+1] = false&lt;br /&gt;
        '''if'''( A -&amp;gt; eps in Г) a[A, i, i] = true &amp;lt;font color = darkgreen&amp;gt;// если в грамматике Г присутствует правило A -&amp;gt; eps &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
        '''else''' a[A, i, i] = false&lt;br /&gt;
        h[A-&amp;gt;alpha, i, i, 0] = true&lt;br /&gt;
      '''for''' m = 1..n&lt;br /&gt;
       '''for''' i = 1..n&lt;br /&gt;
           j = i+m&lt;br /&gt;
        '''for''' k = 1..M&lt;br /&gt;
         '''for''' Rj -&amp;gt; alpha &amp;lt;font color = darkgreen&amp;gt;// перебор состояний &amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
          h[A-&amp;gt;alpha, i, j+1, k] = OR( for r = i..j+1) (h[A-&amp;gt;alpha, i, r, k-1] &amp;amp; a[alpha[k],r,j+1])&lt;br /&gt;
      '''for''' i = 1..n&lt;br /&gt;
        '''for''' j = 1..n&lt;br /&gt;
          '''for''' Rj -&amp;gt; alpha&lt;br /&gt;
           a[A, i, j] = OR( for A-&amp;gt;alpha) h[A-&amp;gt;alpha, i, j, |alpha|] &amp;lt;font color = darkgreen&amp;gt;// где |alpha| {{---}} размер правой части правила&amp;lt;/font color = darkgreen&amp;gt;&lt;br /&gt;
      '''return''' a[S, 1, n]     &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Обозначим &amp;lt;tex&amp;gt;M = \max\limits_{A \rightarrow \alpha}\left|\alpha\right|&amp;lt;/tex&amp;gt; — максимальную длину правой части правила.  &lt;br /&gt;
&lt;br /&gt;
Обработки правил вида &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A \rightarrow \varepsilon&amp;lt;/tex&amp;gt; и нахождение &amp;lt;tex&amp;gt;h\left[A \rightarrow \alpha, i, i, 0\right]&amp;lt;/tex&amp;gt; выполняются за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Время одного перехода вспомогательной динамики &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt;, суммарное число состояний &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&amp;lt;/tex&amp;gt;. Отсюда расчёт вспомогательной динамики занимает &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt; времени, базовая динамика находится, как &amp;lt;tex&amp;gt;O \left( n^2 \cdot |\Gamma| \right)&amp;lt;/tex&amp;gt;. Итоговая временная сложность алгоритма равна &amp;lt;tex&amp;gt;O \left( n^3 \cdot |\Gamma| \cdot M \right)&amp;lt;/tex&amp;gt;. Алгоритму требуется &amp;lt;tex&amp;gt;O(n^2 \cdot |\Gamma| \cdot M)&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;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71212</id>
		<title>Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71212"/>
				<updated>2019-05-14T15:22:14Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Пример работы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в [[нормальная форма Хомского|нормальной форме Хомского]] и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&amp;lt;/tex&amp;gt;. Требуется выяснить, выводится ли это слово в данной грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Контекстно-свободная грамматика ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная грамматика]]''' ('''КС-грамматика''', '''бесконтекстная грамматика''') {{---}} способ описания формального языка, представляющий собой четверку&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} [[Основные_определения: алфавит, слово, язык, конкатенация, свободный моноид слов|алфавит]], элементы которого называют '''терминалами''' (англ. ''terminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; {{---}} множество, элементы которого называют '''нетерминалами''' (англ. ''nonterminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} начальный символ грамматики (англ. ''start symbol'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} набор правил вывода (англ. ''production rules'' или ''productions'') вида &amp;lt;tex&amp;gt;A \rightarrow B_1 B_2 ... B_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \in N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_i \in \Sigma \cup N&amp;lt;/tex&amp;gt;, то есть у которых левые части {{---}} одиночные нетерминалы, а правые - последовательности терминалов и нетерминалов.&lt;br /&gt;
}}&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
Терминалы &amp;lt;tex&amp;gt;\Sigma = \{(, )\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt;N = \{S\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Правила вывода &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}  &lt;br /&gt;
 S \rightarrow \varepsilon\\&lt;br /&gt;
 S \rightarrow SS\\&lt;br /&gt;
 S \rightarrow (S)\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная грамматика задает язык [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]]. Например, последовательность &amp;lt;tex&amp;gt;(()(()))&amp;lt;/tex&amp;gt; может быть выведена следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S \Rightarrow (S) \Rightarrow (SS) \Rightarrow (()(S)) \Rightarrow (()(())) &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;A \rightarrow a&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; {{---}} терминал&lt;br /&gt;
* &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} нетерминалы, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; не являются начальными нетерминалами&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;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;
'''Алгоритм Кока-Янгера-Касами''' (англ. ''Cocke-Younger-Kasami algorithm'', англ. ''CYK-алгоритм'') {{---}} алгоритм, позволяющий по слову узнать, выводимо ли оно в заданной КС-грамматике в нормальной форме Хомского. Любую КС-грамматику можно привести к НФХ, поэтому алгоритм является универсальным для любой КС-грамматики.&lt;br /&gt;
&lt;br /&gt;
Будем решать задачу [[Динамическое_программирование|динамическим программированием]]. Дана строка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Заведем для неё трехмерный массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;|N| \times n \times n&amp;lt;/tex&amp;gt;, состоящий из логических значений, и &amp;lt;tex&amp;gt;d[A][i][j] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; правилами грамматики можно вывести подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим все пары &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle | j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i = j&amp;lt;/tex&amp;gt;. Инициализируем массив для всех нетерминалов, из которых выводится какой-либо символ строки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. В таком случае &amp;lt;tex&amp;gt;d[A][i][i] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;. Иначе &amp;lt;tex&amp;gt;d[A][i][i] = false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i \ne j&amp;lt;/tex&amp;gt;. Значения для всех нетерминалов и пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle | j' - i' &amp;lt; m \rbrace&amp;lt;/tex&amp;gt; уже вычислены, поэтому &amp;lt;tex&amp;gt;d[A][i][j] = \bigvee\limits_{A \rightarrow BC}\bigvee\limits_{k = i}^{j-1} d[B][i][k] \wedge d[C][k+1][j] \ \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если существует продукция вида &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt; и такое &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что подстрока &amp;lt;tex&amp;gt;w[i \dots k]&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[k + 1 \dots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Файл:CYK_rule_2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
После окончания работы значение &amp;lt;tex&amp;gt;d[S][1][n]&amp;lt;/tex&amp;gt; содержит ответ на вопрос, выводима ли данная строка в данной грамматике, где &amp;lt;tex&amp;gt;S&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;d[A][i][j] = \sum\limits_{A \rightarrow BC}\sum\limits_{k = i}^{j-1} d[B][i][k] \cdot d[C][k + 1][j]&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} количество способов получить подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Минимальная стоимость вывода слова ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;H(A \rightarrow BC)&amp;lt;/tex&amp;gt; {{---}} стоимость вывода по правилу &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;. Тогда, если использовать формулу &amp;lt;tex&amp;gt;d[A][i][j] = \min\limits_{A \rightarrow BC} \min\limits_{k = i}^{j-1}  ( d[B][i][k] + d[C][k + 1][j] + H(A \rightarrow BC) )&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} минимальная стоимость вывода подстроки &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&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;A \rightarrow w[i]&amp;lt;/tex&amp;gt; выполняется за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проход по всем подстрокам выполняется за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;. В обработке одной подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. В итоге получаем конечную сложность &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, общее время работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. Кроме того, алгоритму требуется память на массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; объемом &amp;lt;tex&amp;gt;O(n^2 \cdot |N|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|N|&amp;lt;/tex&amp;gt; {{---}}  количество [[Формальные_грамматики#Определения|нетерминалов]] грамматики.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
Дана грамматика [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в нормальной форме Хомского.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}   &lt;br /&gt;
 A \rightarrow \varepsilon\ |\ BB\ |\ CD\\&lt;br /&gt;
 B \rightarrow BB\ |\ CD\\&lt;br /&gt;
 C \rightarrow (\\&lt;br /&gt;
 D \rightarrow BE\ |\ )\\&lt;br /&gt;
 E \rightarrow )\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дано слово &amp;lt;tex&amp;gt;w = ()(())&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Инициализация массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заполнение массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также == &lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики|Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
* [[Алгоритм_Эрли|Алгоритм Эрли]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:CYK_algorithm|Wikipedia {{---}} CYK algorithm]]&lt;br /&gt;
* [http://web.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf David Rodriguez-Velazquez, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
* [https://www.princeton.edu/~achaney/tmve/wiki100k/docs/CYK_algorithm.html Princeton University, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Динамическое программирование]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71211</id>
		<title>Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9A%D0%BE%D0%BA%D0%B0-%D0%AF%D0%BD%D0%B3%D0%B5%D1%80%D0%B0-%D0%9A%D0%B0%D1%81%D0%B0%D0%BC%D0%B8_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%B2_%D0%9D%D0%A4%D0%A5&amp;diff=71211"/>
				<updated>2019-05-14T15:21:36Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Алгоритм */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Задача&lt;br /&gt;
|definition = &lt;br /&gt;
Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в [[нормальная форма Хомского|нормальной форме Хомского]] и слово &amp;lt;tex&amp;gt;w \in \Sigma^{*}&amp;lt;/tex&amp;gt;. Требуется выяснить, выводится ли это слово в данной грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Контекстно-свободная грамматика ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = &lt;br /&gt;
'''[[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|Контекстно-свободная грамматика]]''' ('''КС-грамматика''', '''бесконтекстная грамматика''') {{---}} способ описания формального языка, представляющий собой четверку&lt;br /&gt;
&amp;lt;tex&amp;gt;\Gamma =\langle \Sigma, N, S \in N, P \subset N^{+}\times (\Sigma\cup N)^{*}\rangle&amp;lt;/tex&amp;gt;, где:&lt;br /&gt;
* &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} [[Основные_определения: алфавит, слово, язык, конкатенация, свободный моноид слов|алфавит]], элементы которого называют '''терминалами''' (англ. ''terminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; {{---}} множество, элементы которого называют '''нетерминалами''' (англ. ''nonterminals'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} начальный символ грамматики (англ. ''start symbol'')&lt;br /&gt;
* &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; {{---}} набор правил вывода (англ. ''production rules'' или ''productions'') вида &amp;lt;tex&amp;gt;A \rightarrow B_1 B_2 ... B_n&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A \in N&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_i \in \Sigma \cup N&amp;lt;/tex&amp;gt;, то есть у которых левые части {{---}} одиночные нетерминалы, а правые - последовательности терминалов и нетерминалов.&lt;br /&gt;
}}&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
Терминалы &amp;lt;tex&amp;gt;\Sigma = \{(, )\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Нетерминалы &amp;lt;tex&amp;gt;N = \{S\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Правила вывода &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}  &lt;br /&gt;
 S \rightarrow \varepsilon\\&lt;br /&gt;
 S \rightarrow SS\\&lt;br /&gt;
 S \rightarrow (S)\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная грамматика задает язык [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]]. Например, последовательность &amp;lt;tex&amp;gt;(()(()))&amp;lt;/tex&amp;gt; может быть выведена следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; S \Rightarrow (S) \Rightarrow (SS) \Rightarrow (()(S)) \Rightarrow (()(())) &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;A \rightarrow a&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; {{---}} терминал&lt;br /&gt;
* &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; {{---}} нетерминалы, причем &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; не являются начальными нетерминалами&lt;br /&gt;
* &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;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;
'''Алгоритм Кока-Янгера-Касами''' (англ. ''Cocke-Younger-Kasami algorithm'', англ. ''CYK-алгоритм'') {{---}} алгоритм, позволяющий по слову узнать, выводимо ли оно в заданной КС-грамматике в нормальной форме Хомского. Любую КС-грамматику можно привести к НФХ, поэтому алгоритм является универсальным для любой КС-грамматики.&lt;br /&gt;
&lt;br /&gt;
Будем решать задачу [[Динамическое_программирование|динамическим программированием]]. Дана строка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;. Заведем для неё трехмерный массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;|N| \times n \times n&amp;lt;/tex&amp;gt;, состоящий из логических значений, и &amp;lt;tex&amp;gt;d[A][i][j] = true \ &amp;lt;/tex&amp;gt; тогда и только тогда, когда из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; правилами грамматики можно вывести подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим все пары &amp;lt;tex&amp;gt;\lbrace \langle j, i \rangle | j-i=m \rbrace&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; {{---}} константа и &amp;lt;tex&amp;gt;m &amp;lt; n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i = j&amp;lt;/tex&amp;gt;. Инициализируем массив для всех нетерминалов, из которых выводится какой-либо символ строки &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. В таком случае &amp;lt;tex&amp;gt;d[A][i][i] = true \ &amp;lt;/tex&amp;gt;, если в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; присутствует правило &amp;lt;tex&amp;gt;A \rightarrow w[i]&amp;lt;/tex&amp;gt;. Иначе &amp;lt;tex&amp;gt;d[A][i][i] = false&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;i \ne j&amp;lt;/tex&amp;gt;. Значения для всех нетерминалов и пар &amp;lt;tex&amp;gt;\lbrace \langle j', i' \rangle | j' - i' &amp;lt; m \rbrace&amp;lt;/tex&amp;gt; уже вычислены, поэтому &amp;lt;tex&amp;gt;d[A][i][j] = \bigvee\limits_{A \rightarrow BC}\bigvee\limits_{k = i}^{j-1} d[B][i][k] \wedge d[C][k+1][j] \ \ &amp;lt;/tex&amp;gt;. То есть, подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; можно вывести из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, если существует продукция вида &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt; и такое &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, что подстрока &amp;lt;tex&amp;gt;w[i \dots k]&amp;lt;/tex&amp;gt; выводима из &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, а подстрока &amp;lt;tex&amp;gt;w[k + 1 \dots j]&amp;lt;/tex&amp;gt; выводится из &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;.&lt;br /&gt;
[[Файл:CYK_rule_2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
После окончания работы значение &amp;lt;tex&amp;gt;d[S][1][n]&amp;lt;/tex&amp;gt; содержит ответ на вопрос, выводима ли данная строка в данной грамматике, где &amp;lt;tex&amp;gt;S&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;d[A][i][j] = \sum\limits_{A \rightarrow BC}\sum\limits_{k = i}^{j-1} d[B][i][k] \cdot d[C][k + 1][j]&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} количество способов получить подстроку &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Минимальная стоимость вывода слова ===&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;H(A \rightarrow BC)&amp;lt;/tex&amp;gt; {{---}} стоимость вывода по правилу &amp;lt;tex&amp;gt;A \rightarrow BC&amp;lt;/tex&amp;gt;. Тогда, если использовать формулу &amp;lt;tex&amp;gt;d[A][i][j] = \min\limits_{A \rightarrow BC} \min\limits_{k = i}^{j-1}  ( d[B][i][k] + d[C][k + 1][j] + H(A \rightarrow BC) )&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;d[A][i][j]&amp;lt;/tex&amp;gt; {{---}} минимальная стоимость вывода подстроки &amp;lt;tex&amp;gt;w[i \dots j]&amp;lt;/tex&amp;gt; из нетерминала &amp;lt;tex&amp;gt;A&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;A \rightarrow w[i]&amp;lt;/tex&amp;gt; выполняется за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Проход по всем подстрокам выполняется за &amp;lt;tex&amp;gt;O(n^2)&amp;lt;/tex&amp;gt;. В обработке одной подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за &amp;lt;tex&amp;gt;O(n \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. В итоге получаем конечную сложность &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, общее время работы алгоритма {{---}} &amp;lt;tex&amp;gt;O(n^3 \cdot |\Gamma|)&amp;lt;/tex&amp;gt;. Кроме того, алгоритму требуется память на массив &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; объемом &amp;lt;tex&amp;gt;O(n^2 \cdot |N|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;|N|&amp;lt;/tex&amp;gt; {{---}}  количество [[Формальные_грамматики#Определения|нетерминалов]] грамматики.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
Дана грамматика [[Правильные_скобочные_последовательности|правильных скобочных последовательностей]] &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; в нормальной форме Хомского.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\begin{array}{l l}   &lt;br /&gt;
 A \rightarrow \varepsilon\ |\ BB\ |\ CD\\&lt;br /&gt;
 B \rightarrow BB\ |\ CD\\&lt;br /&gt;
 C \rightarrow (\\&lt;br /&gt;
 D \rightarrow BE\ |\ )\\&lt;br /&gt;
 E \rightarrow )\\&lt;br /&gt;
\end{array}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Дано слово &amp;lt;tex&amp;gt;w = $()(())$&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Инициализация массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заполнение массива &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 2&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 4&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Итерация &amp;lt;tex&amp;gt;m = 5&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|A&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|B&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|C&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 1&lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &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;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|D&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 150px; height: 150px; float: left;&amp;quot; &lt;br /&gt;
! colspan=&amp;quot;7&amp;quot; style=&amp;quot;background:#ffdead;&amp;quot;|E&lt;br /&gt;
|-&lt;br /&gt;
! &lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 3&lt;br /&gt;
! 4&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
|-&lt;br /&gt;
! 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;
! 2&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;center&amp;quot;| ● &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также == &lt;br /&gt;
* [[Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики|Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики]]&lt;br /&gt;
* [[Алгоритм_Эрли|Алгоритм Эрли]]&lt;br /&gt;
==Источники информации==&lt;br /&gt;
* [[wikipedia:CYK_algorithm|Wikipedia {{---}} CYK algorithm]]&lt;br /&gt;
* [http://web.cs.ucdavis.edu/~rogaway/classes/120/winter12/CYK.pdf David Rodriguez-Velazquez, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
* [https://www.princeton.edu/~achaney/tmve/wiki100k/docs/CYK_algorithm.html Princeton University, &amp;quot;The CYK Algorithm&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория:Динамическое программирование]]&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Алгоритмы разбора]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71210</id>
		<title>Удаление eps-правил из грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71210"/>
				<updated>2019-05-14T15:17:19Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Алгоритм удаления &amp;amp;epsilon;-правил из грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Используемые определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Правила вида &amp;lt;tex&amp;gt;A \to \varepsilon&amp;lt;/tex&amp;gt; называются '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-rule'').&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-generating''), если &amp;lt;tex&amp;gt;A \Rightarrow^* \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм поиска &amp;amp;epsilon;-порождающих нетерминалов ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' множество &amp;lt;tex&amp;gt;\varepsilon&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;
# Перебираем правила грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Если найдено правило &amp;lt;tex&amp;gt;A \rightarrow C_1C_2...C_k&amp;lt;/tex&amp;gt;, для которого верно, что каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; принадлежит множеству, то добавить &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в множество.&lt;br /&gt;
# Если на шаге 2 множество изменилось, то повторить шаг 2.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Описанный выше алгоритм находит все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
Для доказательства корректности алгоритма достаточно показать, что, если множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов на очередной итерации алгоритма не изменялось, то алгоритм нашел все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы.&lt;br /&gt;
&lt;br /&gt;
Пусть после завершения алгоритма существуют нетерминалы такие, что они являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но не были найдены алгоритмом. Выберем из этих нетерминалов нетерминал &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, из которого выводится &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; за наименьшее число шагов. Тогда в грамматике есть правило &amp;lt;tex&amp;gt;B \rightarrow C_1C_2...C_k&amp;lt;/tex&amp;gt;, где каждый нетерминал &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающий. Каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; входит в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов, так как иначе вместо &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; необходимо было взять &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt;. Следовательно, на одной из итераций алгоритма &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; уже добавился в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;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;\mathtt{isEpsilon[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить пометку, является он &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим или нет.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{concernedRules[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить список номеров тех правил, в правой части которых он встречается;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{counter[rule_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого правила будем хранить счетчик количества нетерминалов в правой части, которые еще не помечены &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{Q} \ &amp;lt;/tex&amp;gt; {{---}} очередь нетерминалов, помеченных &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но еще не обработанных.&lt;br /&gt;
&lt;br /&gt;
Сначала проставим &amp;lt;tex&amp;gt;\mathtt{false}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\mathtt{isEpsilon} \ &amp;lt;/tex&amp;gt; для всех нетерминалов, а в &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; для каждого правила запишем количество нетерминалов справа от него. Те правила, для которых &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; сразу же оказался нулевым, добавим в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; и объявим истинным соответствующий &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;, так как это &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила. Теперь будем доставать из очереди по одному нетерминалу, смотреть на список &amp;lt;tex&amp;gt;\mathtt{concernedRules} \ &amp;lt;/tex&amp;gt; для него и уменьшать &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; для всех правил оттуда. Если &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; какого-то правила в этот момент обнулился, то нетерминал из левой части этого правила помечается &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим, если еще не был помечен до этого, и добавляется в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;. Продолжаем, пока очередь не станет пустой.&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Базовый алгоритм работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2)&amp;lt;/tex&amp;gt;. В алгоритме с модификацией нетерминал попадает в очередь ровно один раз, соответственно ровно один раз мы пройдемся по списку правил, в правой части которых он лежит. Суммарно получается &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику, причем сразу пронумеруем правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow DS &amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;C\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;D\rightarrow d&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Поскольку правило 6 содержит справа терминалы, оно заведомо не будет влиять на ответ, поэтому мы не будем его учитывать.''&lt;br /&gt;
&lt;br /&gt;
Построим массив списков &amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=5 |&amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1, 4&lt;br /&gt;
|1&lt;br /&gt;
|1, 4&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:solid 2px gray&amp;quot;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!Комментарий&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{ \right \}&amp;lt;/tex&amp;gt; &lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Зададим начальные значения массивам &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{A,C \right \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2 |Заметим, что правила 3 и 5 являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами. Пометим левые нетерминалы из этих правил и добавим их в очередь. После этого в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; лежит &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; остался без изменений.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{C \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, декрементируем те счетчики, которые относятся к связанным с ним правилам. К очереди ничего не добавится.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{B \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. После проведения действий из алгоритма в очередь добавится &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{S \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. После действий алгоритма в очередь добавится &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{ \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Ничего не добавится в очередь и она останется пустой. Алгоритм закончил свое выполнение. Итого в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил входят все нетерминалы, кроме &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Если применять алгоритм без модификации с очередью, то действия будут следующие:&lt;br /&gt;
# Возьмём множество состоящее из &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов &amp;lt;tex&amp;gt;\lbrace A, C \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Добавим &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; в множество, так как правая часть правила &amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt; состоит только из нетерминалов из множества.&lt;br /&gt;
# Повторим второй пункт для правила &amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt; и получим множество &amp;lt;tex&amp;gt;\lbrace A, B, C, S \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Больше нет нерассмотренных правил, содержащих справа только нетерминалы из множества.&lt;br /&gt;
&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами являются &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм удаления &amp;amp;epsilon;-правил из грамматики ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma'=\langle N,\Sigma, P', S' \rangle&amp;lt;/tex&amp;gt; без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил (может присутствовать правило &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, но в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не встречается в правых частях правил); &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Добавить все правила из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найти все &amp;lt;tex&amp;gt;\varepsilon&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 ... B_k \alpha_k \ &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;\alpha_i&amp;lt;/tex&amp;gt; — последовательности из терминалов и нетерминалов, &amp;lt;tex&amp;gt;B_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы) добавить в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt; все возможные варианты правил, в которых либо присутствует, либо удалён каждый из нетерминалов &amp;lt;tex&amp;gt;B_j\; (1 \leqslant j \leqslant k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Удалить все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила из &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если в исходной грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; выводилось &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то необходимо добавить новый нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt;, сделать его стартовым, добавить правило &amp;lt;tex&amp;gt;S' \rightarrow S|\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если грамматика &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; была построена с помощью описанного выше алгоритма по грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Сначала докажем, что, если не выполнять шаг 5 алгоритма, то получится грамматика &amp;lt;tex&amp;gt;\Gamma' : L(\Gamma') = L(\Gamma) \setminus \lbrace \varepsilon \rbrace &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для этого достаточно доказать, что&lt;br /&gt;
&amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
В этом случае в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt;. По построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow \alpha&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; — цепочка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, элементы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами. Тогда в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть порождения &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} \alpha \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;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;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma'}{\Rightarrow}X_1 X_2...X_k \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Первое использованное правило должно быть построено по правилу грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A \rightarrow Y_1 Y_2...Y_m&amp;lt;/tex&amp;gt;, где последовательность &amp;lt;tex&amp;gt;Y_1 Y_2...Y_m&amp;lt;/tex&amp;gt; совпадает с последовательностью &amp;lt;tex&amp;gt;X_1 X_2...X_k&amp;lt;/tex&amp;gt;, символы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&amp;lt;br/&amp;gt;&lt;br /&gt;
Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2...w_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то &amp;lt;tex&amp;gt;w_i = X_i&amp;lt;/tex&amp;gt;, a если нетерминал, то порождение &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. По предположению &amp;lt;tex&amp;gt;X_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;A \underset {\Gamma}{\Rightarrow} Y_1 Y_2...Y_m \underset{\Gamma}{\Rightarrow}^* X_1 X_2...X_k \underset{\Gamma}{\Rightarrow}^* w_1 w_2...w_k = w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt; присутствует в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;, это же правило будет и в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, поэтому &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Переход'''. Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma}{\Rightarrow}Y_1 Y_2...Y_m \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2...w_m&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Y_{i_1}, Y_{i_2}, ..., Y_{i_p}&amp;lt;/tex&amp;gt; — подпоследовательность, состоящая из всех элементов, таких, что &amp;lt;tex&amp;gt;w_{i_k} \ne \varepsilon&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;Y_{i_1} Y_{i_2} ... Y_{i_p} \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;p \geqslant 1&amp;lt;/tex&amp;gt;, поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;A \rightarrow Y_{i_1} Y_{i_2} ... Y_{i_p}&amp;lt;/tex&amp;gt; является правилом в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; по построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Так как каждое из порождений &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, к ним можно применить предположение индукции и заключить, что, если &amp;lt;tex&amp;gt;w_i \ne \varepsilon&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Y_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} Y_{i_1} Y_{i_2} ... Y_{i_p} \underset{\Gamma'}{\Rightarrow}^* w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подставив &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в утверждение (*), видим, что &amp;lt;tex&amp;gt;w \in L(\Gamma)&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L(\Gamma')&amp;lt;/tex&amp;gt;. Так как после выполнения шага 5 алгоритма в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; могло добавиться только пустое слово &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то язык, задаваемый КС-грамматикой &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, совпадает с языком, задаваемым КС-грамматикой &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Рассмотрим грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow T_1 T_2 T_3 \ldots T_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_1\rightarrow t_1|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_2\rightarrow t_2|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots\&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_n\rightarrow t_n|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Из нетерминала &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; можно вывести &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; сочетаний нетерминалов &amp;lt;tex&amp;gt;T_i&amp;lt;/tex&amp;gt;. Таким образом в худшем случае алгоритм работает за &amp;lt;tex&amp;gt;O(2^{\left| \Gamma \right|})&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим теперь грамматику с устраненными [[Удаление_длинных_правил_из_грамматики|длинными правилами]]. После применения данного алгоритма, который работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, в грамматике станет на &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt; больше правил, но при этом все они будут размером &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого по-прежнему  &amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Однако алгоритм удаления &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил будет работать за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, поскольку для каждого правила можно будет добавить только &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; сочетаний нетерминалов.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ней &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&lt;br /&gt;
# Переберём для каждого правила все возможные сочетания &amp;amp;epsilon;-порождающих нетерминалов и добавим новые правила:&lt;br /&gt;
#* &amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;S \rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
#* &amp;lt;tex&amp;gt;B \rightarrow A|C&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;B \rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Удалим праила &amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C\rightarrow \varepsilon&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;
:&amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|ABCd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow A|AC|C&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.''  '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 273: ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Chomsky_normal_form Wikipedia — Chomsky normal form]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71209</id>
		<title>Удаление eps-правил из грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71209"/>
				<updated>2019-05-14T15:14:35Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Используемые определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Правила вида &amp;lt;tex&amp;gt;A \to \varepsilon&amp;lt;/tex&amp;gt; называются '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-rule'').&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-generating''), если &amp;lt;tex&amp;gt;A \Rightarrow^* \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм поиска &amp;amp;epsilon;-порождающих нетерминалов ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' множество &amp;lt;tex&amp;gt;\varepsilon&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;
# Перебираем правила грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Если найдено правило &amp;lt;tex&amp;gt;A \rightarrow C_1C_2...C_k&amp;lt;/tex&amp;gt;, для которого верно, что каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; принадлежит множеству, то добавить &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в множество.&lt;br /&gt;
# Если на шаге 2 множество изменилось, то повторить шаг 2.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Описанный выше алгоритм находит все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
Для доказательства корректности алгоритма достаточно показать, что, если множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов на очередной итерации алгоритма не изменялось, то алгоритм нашел все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы.&lt;br /&gt;
&lt;br /&gt;
Пусть после завершения алгоритма существуют нетерминалы такие, что они являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но не были найдены алгоритмом. Выберем из этих нетерминалов нетерминал &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, из которого выводится &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; за наименьшее число шагов. Тогда в грамматике есть правило &amp;lt;tex&amp;gt;B \rightarrow C_1C_2...C_k&amp;lt;/tex&amp;gt;, где каждый нетерминал &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающий. Каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; входит в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов, так как иначе вместо &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; необходимо было взять &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt;. Следовательно, на одной из итераций алгоритма &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; уже добавился в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;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;\mathtt{isEpsilon[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить пометку, является он &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим или нет.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{concernedRules[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить список номеров тех правил, в правой части которых он встречается;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{counter[rule_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого правила будем хранить счетчик количества нетерминалов в правой части, которые еще не помечены &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{Q} \ &amp;lt;/tex&amp;gt; {{---}} очередь нетерминалов, помеченных &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но еще не обработанных.&lt;br /&gt;
&lt;br /&gt;
Сначала проставим &amp;lt;tex&amp;gt;\mathtt{false}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\mathtt{isEpsilon} \ &amp;lt;/tex&amp;gt; для всех нетерминалов, а в &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; для каждого правила запишем количество нетерминалов справа от него. Те правила, для которых &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; сразу же оказался нулевым, добавим в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; и объявим истинным соответствующий &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;, так как это &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила. Теперь будем доставать из очереди по одному нетерминалу, смотреть на список &amp;lt;tex&amp;gt;\mathtt{concernedRules} \ &amp;lt;/tex&amp;gt; для него и уменьшать &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; для всех правил оттуда. Если &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; какого-то правила в этот момент обнулился, то нетерминал из левой части этого правила помечается &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим, если еще не был помечен до этого, и добавляется в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;. Продолжаем, пока очередь не станет пустой.&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Базовый алгоритм работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2)&amp;lt;/tex&amp;gt;. В алгоритме с модификацией нетерминал попадает в очередь ровно один раз, соответственно ровно один раз мы пройдемся по списку правил, в правой части которых он лежит. Суммарно получается &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику, причем сразу пронумеруем правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow DS &amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;C\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;D\rightarrow d&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Поскольку правило 6 содержит справа терминалы, оно заведомо не будет влиять на ответ, поэтому мы не будем его учитывать.''&lt;br /&gt;
&lt;br /&gt;
Построим массив списков &amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=5 |&amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1, 4&lt;br /&gt;
|1&lt;br /&gt;
|1, 4&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:solid 2px gray&amp;quot;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!Комментарий&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{ \right \}&amp;lt;/tex&amp;gt; &lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Зададим начальные значения массивам &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{A,C \right \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2 |Заметим, что правила 3 и 5 являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами. Пометим левые нетерминалы из этих правил и добавим их в очередь. После этого в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; лежит &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; остался без изменений.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{C \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, декрементируем те счетчики, которые относятся к связанным с ним правилам. К очереди ничего не добавится.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{B \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. После проведения действий из алгоритма в очередь добавится &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{S \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. После действий алгоритма в очередь добавится &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{ \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Ничего не добавится в очередь и она останется пустой. Алгоритм закончил свое выполнение. Итого в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил входят все нетерминалы, кроме &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Если применять алгоритм без модификации с очередью, то действия будут следующие:&lt;br /&gt;
# Возьмём множество состоящее из &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов &amp;lt;tex&amp;gt;\lbrace A, C \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Добавим &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; в множество, так как правая часть правила &amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt; состоит только из нетерминалов из множества.&lt;br /&gt;
# Повторим второй пункт для правила &amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt; и получим множество &amp;lt;tex&amp;gt;\lbrace A, B, C, S \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Больше нет нерассмотренных правил, содержащих справа только нетерминалы из множества.&lt;br /&gt;
&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами являются &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм удаления &amp;amp;epsilon;-правил из грамматики ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma'=\langle N,\Sigma, P', S' \rangle&amp;lt;/tex&amp;gt; без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил (может присутствовать правило &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, но в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не встречается в правых частях правил); &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Добавить все правила из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найти все &amp;lt;tex&amp;gt;\varepsilon&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 ... B_k \alpha_k&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;\alpha_i&amp;lt;/tex&amp;gt; — последовательности из терминалов и нетерминалов, &amp;lt;tex&amp;gt;B_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы) добавить в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt; все возможные варианты правил, в которых либо присутствует, либо удалён каждый из нетерминалов &amp;lt;tex&amp;gt;B_j\; (1 \leqslant j \leqslant k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Удалить все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила из &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если в исходной грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; выводилось &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то необходимо добавить новый нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt;, сделать его стартовым, добавить правило &amp;lt;tex&amp;gt;S' \rightarrow S|\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если грамматика &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; была построена с помощью описанного выше алгоритма по грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Сначала докажем, что, если не выполнять шаг 5 алгоритма, то получится грамматика &amp;lt;tex&amp;gt;\Gamma' : L(\Gamma') = L(\Gamma) \setminus \lbrace \varepsilon \rbrace &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для этого достаточно доказать, что&lt;br /&gt;
&amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&amp;lt;br\&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
В этом случае в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt;. По построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow \alpha&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; — цепочка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, элементы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами. Тогда в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть порождения &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} \alpha \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;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;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma'}{\Rightarrow}X_1 X_2...X_k \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Первое использованное правило должно быть построено по правилу грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A \rightarrow Y_1 Y_2...Y_m&amp;lt;/tex&amp;gt;, где последовательность &amp;lt;tex&amp;gt;Y_1 Y_2...Y_m&amp;lt;/tex&amp;gt; совпадает с последовательностью &amp;lt;tex&amp;gt;X_1 X_2...X_k&amp;lt;/tex&amp;gt;, символы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&amp;lt;br/&amp;gt;&lt;br /&gt;
Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2...w_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то &amp;lt;tex&amp;gt;w_i = X_i&amp;lt;/tex&amp;gt;, a если нетерминал, то порождение &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. По предположению &amp;lt;tex&amp;gt;X_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;A \underset {\Gamma}{\Rightarrow} Y_1 Y_2...Y_m \underset{\Gamma}{\Rightarrow}^* X_1 X_2...X_k \underset{\Gamma}{\Rightarrow}^* w_1 w_2...w_k = w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt; присутствует в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;, это же правило будет и в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, поэтому &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Переход'''. Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma}{\Rightarrow}Y_1 Y_2...Y_m \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2...w_m&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Y_{i_1}, Y_{i_2}, ..., Y_{i_p}&amp;lt;/tex&amp;gt; — подпоследовательность, состоящая из всех элементов, таких, что &amp;lt;tex&amp;gt;w_{i_k} \ne \varepsilon&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;Y_{i_1} Y_{i_2} ... Y_{i_p} \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;p \geqslant 1&amp;lt;/tex&amp;gt;, поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;A \rightarrow Y_{i_1} Y_{i_2} ... Y_{i_p}&amp;lt;/tex&amp;gt; является правилом в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; по построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Так как каждое из порождений &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, к ним можно применить предположение индукции и заключить, что, если &amp;lt;tex&amp;gt;w_i \ne \varepsilon&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Y_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} Y_{i_1} Y_{i_2} ... Y_{i_p} \underset{\Gamma'}{\Rightarrow}^* w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подставив &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в утверждение (*), видим, что &amp;lt;tex&amp;gt;w \in L(\Gamma)&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L(\Gamma')&amp;lt;/tex&amp;gt;. Так как после выполнения шага 5 алгоритма в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; могло добавиться только пустое слово &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то язык, задаваемый КС-грамматикой &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, совпадает с языком, задаваемым КС-грамматикой &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Рассмотрим грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow T_1 T_2 T_3 \ldots T_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_1\rightarrow t_1|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_2\rightarrow t_2|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots\&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_n\rightarrow t_n|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Из нетерминала &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; можно вывести &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; сочетаний нетерминалов &amp;lt;tex&amp;gt;T_i&amp;lt;/tex&amp;gt;. Таким образом в худшем случае алгоритм работает за &amp;lt;tex&amp;gt;O(2^{\left| \Gamma \right|})&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим теперь грамматику с устраненными [[Удаление_длинных_правил_из_грамматики|длинными правилами]]. После применения данного алгоритма, который работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, в грамматике станет на &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt; больше правил, но при этом все они будут размером &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого по-прежнему  &amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Однако алгоритм удаления &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил будет работать за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, поскольку для каждого правила можно будет добавить только &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; сочетаний нетерминалов.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ней &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&lt;br /&gt;
# Переберём для каждого правила все возможные сочетания &amp;amp;epsilon;-порождающих нетерминалов и добавим новые правила:&lt;br /&gt;
#* &amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;S \rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
#* &amp;lt;tex&amp;gt;B \rightarrow A|C&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;B \rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Удалим праила &amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C\rightarrow \varepsilon&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;
:&amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|ABCd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow A|AC|C&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.''  '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 273: ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Chomsky_normal_form Wikipedia — Chomsky normal form]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71208</id>
		<title>Удаление eps-правил из грамматики</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_eps-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB_%D0%B8%D0%B7_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8&amp;diff=71208"/>
				<updated>2019-05-14T15:13:44Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Модификация с очередью */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Используемые определения ==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Правила вида &amp;lt;tex&amp;gt;A \to \varepsilon&amp;lt;/tex&amp;gt; называются '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-rule'').&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition = Нетерминал &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; называется '''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим''' (англ. ''&amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-generating''), если &amp;lt;tex&amp;gt;A \Rightarrow^* \varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Алгоритм поиска &amp;amp;epsilon;-порождающих нетерминалов ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' множество &amp;lt;tex&amp;gt;\varepsilon&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;
# Перебираем правила грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Если найдено правило &amp;lt;tex&amp;gt;A \rightarrow C_1C_2...C_k&amp;lt;/tex&amp;gt;, для которого верно, что каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; принадлежит множеству, то добавить &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в множество.&lt;br /&gt;
# Если на шаге 2 множество изменилось, то повторить шаг 2.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Описанный выше алгоритм находит все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
&lt;br /&gt;
Для доказательства корректности алгоритма достаточно показать, что, если множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов на очередной итерации алгоритма не изменялось, то алгоритм нашел все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы.&lt;br /&gt;
&lt;br /&gt;
Пусть после завершения алгоритма существуют нетерминалы такие, что они являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но не были найдены алгоритмом. Выберем из этих нетерминалов нетерминал &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, из которого выводится &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt; за наименьшее число шагов. Тогда в грамматике есть правило &amp;lt;tex&amp;gt;B \rightarrow C_1C_2...C_k&amp;lt;/tex&amp;gt;, где каждый нетерминал &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающий. Каждый &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt; входит в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов, так как иначе вместо &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; необходимо было взять &amp;lt;tex&amp;gt;C_i&amp;lt;/tex&amp;gt;. Следовательно, на одной из итераций алгоритма &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; уже добавился в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;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;\mathtt{isEpsilon[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить пометку, является он &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим или нет.&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{concernedRules[nonterm_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого нетерминала будем хранить список номеров тех правил, в правой части которых он встречается;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{counter[rule_i]} \ &amp;lt;/tex&amp;gt; {{---}} для каждого правила будем хранить счетчик количества нетерминалов в правой части, которые еще не помечены &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\mathtt{Q} \ &amp;lt;/tex&amp;gt; {{---}} очередь нетерминалов, помеченных &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими, но еще не обработанных.&lt;br /&gt;
&lt;br /&gt;
Сначала проставим &amp;lt;tex&amp;gt;\mathtt{false}&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\mathtt{isEpsilon} \ &amp;lt;/tex&amp;gt; для всех нетерминалов, а в &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; для каждого правила запишем количество нетерминалов справа от него. Те правила, для которых &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; сразу же оказался нулевым, добавим в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; и объявим истинным соответствующий &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;, так как это &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила. Теперь будем доставать из очереди по одному нетерминалу, смотреть на список &amp;lt;tex&amp;gt;\mathtt{concernedRules} \ &amp;lt;/tex&amp;gt; для него и уменьшать &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; для всех правил оттуда. Если &amp;lt;tex&amp;gt;\mathtt{counter} \ &amp;lt;/tex&amp;gt; какого-то правила в этот момент обнулился, то нетерминал из левой части этого правила помечается &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающим, если еще не был помечен до этого, и добавляется в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;. Продолжаем, пока очередь не станет пустой.&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Базовый алгоритм работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right| ^ 2)&amp;lt;/tex&amp;gt;. В алгоритме с модификацией нетерминал попадает в очередь ровно один раз, соответственно ровно один раз мы пройдемся по списку правил, в правой части которых он лежит. Суммарно получается &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику, причем сразу пронумеруем правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow DS &amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;C\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;D\rightarrow d&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Поскольку правило 6 содержит справа терминалы, оно заведомо не будет влиять на ответ, поэтому мы не будем его учитывать.''&lt;br /&gt;
&lt;br /&gt;
Построим массив списков &amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=5 |&amp;lt;tex&amp;gt;\mathtt{concernedRules}&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|1, 4&lt;br /&gt;
|1&lt;br /&gt;
|1, 4&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;border:solid 2px gray&amp;quot;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-right:solid 2px gray&amp;quot; colspan=5| &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!Комментарий&lt;br /&gt;
|-&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{ \right \}&amp;lt;/tex&amp;gt; &lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Зададим начальные значения массивам &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\mathtt{isEpsilon}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left \{A,C \right \}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2 |Заметим, что правила 3 и 5 являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правилами. Пометим левые нетерминалы из этих правил и добавим их в очередь. После этого в &amp;lt;tex&amp;gt;\mathtt{Q}&amp;lt;/tex&amp;gt; лежит &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;\mathtt{counter}&amp;lt;/tex&amp;gt; остался без изменений.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|3&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{C \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, декрементируем те счетчики, которые относятся к связанным с ним правилам. К очереди ничего не добавится.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|2&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{B \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;. После проведения действий из алгоритма в очередь добавится &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|1&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{S \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;. После действий алгоритма в очередь добавится &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|2&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot; rowspan=2|&amp;lt;tex&amp;gt;\left\{ \right\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|&amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|1&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|2&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|3&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray&amp;quot;|4&lt;br /&gt;
!style=&amp;quot;border-top:solid 2px gray; border-right:solid 2px gray&amp;quot;|5&lt;br /&gt;
|style=&amp;quot;border-top:solid 2px gray&amp;quot; rowspan=2|Достанем из очереди &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;. Ничего не добавится в очередь и она останется пустой. Алгоритм закончил свое выполнение. Итого в множество &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил входят все нетерминалы, кроме &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|style=&amp;quot;border-right:solid 2px gray&amp;quot;|0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Если применять алгоритм без модификации с очередью, то действия будут следующие:&lt;br /&gt;
# Возьмём множество состоящее из &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающих нетерминалов &amp;lt;tex&amp;gt;\lbrace A, C \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Добавим &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; в множество, так как правая часть правила &amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt; состоит только из нетерминалов из множества.&lt;br /&gt;
# Повторим второй пункт для правила &amp;lt;tex&amp;gt;S\rightarrow ABC&amp;lt;/tex&amp;gt; и получим множество &amp;lt;tex&amp;gt;\lbrace A, B, C, S \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Больше нет нерассмотренных правил, содержащих справа только нетерминалы из множества.&lt;br /&gt;
&lt;br /&gt;
Таким образом &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами являются &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм удаления &amp;amp;epsilon;-правил из грамматики ==&lt;br /&gt;
'''Вход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma=\langle N,\Sigma, P, S \rangle&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Выход:''' КС-грамматика &amp;lt;tex&amp;gt; \Gamma'=\langle N,\Sigma, P', S' \rangle&amp;lt;/tex&amp;gt; без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил (может присутствовать правило &amp;lt;tex&amp;gt;S \rightarrow \varepsilon&amp;lt;/tex&amp;gt;, но в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; не встречается в правых частях правил); &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
# Добавить все правила из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Найти все &amp;lt;tex&amp;gt;\varepsilon&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 ... B_k \alpha_k&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;\alpha_i&amp;lt;/tex&amp;gt; — последовательности из терминалов и нетерминалов, &amp;lt;tex&amp;gt;B_j&amp;lt;/tex&amp;gt; — &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающие нетерминалы) добавить в &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt; все возможные варианты правил, в которых либо присутствует, либо удалён каждый из нетерминалов &amp;lt;tex&amp;gt;B_j\; (1 \leqslant j \leqslant k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Удалить все &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правила из &amp;lt;tex&amp;gt;P'&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если в исходной грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; выводилось &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то необходимо добавить новый нетерминал &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt;, сделать его стартовым, добавить правило &amp;lt;tex&amp;gt;S' \rightarrow S|\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Доказательство корректности ===&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement = Если грамматика &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; была построена с помощью описанного выше алгоритма по грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;L(\Gamma') = L(\Gamma)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof =&lt;br /&gt;
Сначала докажем, что, если не выполнять шаг 5 алгоритма, то получится грамматика &amp;lt;tex&amp;gt;\Gamma' : L(\Gamma') = L(\Gamma) \setminus \lbrace \varepsilon \rbrace &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для этого достаточно доказать, что&lt;br /&gt;
&amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; (*).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&amp;lt;br\&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
В этом случае в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt;. По построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть правило &amp;lt;tex&amp;gt;A \rightarrow \alpha&amp;lt;/tex&amp;gt;, причем &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; — цепочка &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;, элементы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами. Тогда в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; есть порождения &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} \alpha \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;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;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma'}{\Rightarrow}X_1 X_2...X_k \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Первое использованное правило должно быть построено по правилу грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;A \rightarrow Y_1 Y_2...Y_m&amp;lt;/tex&amp;gt;, где последовательность &amp;lt;tex&amp;gt;Y_1 Y_2...Y_m&amp;lt;/tex&amp;gt; совпадает с последовательностью &amp;lt;tex&amp;gt;X_1 X_2...X_k&amp;lt;/tex&amp;gt;, символы которой, возможно, перемежаются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&amp;lt;br/&amp;gt;&lt;br /&gt;
Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2...w_k&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то &amp;lt;tex&amp;gt;w_i = X_i&amp;lt;/tex&amp;gt;, a если нетерминал, то порождение &amp;lt;tex&amp;gt;X_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов. По предположению &amp;lt;tex&amp;gt;X_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;, значит &amp;lt;tex&amp;gt;A \underset {\Gamma}{\Rightarrow} Y_1 Y_2...Y_m \underset{\Gamma}{\Rightarrow}^* X_1 X_2...X_k \underset{\Gamma}{\Rightarrow}^* w_1 w_2...w_k = w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;&amp;amp;nbsp; и&amp;amp;nbsp; &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
Докажем индукцией по длине порождения в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt; &lt;br /&gt;
'''База'''. &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow} w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Правило &amp;lt;tex&amp;gt;A \rightarrow w&amp;lt;/tex&amp;gt; присутствует в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;, это же правило будет и в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, поэтому &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Предположение индукции'''. Пусть из &amp;lt;tex&amp;gt;A \underset{\Gamma}{\Rightarrow}^*w \ne \varepsilon&amp;lt;/tex&amp;gt; менее, чем за &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, следует, что &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow}^*w &amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Переход'''. Пусть в порождении &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, &amp;lt;tex&amp;gt;n &amp;gt; 1&amp;lt;/tex&amp;gt;. Тогда оно имеет вид &amp;lt;tex&amp;gt;A\underset{\Gamma}{\Rightarrow}Y_1 Y_2...Y_m \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \in N \cup \Sigma &amp;lt;/tex&amp;gt;. Цепочку &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; можно разбить на &amp;lt;tex&amp;gt;w_1 w_2...w_m&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;Y_{i_1}, Y_{i_2}, ..., Y_{i_p}&amp;lt;/tex&amp;gt; — подпоследовательность, состоящая из всех элементов, таких, что &amp;lt;tex&amp;gt;w_{i_k} \ne \varepsilon&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;Y_{i_1} Y_{i_2} ... Y_{i_p} \underset{\Gamma}{\Rightarrow}^*w&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;p \geqslant 1&amp;lt;/tex&amp;gt;, поскольку &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt;. Значит, &amp;lt;tex&amp;gt;A \rightarrow Y_{i_1} Y_{i_2} ... Y_{i_p}&amp;lt;/tex&amp;gt; является правилом в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; по построению &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Так как каждое из порождений &amp;lt;tex&amp;gt;Y_i \underset{\Gamma}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt; содержит менее &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; шагов, к ним можно применить предположение индукции и заключить, что, если &amp;lt;tex&amp;gt;w_i \ne \varepsilon&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;Y_i \underset{\Gamma'}{\Rightarrow}^*w_i&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Таким образом, &amp;lt;tex&amp;gt;A \underset{\Gamma'}{\Rightarrow} Y_{i_1} Y_{i_2} ... Y_{i_p} \underset{\Gamma'}{\Rightarrow}^* w&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Подставив &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в утверждение (*), видим, что &amp;lt;tex&amp;gt;w \in L(\Gamma)&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;w \ne \varepsilon&amp;lt;/tex&amp;gt; тогда и только тогда, когда &amp;lt;tex&amp;gt;w \in L(\Gamma')&amp;lt;/tex&amp;gt;. Так как после выполнения шага 5 алгоритма в &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt; могло добавиться только пустое слово &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, то язык, задаваемый КС-грамматикой &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, совпадает с языком, задаваемым КС-грамматикой &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Время работы алгоритма ===&lt;br /&gt;
Рассмотрим грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow T_1 T_2 T_3 \ldots T_n&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_1\rightarrow t_1|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_2\rightarrow t_2|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;\ldots\&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;T_n\rightarrow t_n|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Из нетерминала &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; можно вывести &amp;lt;tex&amp;gt;2^n&amp;lt;/tex&amp;gt; сочетаний нетерминалов &amp;lt;tex&amp;gt;T_i&amp;lt;/tex&amp;gt;. Таким образом в худшем случае алгоритм работает за &amp;lt;tex&amp;gt;O(2^{\left| \Gamma \right|})&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Рассмотрим теперь грамматику с устраненными [[Удаление_длинных_правил_из_грамматики|длинными правилами]]. После применения данного алгоритма, который работает за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, в грамматике станет на &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt; больше правил, но при этом все они будут размером &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt;. Итого по-прежнему  &amp;lt;tex&amp;gt;\left| \Gamma \right| = O(n)&amp;lt;/tex&amp;gt;. Однако алгоритм удаления &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-правил будет работать за &amp;lt;tex&amp;gt;O(\left| \Gamma \right|)&amp;lt;/tex&amp;gt;, поскольку для каждого правила можно будет добавить только &amp;lt;tex&amp;gt;O(1)&amp;lt;/tex&amp;gt; сочетаний нетерминалов.&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
Рассмотрим грамматику:&lt;br /&gt;
:&amp;lt;tex&amp;gt;S\rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c|\varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В ней &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C&amp;lt;/tex&amp;gt; являются &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-порождающими нетерминалами.&lt;br /&gt;
# Переберём для каждого правила все возможные сочетания &amp;amp;epsilon;-порождающих нетерминалов и добавим новые правила:&lt;br /&gt;
#* &amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;S \rightarrow ABCd&amp;lt;/tex&amp;gt;&lt;br /&gt;
#* &amp;lt;tex&amp;gt;B \rightarrow A|C&amp;lt;/tex&amp;gt; для &amp;lt;tex&amp;gt;B \rightarrow AC&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Удалим праила &amp;lt;tex&amp;gt;A\rightarrow \varepsilon&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;C\rightarrow \varepsilon&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;
:&amp;lt;tex&amp;gt;S\rightarrow Ad|ABd|ACd|ABCd|Bd|BCd|Cd|d&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;A\rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;B\rightarrow A|AC|C&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;C\rightarrow c&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;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.''  '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — С. 273: ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Chomsky_normal_form Wikipedia — Chomsky normal form]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Нормальные формы КС-грамматик]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71207</id>
		<title>Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71207"/>
				<updated>2019-05-14T14:52:13Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Однозначные грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=csgrammar&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободной грамматикой''' (англ. ''сontext-free grammar'') называется [[Формальные грамматики|грамматика]], у которой в левых частях всех правил стоят только одиночные нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=lang&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободный язык''' (англ. ''context-free language'') {{---}} язык, задаваемый контекстно-свободной грамматикой.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лево- и правосторонний вывод слова==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Выводом слова''' (англ. ''derivation of a word'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово &amp;lt;tex&amp;gt;\alpha&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;&amp;quot;(&amp;quot;&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;&amp;quot;)&amp;quot;&amp;lt;/tex&amp;gt; {{---}} терминальные символы &lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал &lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow S(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выведем слово &amp;lt;tex&amp;gt;&amp;quot;(()(()))()&amp;quot;&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (S)\boldsymbol{S} \Rightarrow (S)(\boldsymbol{S})S\Rightarrow(S)()\boldsymbol{S}\Rightarrow(\boldsymbol{S})()\Rightarrow(\boldsymbol{S}(S))()\Rightarrow(S(S)(\boldsymbol{S}))()\Rightarrow(S(S)(\boldsymbol{S}(S)))()\Rightarrow (S(\boldsymbol{S})((S)))()\Rightarrow(\boldsymbol{S}()((S)))()\Rightarrow(()((\boldsymbol{S})))()\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левосторонним выводом слова''' (англ. ''leftmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правосторонним выводом слова''' (англ. ''rightmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим левосторонний вывод скобочной последовательности из примера:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дерево разбора==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Крона дерева разбора''' (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Построим дерево разбора скобочной последовательности из примера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree1.png]]&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и кроной &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\omega \in N^{*}&amp;lt;/tex&amp;gt;. Тогда в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; существует левое порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Используем индукцию по высоте дерева.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Базисом является высота &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, наименьшая из возможных для дерева разбора с терминальной кроной.&lt;br /&gt;
:Поскольку это дерево является деревом разбора, &amp;lt;tex&amp;gt;A \rightarrow \omega&amp;lt;/tex&amp;gt; должно быть продукцией. Таким образом, &amp;lt;tex&amp;gt;A \Rightarrow_{lm} \omega&amp;lt;/tex&amp;gt; есть одношаговое левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Существует корень с отметкой &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и сыновьями, отмеченными слева направо &amp;lt;tex&amp;gt;X_1X_2 \dots X_k&amp;lt;/tex&amp;gt;. Символы &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; могут быть как терминалами, так и переменными.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то определим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; как цепочку, состоящую из одного &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Заметим, что в этом случае высота поддерева меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение &amp;lt;tex&amp;gt;X_i \Rightarrow^{*}_{lm} \omega_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\omega = \omega_1\omega_2 \dots \omega_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим левое порождение цепочки &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
:Начнем с шага &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Затем для &amp;lt;tex&amp;gt;i = 1, 2, \dots, k \ &amp;lt;/tex&amp;gt; покажем, что имеет место следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное доказательство использует в действительности еще одну индукцию, на этот раз по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для базиса &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt; мы уже знаем, что &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для индукции предположим, что существует следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то не делаем ничего, но в дальнейшем рассматриваем &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; как терминальную цепочку &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Таким образом, приходим к существованию следующего порождения. &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; является переменной, то продолжаем порождением &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; в контексте уже построенного порождения. Таким образом, если этим порождением является: &amp;lt;tex&amp;gt;X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2\dots \Rightarrow_{lm} \omega_i&amp;lt;/tex&amp;gt;, то продолжаем следующими порождениями: &lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_1X_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_2X_{i+1}\dots X_k  \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом является порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда &amp;lt;tex&amp;gt;i = k&amp;lt;/tex&amp;gt;, результат представляет собой левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t2&lt;br /&gt;
|statement=Для каждой грамматики &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;N^{*}&amp;lt;/tex&amp;gt; цепочка &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных дерева разбора тогда и только тогда, когда &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных левых порождения из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве [[#t1|теоремы]]. В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Longleftarrow &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;
|definition=&lt;br /&gt;
Грамматика называется '''однозначной''' (англ. ''unambiguous grammar''), если у каждого слова имеется не более одного дерева разбора в этой грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma-&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} однозначная грамматика. Тогда &amp;lt;tex&amp;gt;\forall \omega \in \mathbb{L}(\Gamma)&amp;lt;/tex&amp;gt; существует ровно один левосторонний (правосторонний) вывод.&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Грамматика из примера не является однозначной.&lt;br /&gt;
|proof=Выше уже было построено дерево разбора для слова &amp;lt;tex&amp;gt;&amp;quot;(()(()))()&amp;quot;&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим еще одно дерево разбора для данного слова.&lt;br /&gt;
&lt;br /&gt;
Например, оно будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree2.png]]&lt;br /&gt;
Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике &amp;lt;tex&amp;gt;\Rightarrow&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;
:&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы&lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта грамматика однозначна.&lt;br /&gt;
Для этого, используя индукцию, докажем, что для любого слова &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Если &amp;lt;tex&amp;gt;\omega=\varepsilon&amp;lt;/tex&amp;gt;, то оно выводится только по второму правилу &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; для него существует единственное дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Пусть &amp;lt;tex&amp;gt;\left\vert \omega \right\vert=n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \upsilon&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\left\vert \upsilon \right\vert &amp;lt; n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\upsilon&amp;lt;/tex&amp;gt; {{---}} правильная скобочная последовательность, у которой &amp;lt;tex&amp;gt;\exists!&amp;lt;/tex&amp;gt; дерево разбора. &lt;br /&gt;
&lt;br /&gt;
:Найдем в слове &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; минимальный индекс &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; такой, что слово &amp;lt;tex&amp;gt;\omega[0..i]&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью. Так как &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; минимальный, то &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)\ &amp;lt;/tex&amp;gt;. Из того, что &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;\beta=\omega[i+1..n-1]&amp;lt;/tex&amp;gt; {{---}} правильные скобочные последовательности, при этом &amp;lt;tex&amp;gt;\left\vert \alpha \right\vert&amp;lt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\vert \beta \right\vert&amp;lt;n \Rightarrow&amp;lt;/tex&amp;gt; по индукционному предположению предположению у &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; существуют единственные деревья разбора.&lt;br /&gt;
&lt;br /&gt;
:Если мы покажем, что из части &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; первого правила можно вывести только слово &amp;lt;tex&amp;gt;(\alpha)&amp;lt;/tex&amp;gt;, то утверждение будет доказано (так как из первой части первого правила выводится &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, а из второй только &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и для каждого из них по предположению существуют единственные деревья разбора).&lt;br /&gt;
&lt;br /&gt;
:Пусть из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j]=(\gamma)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt;, при этом &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, а не &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} противоречие. &lt;br /&gt;
&lt;br /&gt;
:Аналогично из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; не может быть выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j] \ &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;, потому что тогда &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha) \ &amp;lt;/tex&amp;gt; не будет правильной скобочной последовательностью, так как в позиции &amp;lt;tex&amp;gt;i-1&amp;lt;/tex&amp;gt; баланс скобок будет отрицательный.&lt;br /&gt;
&lt;br /&gt;
:Значит, из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..i] \Rightarrow \omega \ &amp;lt;/tex&amp;gt; имеет единственное дерево разбора &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; данная грамматика однозначная.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют '''существенно неоднозначными'''.&lt;br /&gt;
{{main|Существенно неоднозначные языки}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Формальные грамматики]]&lt;br /&gt;
* [[Иерархия Хомского формальных грамматик]]&lt;br /&gt;
* [[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
* [[Существенно неоднозначные языки]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]]&lt;br /&gt;
* [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]]&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71206</id>
		<title>Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71206"/>
				<updated>2019-05-14T14:51:37Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Однозначные грамматики */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=csgrammar&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободной грамматикой''' (англ. ''сontext-free grammar'') называется [[Формальные грамматики|грамматика]], у которой в левых частях всех правил стоят только одиночные нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=lang&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободный язык''' (англ. ''context-free language'') {{---}} язык, задаваемый контекстно-свободной грамматикой.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лево- и правосторонний вывод слова==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Выводом слова''' (англ. ''derivation of a word'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово &amp;lt;tex&amp;gt;\alpha&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;&amp;quot;(&amp;quot;&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;&amp;quot;)&amp;quot;&amp;lt;/tex&amp;gt; {{---}} терминальные символы &lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал &lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow S(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выведем слово &amp;lt;tex&amp;gt;&amp;quot;(()(()))()&amp;quot;&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (S)\boldsymbol{S} \Rightarrow (S)(\boldsymbol{S})S\Rightarrow(S)()\boldsymbol{S}\Rightarrow(\boldsymbol{S})()\Rightarrow(\boldsymbol{S}(S))()\Rightarrow(S(S)(\boldsymbol{S}))()\Rightarrow(S(S)(\boldsymbol{S}(S)))()\Rightarrow (S(\boldsymbol{S})((S)))()\Rightarrow(\boldsymbol{S}()((S)))()\Rightarrow(()((\boldsymbol{S})))()\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левосторонним выводом слова''' (англ. ''leftmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правосторонним выводом слова''' (англ. ''rightmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим левосторонний вывод скобочной последовательности из примера:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дерево разбора==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Крона дерева разбора''' (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Построим дерево разбора скобочной последовательности из примера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree1.png]]&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и кроной &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\omega \in N^{*}&amp;lt;/tex&amp;gt;. Тогда в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; существует левое порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Используем индукцию по высоте дерева.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Базисом является высота &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, наименьшая из возможных для дерева разбора с терминальной кроной.&lt;br /&gt;
:Поскольку это дерево является деревом разбора, &amp;lt;tex&amp;gt;A \rightarrow \omega&amp;lt;/tex&amp;gt; должно быть продукцией. Таким образом, &amp;lt;tex&amp;gt;A \Rightarrow_{lm} \omega&amp;lt;/tex&amp;gt; есть одношаговое левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Существует корень с отметкой &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и сыновьями, отмеченными слева направо &amp;lt;tex&amp;gt;X_1X_2 \dots X_k&amp;lt;/tex&amp;gt;. Символы &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; могут быть как терминалами, так и переменными.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то определим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; как цепочку, состоящую из одного &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Заметим, что в этом случае высота поддерева меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение &amp;lt;tex&amp;gt;X_i \Rightarrow^{*}_{lm} \omega_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\omega = \omega_1\omega_2 \dots \omega_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим левое порождение цепочки &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
:Начнем с шага &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Затем для &amp;lt;tex&amp;gt;i = 1, 2, \dots, k \ &amp;lt;/tex&amp;gt; покажем, что имеет место следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное доказательство использует в действительности еще одну индукцию, на этот раз по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для базиса &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt; мы уже знаем, что &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для индукции предположим, что существует следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то не делаем ничего, но в дальнейшем рассматриваем &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; как терминальную цепочку &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Таким образом, приходим к существованию следующего порождения. &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; является переменной, то продолжаем порождением &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; в контексте уже построенного порождения. Таким образом, если этим порождением является: &amp;lt;tex&amp;gt;X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2\dots \Rightarrow_{lm} \omega_i&amp;lt;/tex&amp;gt;, то продолжаем следующими порождениями: &lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_1X_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_2X_{i+1}\dots X_k  \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом является порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда &amp;lt;tex&amp;gt;i = k&amp;lt;/tex&amp;gt;, результат представляет собой левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t2&lt;br /&gt;
|statement=Для каждой грамматики &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;N^{*}&amp;lt;/tex&amp;gt; цепочка &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных дерева разбора тогда и только тогда, когда &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных левых порождения из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве [[#t1|теоремы]]. В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Longleftarrow &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;
|definition=&lt;br /&gt;
Грамматика называется '''однозначной''' (англ. ''unambiguous grammar''), если у каждого слова имеется не более одного дерева разбора в этой грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma-&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} однозначная грамматика. Тогда &amp;lt;tex&amp;gt;\forall \omega \in \mathbb{L}(\Gamma)&amp;lt;/tex&amp;gt; существует ровно один левосторонний (правосторонний) вывод.&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Грамматика из примера не является однозначной.&lt;br /&gt;
|proof=Выше уже было построено дерево разбора для слова &amp;lt;tex&amp;gt;&amp;quot;(()(()))()&amp;quot;&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим еще одно дерево разбора для данного слова.&lt;br /&gt;
&lt;br /&gt;
Например, оно будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree2.png]]&lt;br /&gt;
Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике &amp;lt;tex&amp;gt;\Rightarrow&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;
:&amp;lt;tex&amp;gt;(&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;)&amp;lt;/tex&amp;gt; {{---}} терминальные символы&lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта грамматика однозначна.&lt;br /&gt;
Для этого, используя индукцию, докажем, что для любого слова &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Если &amp;lt;tex&amp;gt;\omega=\varepsilon&amp;lt;/tex&amp;gt;, то оно выводится только по второму правилу &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; для него существует единственное дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Пусть &amp;lt;tex&amp;gt;\left\vert \omega \right\vert=n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \upsilon&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\left\vert \upsilon \right\vert &amp;lt; n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\upsilon&amp;lt;/tex&amp;gt; {{---}} правильная скобочная последовательность, у которой &amp;lt;tex&amp;gt;\exists!&amp;lt;/tex&amp;gt; дерево разбора. &lt;br /&gt;
&lt;br /&gt;
:Найдем в слове &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; минимальный индекс &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; такой, что слово &amp;lt;tex&amp;gt;\omega[0..i]&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью. Так как &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; минимальный, то &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)\ &amp;lt;/tex&amp;gt;. Из того, что &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;\beta=\omega[i+1..n-1]&amp;lt;/tex&amp;gt; {{---}} правильные скобочные последовательности, при этом &amp;lt;tex&amp;gt;\left\vert \alpha \right\vert&amp;lt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\vert \beta \right\vert&amp;lt;n \Rightarrow&amp;lt;/tex&amp;gt; по индукционному предположению предположению у &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; существуют единственные деревья разбора.&lt;br /&gt;
&lt;br /&gt;
:Если мы покажем, что из части &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; первого правила можно вывести только слово &amp;lt;tex&amp;gt;(\alpha)&amp;lt;/tex&amp;gt;, то утверждение будет доказано (так как из первой части первого правила выводится &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, а из второй только &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и для каждого из них по предположению существуют единственные деревья разбора).&lt;br /&gt;
&lt;br /&gt;
:Пусть из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j]=(\gamma)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt;, при этом &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, а не &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} противоречие. &lt;br /&gt;
&lt;br /&gt;
:Аналогично из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; не может быть выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j] \ &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;, потому что тогда &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)&amp;lt;/tex&amp;gt; не будет правильной скобочной последовательностью, так как в позиции &amp;lt;tex&amp;gt;i-1&amp;lt;/tex&amp;gt; баланс скобок будет отрицательный.&lt;br /&gt;
&lt;br /&gt;
:Значит, из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..i] \Rightarrow \omega \ &amp;lt;/tex&amp;gt; имеет единственное дерево разбора &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; данная грамматика однозначная.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют '''существенно неоднозначными'''.&lt;br /&gt;
{{main|Существенно неоднозначные языки}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Формальные грамматики]]&lt;br /&gt;
* [[Иерархия Хомского формальных грамматик]]&lt;br /&gt;
* [[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
* [[Существенно неоднозначные языки]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]]&lt;br /&gt;
* [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]]&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71205</id>
		<title>Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BD%D0%BE-%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8,_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%BB%D0%B5%D0%B2%D0%BE-_%D0%B8_%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4,_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE_%D1%80%D0%B0%D0%B7%D0%B1%D0%BE%D1%80%D0%B0&amp;diff=71205"/>
				<updated>2019-05-14T14:39:56Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Дерево разбора */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные определения==&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=csgrammar&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободной грамматикой''' (англ. ''сontext-free grammar'') называется [[Формальные грамматики|грамматика]], у которой в левых частях всех правил стоят только одиночные нетерминалы.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=lang&lt;br /&gt;
|definition=&lt;br /&gt;
'''Контекстно-свободный язык''' (англ. ''context-free language'') {{---}} язык, задаваемый контекстно-свободной грамматикой.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Лево- и правосторонний вывод слова==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Выводом слова''' (англ. ''derivation of a word'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется последовательность строк, состоящих из терминалов и нетерминалов. Первая строка последовательности состоит из одного стартового нетерминала. Каждая последующая строка получена из предыдущей путем замены любого нетерминала по одному (любому) из правил, а последней строкой в последовательности является слово &amp;lt;tex&amp;gt;\alpha&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;&amp;quot;(&amp;quot;&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;&amp;quot;)&amp;quot;&amp;lt;/tex&amp;gt; {{---}} терминальные символы &lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал &lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow S(S)&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выведем слово &amp;lt;tex&amp;gt;&amp;quot;(()(()))()&amp;quot;&amp;lt;/tex&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (S)\boldsymbol{S} \Rightarrow (S)(\boldsymbol{S})S\Rightarrow(S)()\boldsymbol{S}\Rightarrow(\boldsymbol{S})()\Rightarrow(\boldsymbol{S}(S))()\Rightarrow(S(S)(\boldsymbol{S}))()\Rightarrow(S(S)(\boldsymbol{S}(S)))()\Rightarrow (S(\boldsymbol{S})((S)))()\Rightarrow(\boldsymbol{S}()((S)))()\Rightarrow(()((\boldsymbol{S})))()\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левосторонним выводом слова''' (англ. ''leftmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого левого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правосторонним выводом слова''' (англ. ''rightmost derivation'') &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; называется такой вывод слова &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, в котором каждая последующая строка получена из предыдущей путем замены по одному из правил самого правого встречающегося в строке нетерминала.&lt;br /&gt;
}}&lt;br /&gt;
Рассмотрим левосторонний вывод скобочной последовательности из примера:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\boldsymbol{S}\Rightarrow (\boldsymbol{S})S \Rightarrow ((\boldsymbol{S})S)S\Rightarrow (()\boldsymbol{S})S\Rightarrow(()\boldsymbol{S}(S))S\Rightarrow(()(\boldsymbol{S}))S\Rightarrow(()(\boldsymbol{S}(S)))S\Rightarrow(()((\boldsymbol{S})))S\Rightarrow(()(()))\boldsymbol{S}\Rightarrow(()(()))(\boldsymbol{S})S\Rightarrow(()(()))()\boldsymbol{S}\Rightarrow(()(()))()&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Дерево разбора==&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Деревом разбора грамматики''' (англ. ''parse tree'') называется дерево, в вершинах которого записаны терминалы или нетерминалы. Все вершины, помеченные терминалами, являются листьями. Все вершины, помеченные нетерминалами, имеют детей. Дети вершины, в которой записан нетерминал, соответствуют раскрытию нетерминала по одному любому правилу (в левой части которого стоит этот нетерминал) и упорядочены так же, как в правой части этого правила.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Крона дерева разбора''' (англ. ''leaves of the parse tree'') {{---}} множество терминальных символов, упорядоченное в соответствии с номерами их достижения при обходе дерева в глубину из корня. Крона дерева разбора представляет из себя слово языка, которое выводит это дерево.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Построим дерево разбора скобочной последовательности из примера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree1.png]]&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t1&lt;br /&gt;
|statement=Пусть &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; — КС-грамматика. Предположим, что существует дерево разбора с корнем, отмеченным &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;, и кроной &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\omega \in N^{*}&amp;lt;/tex&amp;gt;. Тогда в грамматике &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; существует левое порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Используем индукцию по высоте дерева.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Базисом является высота &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt;, наименьшая из возможных для дерева разбора с терминальной кроной.&lt;br /&gt;
:Поскольку это дерево является деревом разбора, &amp;lt;tex&amp;gt;A \rightarrow \omega&amp;lt;/tex&amp;gt; должно быть продукцией. Таким образом, &amp;lt;tex&amp;gt;A \Rightarrow_{lm} \omega&amp;lt;/tex&amp;gt; есть одношаговое левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Существует корень с отметкой &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; и сыновьями, отмеченными слева направо &amp;lt;tex&amp;gt;X_1X_2 \dots X_k&amp;lt;/tex&amp;gt;. Символы &amp;lt;tex&amp;gt;X&amp;lt;/tex&amp;gt; могут быть как терминалами, так и переменными.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то определим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; как цепочку, состоящую из одного &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — переменная, то она должна быть корнем некоторого поддерева с терминальной кроной, которую обозначим &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Заметим, что в этом случае высота поддерева меньше &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, поэтому к нему применимо предположение индукции. Следовательно, существует левое порождение &amp;lt;tex&amp;gt;X_i \Rightarrow^{*}_{lm} \omega_i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;\omega = \omega_1\omega_2 \dots \omega_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим левое порождение цепочки &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; следующим образом:&lt;br /&gt;
:Начнем с шага &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
:Затем для &amp;lt;tex&amp;gt;i = 1, 2, \dots, k \ &amp;lt;/tex&amp;gt; покажем, что имеет место следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данное доказательство использует в действительности еще одну индукцию, на этот раз по &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Для базиса &amp;lt;tex&amp;gt;i = 0&amp;lt;/tex&amp;gt; мы уже знаем, что &amp;lt;tex&amp;gt;A \Rightarrow_{lm} X_1X_2\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для индукции предположим, что существует следующее порождение: &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; — терминал, то не делаем ничего, но в дальнейшем рассматриваем &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; как терминальную цепочку &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt;. Таким образом, приходим к существованию следующего порождения. &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
# Если &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; является переменной, то продолжаем порождением &amp;lt;tex&amp;gt;\omega_i&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;X_i&amp;lt;/tex&amp;gt; в контексте уже построенного порождения. Таким образом, если этим порождением является: &amp;lt;tex&amp;gt;X_i \Rightarrow_{lm} \alpha_1 \Rightarrow_{lm} \alpha_2\dots \Rightarrow_{lm} \omega_i&amp;lt;/tex&amp;gt;, то продолжаем следующими порождениями: &lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}X_iX_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_1X_{i+1}\dots X_k \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_{i–1}\alpha_2X_{i+1}\dots X_k  \Rightarrow_{lm}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\dots&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;tex&amp;gt;\omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом является порождение &amp;lt;tex&amp;gt;A \Rightarrow^{*}_{lm} \omega_1\omega_2\dots\omega_iX_{i+1}X_{i+2}\dots X_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Когда &amp;lt;tex&amp;gt;i = k&amp;lt;/tex&amp;gt;, результат представляет собой левое порождение &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|id=t2&lt;br /&gt;
|statement=Для каждой грамматики &amp;lt;tex&amp;gt;\Gamma = \langle \Sigma, N, S, P \rangle&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;N^{*}&amp;lt;/tex&amp;gt; цепочка &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных дерева разбора тогда и только тогда, когда &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; имеет два разных левых порождения из &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Longrightarrow&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
:Внимательно рассмотрим построение левого порождения по дереву разбора в доказательстве [[#t1|теоремы]]. В любом случае, если у двух деревьев разбора впервые появляется узел, в котором применяются различные продукции, левые порождения, которые строятся, также используют разные продукции и, следовательно, являются различными.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \Longleftarrow &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;
|definition=&lt;br /&gt;
Грамматика называется '''однозначной''' (англ. ''unambiguous grammar''), если у каждого слова имеется не более одного дерева разбора в этой грамматике.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|id=lemma-&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; {{---}} однозначная грамматика. Тогда &amp;lt;tex&amp;gt;\forall \omega \in \mathbb{L}(\Gamma)&amp;lt;/tex&amp;gt; существует ровно один левосторонний (правосторонний) вывод.&lt;br /&gt;
|proof=&lt;br /&gt;
Очевидно, что по дереву разбора однозначно восстанавливается левосторонний(правосторонний) вывод. Поскольку каждое слово из языка выводится только одним деревом разбора, то существует только один левосторонний(правосторонний) вывод этого слова.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|statement=Грамматика из примера не является однозначной.&lt;br /&gt;
|proof=Выше уже было построено дерево разбора для слова &amp;lt;tex&amp;gt;&amp;quot;(()(()))()&amp;quot;&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Построим еще одно дерево разбора для данного слова.&lt;br /&gt;
&lt;br /&gt;
Например, оно будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:BracketsSequenceParsingTree2.png]]&lt;br /&gt;
Таким образом, существует слово, у которого есть более одного дерева разбора в данной грамматике &amp;lt;tex&amp;gt;\Rightarrow&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;
:&amp;lt;tex&amp;gt;&amp;quot;(&amp;quot;&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;&amp;quot;)&amp;quot;&amp;lt;/tex&amp;gt; {{---}} терминальные символы&lt;br /&gt;
:&amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; {{---}} стартовый нетерминал&lt;br /&gt;
&lt;br /&gt;
Правила:&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow (S)S&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;S\rightarrow \varepsilon&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Покажем, что эта грамматика однозначна.&lt;br /&gt;
Для этого, используя индукцию, докажем, что для любого слова &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt;, являющегося правильной скобочной последовательностью, в данной грамматике существует только одно дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''База:''' Если &amp;lt;tex&amp;gt;\omega=\varepsilon&amp;lt;/tex&amp;gt;, то оно выводится только по второму правилу &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; для него существует единственное дерево разбора.&lt;br /&gt;
&lt;br /&gt;
'''Индукционный переход:''' Пусть &amp;lt;tex&amp;gt;\left\vert \omega \right\vert=n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\forall \upsilon&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt;\left\vert \upsilon \right\vert &amp;lt; n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\upsilon&amp;lt;/tex&amp;gt; {{---}} правильная скобочная последовательность, у которой &amp;lt;tex&amp;gt;\exists!&amp;lt;/tex&amp;gt; дерево разбора. &lt;br /&gt;
&lt;br /&gt;
:Найдем в слове &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; минимальный индекс &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; такой, что слово &amp;lt;tex&amp;gt;\omega[0..i]&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью. Так как &amp;lt;tex&amp;gt;i \neq 0&amp;lt;/tex&amp;gt; минимальный, то &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)&amp;lt;/tex&amp;gt;. Из того, что &amp;lt;tex&amp;gt;\omega&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и  &amp;lt;tex&amp;gt;\beta=\omega[i+1..n-1]&amp;lt;/tex&amp;gt; {{---}} правильные скобочные последовательности, при этом &amp;lt;tex&amp;gt;\left\vert \alpha \right\vert&amp;lt;n&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\left\vert \beta \right\vert&amp;lt;n \Rightarrow&amp;lt;/tex&amp;gt; по индукционному предположению предположению у &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; существуют единственные деревья разбора.&lt;br /&gt;
&lt;br /&gt;
:Если мы покажем, что из части &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; первого правила можно вывести только слово &amp;lt;tex&amp;gt;(\alpha)&amp;lt;/tex&amp;gt;, то утверждение будет доказано (так как из первой части первого правила выводится &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt;, а из второй только &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; и для каждого из них по предположению существуют единственные деревья разбора).&lt;br /&gt;
&lt;br /&gt;
:Пусть из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j]=(\gamma)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;lt; i&amp;lt;/tex&amp;gt;, при этом &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt; является правильной скобочной последовательностью, но тогда как минимальный индекс мы должны были выбрать &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;, а не &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; {{---}} противоречие. &lt;br /&gt;
&lt;br /&gt;
:Аналогично из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; не может быть выведена часть слова &amp;lt;tex&amp;gt;\omega[0..j]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;j &amp;gt; i&amp;lt;/tex&amp;gt;, потому что тогда &amp;lt;tex&amp;gt;\omega[0..i]=(\alpha)&amp;lt;/tex&amp;gt; не будет правильной скобочной последовательностью, так как в позиции &amp;lt;tex&amp;gt;i-1&amp;lt;/tex&amp;gt; баланс скобок будет отрицательный.&lt;br /&gt;
&lt;br /&gt;
:Значит, из &amp;lt;tex&amp;gt;(S)&amp;lt;/tex&amp;gt; была выведена часть слова &amp;lt;tex&amp;gt;\omega[0..i] \Rightarrow \omega&amp;lt;/tex&amp;gt; имеет единственное дерево разбора &amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt; данная грамматика однозначная.&lt;br /&gt;
&lt;br /&gt;
Таким образом, для языка правильных скобочных последовательностей мы привели пример как однозначной, так и неоднозначной грамматики.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Однако, есть КС-языки, для которых не существует однозначных КС-грамматик. Такие языки и грамматики их порождающие называют '''существенно неоднозначными'''.&lt;br /&gt;
{{main|Существенно неоднозначные языки}}&lt;br /&gt;
&lt;br /&gt;
==См. также==&lt;br /&gt;
* [[Формальные грамматики]]&lt;br /&gt;
* [[Иерархия Хомского формальных грамматик]]&lt;br /&gt;
* [[Замкнутость КС-языков относительно различных операций]]&lt;br /&gt;
* [[Существенно неоднозначные языки]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
* [[wikipedia:Context-free grammar | Wikipedia {{---}} Context-free grammar]]&lt;br /&gt;
* [[wikipedia:ru:Контекстно-свободная грамматика | Википедия {{---}} Контекстно-свободная грамматика]]&lt;br /&gt;
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' {{---}} '''Введение в теорию автоматов, языков и вычислений''', 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;br /&gt;
[[Категория: Базовые понятия о грамматиках]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71204</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71204"/>
				<updated>2019-05-14T14:34:32Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Свойства */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;quad&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(...) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \}&amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1..|Q| :\ a[i] = 1..|Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) \ &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u = q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y \ &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x| \ (\mathrm{mod} \ 2 )&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71203</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71203"/>
				<updated>2019-05-14T14:30:08Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Язык слов четной длины */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;quad&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(...) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \}&amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1..|Q| :\ a[i] = 1..|Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u &amp;lt;/tex&amp;gt; равно &amp;lt;tex&amp;gt; q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x| \ (\mathrm{mod} \ 2 )&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71202</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71202"/>
				<updated>2019-05-14T14:27:31Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)* */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;quad&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(...) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \}&amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1..|Q| :\ a[i] = 1..|Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u &amp;lt;/tex&amp;gt; равно &amp;lt;tex&amp;gt; q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x|&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(mod&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]] \ &amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]] \ &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]] \ &amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71201</id>
		<title>Контексты и синтаксические моноиды</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%8B_%D0%B8_%D1%81%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BC%D0%BE%D0%BD%D0%BE%D0%B8%D0%B4%D1%8B&amp;diff=71201"/>
				<updated>2019-05-14T14:19:30Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Правый контекст */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Контексты ==&lt;br /&gt;
=== Правый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Правым контекстом''' (англ. ''right context'') &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid yz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^R(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его правых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
[[Файл:Автомат и правые контексты 1.png|315px|thumb|right|Автомат на правых контекстах. Легенда: &amp;lt;font color=orchit&amp;gt;начальное&amp;lt;/font&amp;gt; / &amp;lt;font color=orange&amp;gt;промежуточное&amp;lt;/font&amp;gt; / &amp;lt;font color=red&amp;gt;дьявольское&amp;lt;/font&amp;gt; / &amp;lt;font color=yelloworange&amp;gt;терминальное&amp;lt;/font&amp;gt; состояния; &amp;lt;font color=grey&amp;gt;контекст&amp;lt;/font&amp;gt;]]&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;quad&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть множество правых контекстов языка конечно. Построим распознающий его автомат. Состояния автомата будут соответствовать различным правым контекстам. Таким образом, каждая вершина автомата соответствует множеству допустимых «продолжений» считанного на данный момент слова. Переход по некоторому символу из одного состояния в другое осуществляется, если контекст, соответствующий первому состоянию, содержит все элементы, которые получаются приписыванием этого символа в начало элементам контекста, соответствующего второму. Вершина, соответствующая контексту пустого слова, является стартовой  &amp;lt;tex&amp;gt;\left( C_L^R(\varepsilon) = L \right)&amp;lt;/tex&amp;gt;. Вершины, контексты которых содержат &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;, должны быть допускающими.&lt;br /&gt;
&lt;br /&gt;
:Покажем что полученный автомат допускает в точности указанный язык. Выпишем свойства, которые мы стремились удовлетворить при построении:&lt;br /&gt;
:: 1. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(xc) \quad \leftrightarrow \quad \langle u,c \rangle \vdash \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:: 2. &amp;lt;tex&amp;gt; s \quad \leftrightarrow \quad C_L^R(\varepsilon), &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} стартовое состояние.&lt;br /&gt;
:: 3. &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(\omega) \quad \Leftrightarrow \quad v \in T \quad ( v \quad \leftrightarrow \quad C_L^R(\omega) ) &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Из 1 следует&lt;br /&gt;
:: 1*. &amp;lt;tex&amp;gt; u \quad \leftrightarrow \quad C_L^R(x) ,\ v \quad \leftrightarrow \quad C_L^R(x \omega) \quad \Leftrightarrow \quad \langle u,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Положив &amp;lt;tex&amp;gt; s = u &amp;lt;/tex&amp;gt; и учтя 2, получим&lt;br /&gt;
:: &amp;lt;tex&amp;gt; v \quad \leftrightarrow \quad C_L^R(\omega) \quad \Leftrightarrow \quad \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;&lt;br /&gt;
:Теперь зафиксируем за состоянием &amp;lt;tex&amp;gt; v &amp;lt;/tex&amp;gt; контекст &amp;lt;tex&amp;gt; C_L^R(\omega) &amp;lt;/tex&amp;gt;. Тогда левая часть 3 равносильна &amp;lt;tex&amp;gt; \omega \in L &amp;lt;/tex&amp;gt;, а правая, с учётом &amp;lt;tex&amp;gt; \langle s,\omega \rangle \vdash^* \langle v, \varepsilon \rangle &amp;lt;/tex&amp;gt;, означает, что автомат допускает &amp;lt;tex&amp;gt; \omega &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. &lt;br /&gt;
:Рассмотрим произвольное слово &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Положим &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; {{---}} такое состояние &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, в которое можно перейти из начального по слову &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;C_L^R(y)&amp;lt;/tex&amp;gt; совпадает с множеством слов, по которым из состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; можно попасть в допускающее. &lt;br /&gt;
:Причем если по какому-то слову &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; тоже можно перейти из начального состояния в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;. Наоборот, если &amp;lt;tex&amp;gt;C_L^R(y) = C_L^R(z)&amp;lt;/tex&amp;gt;, то состояния, в которые можно перейти по словам &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;, эквивалентны. Таким образом, можно установить взаимное соответствие между правыми контекстами и классами эквивалентности вершин автомата, которых конечное число.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Примеры === &lt;br /&gt;
Здесь будем понимать под &amp;lt;tex&amp;gt; C_L^R(X) = Y &amp;lt;/tex&amp;gt; не стандартное отображение множества в множество, а &amp;lt;tex&amp;gt; \forall x \in X :\ C_L^R(x) = Y &amp;lt;/tex&amp;gt;. Рассмотрим правые контексты следующих языков:&lt;br /&gt;
[[Файл:Автомат и правые контексты 2.png|500px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;]] &lt;br /&gt;
==== Пример 1 ====&lt;br /&gt;
&amp;lt;tex&amp;gt; \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возникающие контексты:&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(\varepsilon) = \{ 001, 111, 100 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0) = \{ 01 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(00) = \{ 1 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(001) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(1) = \{ 11, 00 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;f) C_L^R(10) = \{ 0 \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;g) C_L^R(100) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;h) C_L^R(11) = \{ 1 \} &amp;lt;/tex&amp;gt;  &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;j) C_L^R(111) = \{ \varepsilon \} &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;k) C_L^R(X) = \varnothing &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt; X &amp;lt;/tex&amp;gt; {{---}} множество остальных аргументов. &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Начальное состояние {{---}} &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; . Допускающие состояния: &amp;lt;tex&amp;gt;d, g, j&amp;lt;/tex&amp;gt; (в них &amp;lt;tex&amp;gt; \varepsilon \in C_L^R(...) &amp;lt;/tex&amp;gt;). Состояние &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные_конечные_автоматы#допускает|дьявольское]]. Всего 8 состояний (именно столько имеется различных контекстов).&lt;br /&gt;
:[[Файл:Автомат и правые контексты 3.png|350px|thumb|right|Автомат к языку &amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
==== Пример 2  ====&lt;br /&gt;
&amp;lt;tex&amp;gt; 0^*11 &amp;lt;/tex&amp;gt;&lt;br /&gt;
: Возможные контексты (аргументы упорядочены в лексикографическом порядке):&lt;br /&gt;
:: &amp;lt;tex&amp;gt;a) C_L^R(0^*) = 0^*11 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;b) C_L^R(0^*1) = 1 &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;c) C_L^R(0^*10(0|1)^*) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;d) C_L^R(0^*11) = \varepsilon &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
:: &amp;lt;tex&amp;gt;e) C_L^R(0^*11(0|1)^+) = \varnothing &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
: Итого 4 состояния; начальное состояние &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt;, допускающее &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, состояние &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt;&amp;amp;&amp;lt;tex&amp;gt;e&amp;lt;/tex&amp;gt; {{---}} дьявольское.&lt;br /&gt;
&lt;br /&gt;
=== Левый контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Левым контекстом''' (англ. ''left context'') &amp;lt;tex&amp;gt;C_L^L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{z \mid zy \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L^L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его левых контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
Поскольку множество регулярных языков замкнуто относительно операции разворота, то из того, что &amp;lt;tex&amp;gt;C_L^L(y) = \overleftarrow{C_{\overleftarrow{L}}^R(\overleftarrow{y})}&amp;lt;/tex&amp;gt; и аналогичного утверждения о правых контекстах получаем требуемое.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Двухсторонний контекст ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двухсторонним контекстом''' (англ. ''two-sided context'') &amp;lt;tex&amp;gt;C_L(y)&amp;lt;/tex&amp;gt; слова &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; в языке &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество &amp;lt;tex&amp;gt;\{\langle x,z\rangle \mid xyz \in L\}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
'''Любопытное замечание:''' &amp;lt;tex&amp;gt;C_L(\varepsilon)&amp;lt;/tex&amp;gt; состоит из всех пар строк, которые при конкатенации дают слово из языка. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для доказательства последующих утверждений будем использовать бинарное отображение &amp;lt;tex&amp;gt; (\cdot) :\ Q \times \Sigma^* \rightarrow Q &amp;lt;/tex&amp;gt; со свойством &amp;lt;tex&amp;gt; q \cdot \omega = q' \Leftrightarrow \langle q,\omega \rangle \vdash^* \langle q', \varepsilon \rangle&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно.&lt;br /&gt;
|proof=&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Заметим, что &amp;lt;tex&amp;gt; \{ z \mid \langle \varepsilon, z \rangle \in C_L(y) \} = C_L^R(y) &amp;lt;/tex&amp;gt;. Следовательно, если множество двухсторонних контекстов языка конечно, то конечно и множество его правых контекстов, а это значит, что язык регулярный.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный. В таком случае существует детерминированный автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt;, распознающий его. Понятно, что для любого слова &amp;lt;tex&amp;gt; xyz &amp;lt;/tex&amp;gt;, допускаемого автоматом, существуют &amp;lt;tex&amp;gt; u ,\ v &amp;lt;/tex&amp;gt; такие, что &amp;lt;tex&amp;gt; s \cdot x = u ,\ u \cdot y = v ,\ v \cdot z \in T &amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние). &lt;br /&gt;
:Тогда справедливо равенство &amp;lt;tex&amp;gt; C_L(y) = \bigcup\limits_{(u, v) :\ u \cdot y = v} \{ \langle x, z \rangle \mid s \cdot x = u ,\ v \cdot z \in T \} &amp;lt;/tex&amp;gt;. Учитывая &amp;lt;tex&amp;gt; | \{ (u, v) \mid u,v \in Q \} | = |Q|^2 &amp;lt;/tex&amp;gt;, получаем &amp;lt;tex&amp;gt; | \{ C_L(y) \mid y \in \Sigma^* \} | \leqslant 2^{|Q|^2} &amp;lt;/tex&amp;gt;, то есть множество контекстов конечно.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Синтаксический моноид ==&lt;br /&gt;
=== Определения ===&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Синтаксическим моноидом''' (англ. ''syntactic monoid'') &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется множество, состоящее из его классов эквивалентности &amp;lt;tex&amp;gt;[[x]] = \{ y \in \Sigma^* \mid C_L(x) = C_L(y) \}&amp;lt;/tex&amp;gt;, с введённым на нём операцией конкатенации &amp;lt;tex&amp;gt;\circ&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;[[x]]\circ[[y]] = [[xy]] \ \ &amp;lt;/tex&amp;gt;. Нейтральным элементом в нём является &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Групповой язык''' (англ. ''group language'') {{---}} это язык, синтаксический моноид которого является [[Группа|группой]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Свойства ===&lt;br /&gt;
Синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; определён для любого &amp;lt;tex&amp;gt;L \in \Sigma^*&amp;lt;/tex&amp;gt;, однако некоторые свойства языка можно определить по структуре его синтаксического моноида. Размер синтаксического моноида является мерой структурной сложности языка.&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
|proof=&lt;br /&gt;
Размер синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; равен количеству его различных двухсторонних контекстов &amp;lt;tex&amp;gt;C_L&amp;lt;/tex&amp;gt;. Применяя лемму, доказанную ранее, получаем:&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} регулярный &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; множество &amp;lt;tex&amp;gt;\{C_L(y) \mid y \in \Sigma^*\}&amp;lt;/tex&amp;gt; его двухсторонних контекстов конечно &amp;lt;tex&amp;gt;\Leftrightarrow&amp;lt;/tex&amp;gt; его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; конечен.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Лемма&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; распознается [[Детерминированные конечные автоматы|ДКА]] &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta  \rangle&amp;lt;/tex&amp;gt;. Тогда размер его синтаксического моноида &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; не превосходит &amp;lt;tex&amp;gt;|Q|^{|Q|}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
|proof=&lt;br /&gt;
Введём следующее отношение эквивалентности на строках:&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;tex&amp;gt;x \cong y \Leftrightarrow \forall q \in Q: q \cdot x = q \cdot y&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;Оценим количество классов, на которые отношение &amp;lt;tex&amp;gt;\cong&amp;lt;/tex&amp;gt; разбивает язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Для этого пронумеруем состояния, и каждому слову &amp;lt;tex&amp;gt;  \omega&amp;lt;/tex&amp;gt; сопоставим вектор &amp;lt;tex&amp;gt; a_{\omega} \in Q^{|Q|} &amp;lt;/tex&amp;gt; такой, что &amp;lt;tex&amp;gt; a_{\omega}[i] = q_j \Leftrightarrow q_i \cdot \omega = q_j &amp;lt;/tex&amp;gt;. Количество различных таких векторов {{---}} &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;&amp;lt;!--- (поскольку &amp;lt;tex&amp;gt; \forall i = 1..|Q| :\ a[i] = 1..|Q| &amp;lt;/tex&amp;gt;) ---&amp;gt;. В то же время неэквивалентным словам соответствуют разные &amp;lt;tex&amp;gt; a &amp;lt;/tex&amp;gt;, тогда количество классов эквивалентности также ограничено &amp;lt;tex&amp;gt; {|Q|}^{|Q|} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Остаётся показать, что существует взаимно-однозначное соответствие между нашими классами эквивалентности и синтаксическими моноидами. Смотрим:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; x \cong y &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) = ((s \cdot u) \cdot x) \cdot v = ((s \cdot u) \cdot y) \cdot v = s \cdot (uyv) &amp;lt;/tex&amp;gt; (пусть &amp;lt;tex&amp;gt; s \cdot u &amp;lt;/tex&amp;gt; равно &amp;lt;tex&amp;gt; q &amp;lt;/tex&amp;gt; из определения &amp;lt;tex&amp;gt; \cong &amp;lt;/tex&amp;gt;, тогда &amp;lt;tex&amp;gt; (s \cdot u) \cdot x = q \cdot x = q' = q \cdot y = (s \cdot u) \cdot y &amp;lt;/tex&amp;gt;)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; s \cdot (uxv) \in T \Leftrightarrow s \cdot (uyv) \in T &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; uxv \in L \Leftrightarrow uyv \in L &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; \Leftrightarrow &amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;tex&amp;gt; [[x]] = [[y]] &amp;lt;/tex&amp;gt;&lt;br /&gt;
(&amp;lt;tex&amp;gt; s &amp;lt;/tex&amp;gt; {{---}} начальное состояние).&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} [[Детерминированные конечные автоматы|ДКА]]. Каждое слово &amp;lt;tex&amp;gt;\omega \in \Sigma^*&amp;lt;/tex&amp;gt; порождает отображение &amp;lt;tex&amp;gt;f_\omega : Q \rightarrow Q&amp;lt;/tex&amp;gt;, определённое следующим образом: &amp;lt;tex&amp;gt;f_\omega(q) = q \cdot \omega&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Моноидом переходов''' (англ. ''transition monoid'') &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; называется множество отображений &amp;lt;tex&amp;gt;f_\omega&amp;lt;/tex&amp;gt; с операцией композиции. &amp;lt;tex&amp;gt;f_x \cdot f_y = f_{xy}&amp;lt;/tex&amp;gt;. Нейтральным элементом в данном моноиде является отображение &amp;lt;tex&amp;gt;f_\varepsilon&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;\mathcal{A} = \langle \Sigma,Q,s,T,\delta \rangle&amp;lt;/tex&amp;gt; {{---}} минимальный [[Детерминированные конечные автоматы|ДКА]], задающий язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;M(\mathcal{A})&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; изоморфны.&lt;br /&gt;
|proof=&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;f_x = f_y \quad \Leftrightarrow \quad [[x]] = [[y]]&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Rightarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Данный факт был показан в доказательстве предыдущей леммы, он не требует минимальности автомата.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\Leftarrow&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Пусть &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \in Q&amp;lt;/tex&amp;gt;. Тогда &amp;lt;tex&amp;gt;q = s \cdot u&amp;lt;/tex&amp;gt; для некоторого слова &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;q_1 = f_x(q) = s \cdot ux&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2 = f_y(q) = s \cdot uy&amp;lt;/tex&amp;gt;. Поскольку &amp;lt;tex&amp;gt;[[x]] = [[y]]&amp;lt;/tex&amp;gt;, справедливо &amp;lt;tex&amp;gt;uxv \in L \quad \Leftrightarrow \quad uyv \in L&amp;lt;/tex&amp;gt;. Следовательно, &amp;lt;tex&amp;gt;q_1 \cdot v \in T \Leftrightarrow q_2 \cdot v \in T&amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt;q_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q_2&amp;lt;/tex&amp;gt; эквивалентны. Значит, &amp;lt;tex&amp;gt;q_1 = q_2&amp;lt;/tex&amp;gt;, так как автомат &amp;lt;tex&amp;gt;\mathcal{A}&amp;lt;/tex&amp;gt; минимален. То есть, &amp;lt;tex&amp;gt;f_x = f_y&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;L = \{\omega \mid |\omega| \bmod 2 = 0 \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\{\langle u, v \rangle \mid uxv \in L\}&amp;lt;/tex&amp;gt; {{---}} это множество всех пар &amp;lt;tex&amp;gt;\langle u,v \rangle&amp;lt;/tex&amp;gt;, таких что &amp;lt;tex&amp;gt;|u| + |v| = |x|&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;(mod&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;2)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Значит, &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; состоит из двух элементов: множества слов чётной длины и множества слов нечётной длины. Нейтральным элементом в данном моноиде является множество слов чётной длины. &lt;br /&gt;
&lt;br /&gt;
Оба элемента являются обратными самим себе, значит &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; является группой, следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; {{---}} групповой язык.&lt;br /&gt;
&lt;br /&gt;
====Язык над алфавитом из 0 и 1, заданный регулярным выражением 1(0|1)*====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt; задан регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. Его синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; содержит три элемента:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;a)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[\varepsilon]]&amp;lt;/tex&amp;gt; {{---}} нейтральный элемент. Включает в себя только пустую строку.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;b)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[0]]&amp;lt;/tex&amp;gt; содержит все строки, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;0(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[0]]: C_L(x) = \{\langle u, v \rangle \mid u \in L, v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;c)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt;[[1]]&amp;lt;/tex&amp;gt; содержит все строки, принадлежащие языку, то есть, распознаваемые регулярным выражением &amp;lt;tex&amp;gt;1(0|1)^*&amp;lt;/tex&amp;gt;. &amp;lt;tex&amp;gt;\forall x \in [[1]]: C_L(x) = C_L(\varepsilon) \cup \{\langle \varepsilon, v \rangle \mid v \in \Sigma^* \}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заметим, что &amp;lt;tex&amp;gt;[[0]]&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;[[1]]&amp;lt;/tex&amp;gt; не имеют обратных элементов в данном моноиде, так как нейтральный элемент содержит только пустую строку, а её невозможно получить из непустой с помощью конкатенации. Следовательно &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; не является групповым языком.&lt;br /&gt;
&lt;br /&gt;
====Язык из последовательных N нулей и N единиц====&lt;br /&gt;
Язык &amp;lt;tex&amp;gt;L = 0^n1^n&amp;lt;/tex&amp;gt; задан над алфавитом &amp;lt;tex&amp;gt;\Sigma = \{0,1\}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Балансом слова &amp;lt;tex&amp;gt;|\omega|_b&amp;lt;/tex&amp;gt; назовём число, равное разности между количеством нулей и единиц, встречающихся в данном слове. Если слово &amp;lt;tex&amp;gt;\omega = uxv&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;|x|_b = -(|u|_b + |v|_b)&amp;lt;/tex&amp;gt;. Но &amp;lt;tex&amp;gt;|x|_b&amp;lt;/tex&amp;gt; может принимать любое целое значение, при том, что &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; имеет непустой двухсторонний контекст. &lt;br /&gt;
&lt;br /&gt;
Значит, синтаксический моноид &amp;lt;tex&amp;gt;M(L)&amp;lt;/tex&amp;gt; имеет бесконечное количество элементов, что значит, что данный язык не является регулярным.&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* ''Howard Straubing'' Finite automata, formal logic, and circuit complexity, 1994. ISBN 3-7643-3719-2. {{---}} C. 53.&lt;br /&gt;
* ''James A. Anderson'' Automata theory with modern applications, 2006. ISBN 0-521-61324-8. {{---}} С. 72.&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Syntactic_monoid Wikipedia {{---}} Syntactic monoid]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B8%D0%BD%D1%8B&amp;diff=71200</id>
		<title>Математическое ожидание случайной величины</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B8%D0%BD%D1%8B&amp;diff=71200"/>
				<updated>2019-05-14T13:42:11Z</updated>
		
		<summary type="html">&lt;p&gt;Gaporf: /* Математическое ожидание случайной величины */ исправил умножения&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Математическое ожидание случайной величины==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition='''Математическое ожидание''' (англ. ''mean value'') &amp;lt;tex&amp;gt; \left( E\xi \right) &amp;lt;/tex&amp;gt; {{---}} мера среднего значения случайной величины, равная &amp;lt;tex&amp;gt;E\xi = \sum \xi(\omega) \cdot p(\omega)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Теорема &lt;br /&gt;
|statement= &amp;lt;tex&amp;gt;\sum\limits_{\omega\epsilon\Omega} \xi(\omega) \cdot p(\omega) = \sum\limits_a a \cdot p(\xi = a)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof= &amp;lt;tex&amp;gt;\sum\limits_a  \sum\limits_{\omega|\xi(\omega) = a} \xi(\omega) \cdot p(\omega) = \sum\limits_a a \cdot \sum\limits_{\omega|\xi(\omega)=a}p(\omega) = \sum\limits_a a \cdot p(\xi = a)&amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Пример===&lt;br /&gt;
Пусть наше вероятностное пространство {{---}} «честная кость»&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; \xi(i) = i &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt; E\xi = 1\cdot \dfrac{1}{6}+2\cdot \dfrac{1}{6} \dots +6\cdot \dfrac{1}{6} = 3.5&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;E(a) = a&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;a \in R&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;0 \leqslant \xi \leqslant \eta&amp;lt;/tex&amp;gt;, и &amp;lt;tex&amp;gt;\eta&amp;lt;/tex&amp;gt; {{---}} случайная величина с конечным математическим ожиданием, то математическое ожидание случайной величины &amp;lt;tex&amp;gt;\xi&amp;lt;/tex&amp;gt; также конечно, и &amp;lt;tex&amp;gt;0 \leqslant E(\xi) \leqslant E(\eta)&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;\xi = \eta&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;E(\xi) = E(\eta)&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;\xi&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\eta&amp;lt;/tex&amp;gt; {{---}} две независимые случайные величины, то &amp;lt;tex&amp;gt;E(\xi \cdot \eta) = E(\xi) \cdot E(\eta)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Согласно определению математического ожидания, &amp;lt;tex&amp;gt;E(\xi \cdot \eta) = \sum\limits_{\omega} \xi(\omega)\cdot\eta(\omega)\cdot p(\omega)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
По теореме, &amp;lt;tex&amp;gt;\sum\limits_{\omega} \xi(\omega) \cdot p(\omega) = \sum\limits_a a \cdot p(\xi = a)&amp;lt;/tex&amp;gt;. Поэтому &amp;lt;tex&amp;gt;\sum\limits_{\omega} \xi(\omega)\cdot\eta(\omega)\cdot p(\omega)=\sum\limits_a a \cdot \sum\limits_b b \cdot p(\xi = a,\eta = b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Поскольку &amp;lt;tex&amp;gt;\xi&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\eta&amp;lt;/tex&amp;gt; {{---}} независимые величины, &amp;lt;tex&amp;gt;p(\xi = a,\eta = b) = p(\xi = a)\cdot p(\eta = b)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда получаем, что &amp;lt;tex&amp;gt;\sum\limits_a a \cdot \sum\limits_b b \cdot p(\xi = a,\eta = b) = \sum\limits_a a \cdot \sum\limits_b b \cdot p(\xi = a)\cdot p(\eta = b)=\sum\limits_a a\cdot p(\xi=a) \cdot \sum\limits_b b \cdot p(\eta = b)=E(\xi) \cdot E(\eta)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Линейность математического ожидания== &lt;br /&gt;
&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Математическое ожидание &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; линейно. &lt;br /&gt;
|proof=&lt;br /&gt;
# &amp;lt;tex&amp;gt;E(\xi + \eta) = {\sum_w \limits}(\xi(w) + \eta(w)) \cdot p(w) = \sum\limits_w \xi(w) \cdot p(w) + {\sum_w \limits}\eta(w) \cdot p(w) = E(\xi) + E(\eta) &amp;lt;/tex&amp;gt;&lt;br /&gt;
# &amp;lt;tex&amp;gt;E(\alpha\xi) = {\sum_w \limits}\alpha\xi(w) = \alpha{\sum_w \limits}\xi(w) = \alpha E(\xi)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha&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;
===Пример 1===&lt;br /&gt;
Найти математическое ожидание суммы цифр на случайной кости домино.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; \xi &amp;lt;/tex&amp;gt; {{---}} случайная величина, которая возвращает первое число на кости домино, а &amp;lt;tex&amp;gt; \eta &amp;lt;/tex&amp;gt; {{---}} возвращает второе число.&lt;br /&gt;
Очевидно, что &amp;lt;tex&amp;gt; E(\xi)= E(\eta)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Посчитаем &amp;lt;tex&amp;gt;E(\xi)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;E(\xi)={\sum_{i=0}^6 \limits}i \cdot p(\xi=i)={\sum_{i=0}^6 \limits}i \cdot \dfrac{1}{7}=3&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получаем ответ&lt;br /&gt;
&amp;lt;tex&amp;gt;E(\xi+\eta)=2E(\xi)=6&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Пример 2===&lt;br /&gt;
Пусть у нас есть строка &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. Строка &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt; генерируется случайным образом так, что два подряд идущих символа неравны. Какое математическое ожидание количества совпавших символов? Считать что размер алфавита равен &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;, а длина строки &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим случайные величины &amp;lt;tex&amp;gt;\xi^i&amp;lt;/tex&amp;gt; {{---}} совпал ли у строк  &amp;lt;tex&amp;gt; i &amp;lt;/tex&amp;gt;-тый символ. &lt;br /&gt;
Найдем математическое ожидание этой величины&lt;br /&gt;
&amp;lt;tex&amp;gt;E(\xi^i)=0 \cdot p(\xi^i=0)+1 \cdot p(\xi^i=1)=p(s[i]=t[i]) \ &amp;lt;/tex&amp;gt; где &amp;lt;tex&amp;gt;s[i],t[i]&amp;lt;/tex&amp;gt; {{---}} &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-тые символы соответствующих строк.&lt;br /&gt;
Так как появление каждого символа равновероятно, то &amp;lt;tex&amp;gt;p(s[i]=t[i])=\dfrac{1}{k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итоговый результат: &amp;lt;tex&amp;gt;E(\xi)={\sum_{i=1}^n \limits}E(\xi^i)=\dfrac{n}{k} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Пример 3===&lt;br /&gt;
Найти математическое ожидание количества инверсий на всех перестановках чисел от &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; \xi &amp;lt;/tex&amp;gt; {{---}} случайная величина, которая возвращает количество инверсий в перестановке.&lt;br /&gt;
&lt;br /&gt;
Очевидно, что вероятность любой перестановки равна &amp;lt;tex&amp;gt; \dfrac{1}{n!} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt; E\xi = \dfrac{1}{n!}\cdot{\sum_{i=1}^{n!} \limits}{\xi^i} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt; P = (p_1,p_2,\dots,p_n)&amp;lt;/tex&amp;gt; является перестановкой чисел &amp;lt;tex&amp;gt; 1, 2,\dots, n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;tex&amp;gt; A = (p_n, p_{n-1}, \dots, p_1) &amp;lt;/tex&amp;gt; является перевёрнутой перестановкой &amp;lt;tex&amp;gt; P &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Докажем, что количество инверсий в этих двух перестановках равно &amp;lt;tex&amp;gt; \dfrac{n\cdot(n-1)}{2} &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим все пары &amp;lt;tex&amp;gt; 1 \leqslant i &amp;lt; j \leqslant n &amp;lt;/tex&amp;gt;, таких пар всего &amp;lt;tex&amp;gt; \dfrac{n\cdot(n-1)}{2} &amp;lt;/tex&amp;gt;. Тогда пара этих чисел образуют инверсию или в &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, или в &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; стоит раньше &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; в перестановке &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; будет стоять после &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и уже не будет давать инверсию. Аналогично, если &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; стоит раньше &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; в перестановке &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всего таких пар из перестановки и перевернутой перестановки будет &amp;lt;tex&amp;gt; \dfrac{n!}{2} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Итого: &amp;lt;tex&amp;gt; E\xi = \dfrac{1}{n!}\cdot\dfrac{n\cdot(n-1)}{2}\cdot\dfrac{n!}{2} = \dfrac{n\cdot(n-1)}{4} &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;\xi&amp;lt;/tex&amp;gt; имеет распределение Бернулли, если она принимает всего два значения: &amp;lt;tex&amp;gt;1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; с вероятностями &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q \equiv 1-p&amp;lt;/tex&amp;gt; соответственно. Таким образом:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\xi = 1) = p&amp;lt;/tex&amp;gt;&lt;br /&gt;
:&amp;lt;tex&amp;gt;P(\xi = 0) = q&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда несложно догадаться, чему будет равно математическое ожидание:&lt;br /&gt;
:&amp;lt;tex&amp;gt;E(\xi) = 1 \cdot p + 0 \cdot q = p&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;N&amp;lt;/tex&amp;gt; элементов. Предположим, что &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt; из них обладают нужным нам свойством. Оставшиеся &amp;lt;tex&amp;gt;N-D&amp;lt;/tex&amp;gt; этим свойством не обладают. Случайным образом из общей совокупности выбирается группа из &amp;lt;tex&amp;gt;n&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; имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;tex&amp;gt;P_\xi(k) \equiv P(\xi = k) = \dfrac{C_D^k \cdot C_{N-D}^{n-k}}{C_N^n}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
где &amp;lt;tex&amp;gt;C_n^k \equiv \dfrac{n!}{k! \cdot (n-k)!}&amp;lt;/tex&amp;gt; обозначает биномиальный коэффициент.&lt;br /&gt;
&lt;br /&gt;
Гипергеометрическое распределение обозначается &amp;lt;tex&amp;gt; \xi \sim \mathrm{HG}(D,N,n)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Формула математического ожидания для гипергеометрического распределения имеет вид:&lt;br /&gt;
:&amp;lt;tex&amp;gt;E(\xi) = \dfrac{n \cdot D}{N}&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;
* [http://ru.wikipedia.org/wiki/Математическое_ожидание Wikipedia {{---}} Математическое ожидание]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Гипергеометрическое_распределение Wikipedia {{---}} Гипергеометрическое распределение]&lt;br /&gt;
* [https://ru.wikipedia.org/wiki/Распределение_Бернулли Wikipedia {{---}} Распределение Бернулли]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Теория вероятности]]&lt;/div&gt;</summary>
		<author><name>Gaporf</name></author>	</entry>

	</feed>