<?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=94.25.229.7&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=94.25.229.7&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/94.25.229.7"/>
		<updated>2026-04-28T03:16:38Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<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=59783</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=59783"/>
				<updated>2017-01-17T12:29:26Z</updated>
		
		<summary type="html">&lt;p&gt;94.25.229.7: Красиво оформлен алгоритм&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
[[Алгоритм_Кока-Янгера-Касами_разбора_грамматики_в_НФХ|Базовая версия]] данного алгоритма работает только для грамматик в [[нормальная форма Хомского|нормальной форме Хомского]]. Модифицируем алгоритм для работы на произвольных контекстно-свободных грамматиках [[Удаление_цепных_правил_из_грамматики|без цепных правил]] и [[Удаление_eps-правил_из_грамматики|без &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&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\left[A,i,j\right] = \left[A \Rightarrow^{*} w[i..j]\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\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\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\right] = false&amp;lt;/tex&amp;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 \varepsilon&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;\forall A \rightarrow \alpha \:\: h\left[A \rightarrow \alpha, i, i-1, 0\right] = true&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;
* '''Переход''': Пусть для всех подстрок &amp;lt;tex&amp;gt;w[i..j]&amp;lt;/tex&amp;gt; динамики уже вычислены. Сначала вычислим вспомогательную динамику: &amp;lt;tex&amp;gt;\forall k: h\left[A \rightarrow \alpha, i, j, k\right] = \bigvee\limits_{r=i-1..j}\left(h\left[A \rightarrow \alpha, i, r, k-1\right] \wedge a\left[\alpha[k],r+1,j\right]\right)&amp;lt;/tex&amp;gt;. Это вычисление может обратится к &amp;lt;tex&amp;gt;a\left[A,i,j\right]&amp;lt;/tex&amp;gt;, но на результат это не повлияет, так так в данный момент &amp;lt;tex&amp;gt;a\left[A,i,j\right]=false&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;.&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;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;/div&gt;</summary>
		<author><name>94.25.229.7</name></author>	</entry>

	</feed>