Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ — различия между версиями
(Новая страница: «Пусть дана грамматика <tex>\Gamma</tex> и слово <tex>w \in \Sigma^{*}</tex>. Требуется выяснить, выводится ли э…») |
|||
Строка 1: | Строка 1: | ||
− | Пусть дана грамматика <tex>\Gamma</tex> и слово <tex>w \in \Sigma^{*}</tex>. Требуется выяснить, выводится ли это слово в данной грамматике. | + | Пусть дана [[Контекстно-свободные грамматики, вывод, лево- и правосторонний вывод, дерево разбора|контекстно-свободная грамматика]] грамматика <tex>\Gamma</tex> и слово <tex>w \in \Sigma^{*}</tex>. Требуется выяснить, выводится ли это слово в данной грамматике. |
== Алгоритм для НФХ-грамматики == | == Алгоритм для НФХ-грамматики == | ||
− | Пусть <tex>\Gamma</tex> приведена к | + | Пусть <tex>\Gamma</tex> приведена к [[нормальная форма Хомского|нормальной форме Хомского]]. |
− | + | Пусть <tex>a_{A, i, j} = true</tex>, если из нетерминала <tex>A</tex> можно вывести подстроку <tex>w[i..j]</tex>. Иначе <tex>a_{A, i, j} = false</tex>: | |
− | <tex>a_{A, i, j} = \ | + | <tex>a_{A, i, j} = |
+ | \begin{cases} | ||
+ | true,&\text{$A \Rightarrow^{*} w[i..j]$;}\\ | ||
+ | false,&\text{else.} | ||
+ | \end{cases} | ||
+ | </tex>. | ||
+ | Будем динамически заполненять матрицу <tex>a_{A, i, j}</tex> следующим алгоритмом: | ||
− | + | *'''База'''. Ячейки <tex>a_{A, i, i}</tex> заполняются истиной, если правило <tex>A \rightarrow w[i]</tex> принадлежит множеству правил <tex>P</tex> грамматики <tex>\Gamma</tex>: | |
<tex>a_{A, i, j} = \lbrack A \rightarrow w[i] \in P \rbrack</tex>. | <tex>a_{A, i, j} = \lbrack A \rightarrow w[i] \in P \rbrack</tex>. | ||
− | + | *'''Переход'''. Пусть на текущем шаге <tex>j-i=m>0</tex>. Если все ячейки, для которых справедливо <tex>j-i<m</tex>, уже вычислены, то алгоритм смотрит, можно ли вывести подстроку <tex>w[i..j]</tex> из этих ячеек: | |
− | Переход | ||
<tex>a_{A, i, j} = \bigvee\limits_{k=i}^{j-1} \bigvee\limits_{A \rightarrow BC} \left( a_{B, i, k} \wedge a_{C, k+1, j} \right)</tex>. | <tex>a_{A, i, j} = \bigvee\limits_{k=i}^{j-1} \bigvee\limits_{A \rightarrow BC} \left( a_{B, i, k} \wedge a_{C, k+1, j} \right)</tex>. | ||
[[Файл:CYK_rule.jpg]] | [[Файл:CYK_rule.jpg]] | ||
− | + | *'''Завершение'''. После окончания работы ответ содержится в ячейке <tex>a_{S, 1, n}</tex>, где <tex>n = |w|</tex>. | |
− | |||
− | |||
− | |||
== Сложность алгоритма == | == Сложность алгоритма == | ||
− | Необходимо вычислить <tex>n^2</tex> | + | Необходимо вычислить <tex>n^2</tex> булевых величин. На каждую требуется затратить <tex>n \cdot |P_A|</tex> операций, где <tex>|P_A|</tex> – количество правил. Суммируя по всем правилам получаем конечную сложность <tex>O \left( n^3 \cdot |\Gamma| \right)</tex>. |
Алгоритму требуется <tex>n^2 \cdot |N|</tex> памяти, где <tex>|N|</tex> – количество нетерминалов грамматики. | Алгоритму требуется <tex>n^2 \cdot |N|</tex> памяти, где <tex>|N|</tex> – количество нетерминалов грамматики. | ||
Минус алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ. | Минус алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ. |
Версия 03:36, 27 февраля 2011
Пусть дана контекстно-свободная грамматика грамматика и слово . Требуется выяснить, выводится ли это слово в данной грамматике.
Алгоритм для НФХ-грамматики
Пусть нормальной форме Хомского.
приведена кПусть
, если из нетерминала можно вывести подстроку . Иначе :.
Будем динамически заполненять матрицу
следующим алгоритмом:- База. Ячейки заполняются истиной, если правило принадлежит множеству правил грамматики :
.
- Переход. Пусть на текущем шаге . Если все ячейки, для которых справедливо , уже вычислены, то алгоритм смотрит, можно ли вывести подстроку из этих ячеек:
.
- Завершение. После окончания работы ответ содержится в ячейке , где .
Сложность алгоритма
Необходимо вычислить
булевых величин. На каждую требуется затратить операций, где – количество правил. Суммируя по всем правилам получаем конечную сложность .Алгоритму требуется
памяти, где – количество нетерминалов грамматики.Минус алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ.