<?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=5.167.251.85&amp;*</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=5.167.251.85&amp;*"/>
		<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/5.167.251.85"/>
		<updated>2026-05-20T01:56:10Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<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_%D0%B4%D0%BB%D0%B8%D0%BD%D0%BD%D1%8B%D1%85_%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=36198</id>
		<title>Удаление длинных правил из грамматики</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_%D0%B4%D0%BB%D0%B8%D0%BD%D0%BD%D1%8B%D1%85_%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=36198"/>
				<updated>2014-02-24T11:01:32Z</updated>
		
		<summary type="html">&lt;p&gt;5.167.251.85: длинны -&amp;gt; длины&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; {{---}} [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]].&lt;br /&gt;
Правило &amp;lt;tex&amp;gt;A \rightarrow \beta &amp;lt;/tex&amp;gt; называется '''длинным''', если &amp;lt;tex&amp;gt;|\beta| &amp;gt; 2&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; {{---}} [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]], содержащая длинные правила. Требуется построить эквивалентную грамматику &amp;lt;tex&amp;gt;\Gamma'&amp;lt;/tex&amp;gt;, не содержащую длинных правил. &amp;lt;br&amp;gt;&lt;br /&gt;
Задача удаления длинных правил из грамматики возникает при попытке её приведения к [[нормальная форма Хомского|нормальной форме Хомского]].&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
С каждым длинным правилом &amp;lt;tex&amp;gt;A \rightarrow a_1 a_2 \ldots a_k&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;k &amp;gt; 2&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;a_i \in \Sigma \cup N&amp;lt;/tex&amp;gt; проделаем следующее: &amp;lt;br&amp;gt;&lt;br /&gt;
#Добавим в грамматику &amp;lt;tex&amp;gt;k-2&amp;lt;/tex&amp;gt; новых нетерминала &amp;lt;tex&amp;gt;B_1, B_2, \ldots B_{k-2}&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
#Добавим в грамматику &amp;lt;tex&amp;gt;k-1&amp;lt;/tex&amp;gt; новое правило: &amp;lt;br&amp;gt;&lt;br /&gt;
#:&amp;lt;tex&amp;gt;A \rightarrow a_1B_1&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
#:&amp;lt;tex&amp;gt;B_1 \rightarrow a_2B_2&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
#:&amp;lt;tex&amp;gt;B_2 \rightarrow a_3B_3&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
#:&amp;lt;tex&amp;gt;\ldots &amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
#:&amp;lt;tex&amp;gt;B_{k-2} \rightarrow a_{k-1}a_{k}&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
#Удалим из грамматики правило &amp;lt;tex&amp;gt;A \rightarrow a_1 a_2 \ldots a_k&amp;lt;/tex&amp;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;\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;
&amp;lt;tex&amp;gt;\Rightarrow &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;L(\Gamma) \subseteq L(\Gamma')&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;w \in L(\Gamma)&amp;lt;/tex&amp;gt;. Рассмотрим вывод &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;. Если в выводе используется длинное правило &amp;lt;tex&amp;gt;A \rightarrow a_1 a_2 \ldots a_k&amp;lt;/tex&amp;gt;, то заменим его на последовательное применение правил &amp;lt;tex&amp;gt;A \rightarrow a_1B_1&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_1 \rightarrow a_2B_2&amp;lt;/tex&amp;gt;, &lt;br /&gt;
&amp;lt;tex&amp;gt;B_2 \rightarrow a_3B_3&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\ldots &amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;B_{k-2} \rightarrow a_{k-1}a_{k}&amp;lt;/tex&amp;gt;. Получим вывод &amp;lt;tex&amp;gt;w&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;\Leftarrow &amp;lt;/tex&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Покажем, что &amp;lt;tex&amp;gt;L(\Gamma') \subseteq L(\Gamma)&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Допустим, что это не так, то есть &amp;lt;tex&amp;gt;\exists w \in L(\Gamma'), w \notin L(\Gamma)&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;\Gamma' \cup \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;A \rightarrow a_1A_1, a_1 \in \Sigma \cup N&amp;lt;/tex&amp;gt;, которого нет в &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt;. В ходе алгоритма оно было получено из некоторого длинного правила &amp;lt;tex&amp;gt;A \rightarrow a_1 a_2 \ldots a_k&amp;lt;/tex&amp;gt;. Применим &amp;lt;tex&amp;gt;A \rightarrow a_1 a_2 \ldots a_k&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;A \rightarrow a_1A_1&amp;lt;/tex&amp;gt; и удалим в выводе все применения правил, полученных из &amp;lt;tex&amp;gt;A \rightarrow a_1 a_2 \ldots a_k&amp;lt;/tex&amp;gt;.&lt;br /&gt;
Получим вывод &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;\Gamma \cup \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;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;.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
Покажем, как описанный алгоритм будет работать на следующей грамматике: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;S \rightarrow AB&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow aBcB&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;B \rightarrow def&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для правила &amp;lt;tex&amp;gt;A \rightarrow aBcB&amp;lt;/tex&amp;gt; вводим 2 новых нетерминала &amp;lt;tex&amp;gt;A_1, A_2&amp;lt;/tex&amp;gt; и 3 новых правила: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow aA_1&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;A_1 \rightarrow BA_2&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;A_2 \rightarrow cB&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для правила &amp;lt;tex&amp;gt;B \rightarrow def&amp;lt;/tex&amp;gt; вводим 1 новый нетерминал &amp;lt;tex&amp;gt;B_1&amp;lt;/tex&amp;gt; и 2 новых правила: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;B \rightarrow dB_1&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;B_1 \rightarrow ef&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&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;S \rightarrow AB&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow aA_1&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;A_1 \rightarrow BA_2&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;A_2 \rightarrow cB&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;B \rightarrow dB_1&amp;lt;/tex&amp;gt;, &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;B_1 \rightarrow ef&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;
* [http://en.wikipedia.org/wiki/Chomsky_normal_form Chomsky normal form]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Контекстно-свободные грамматики]]&lt;/div&gt;</summary>
		<author><name>5.167.251.85</name></author>	</entry>

	</feed>