Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ — различия между версиями
(→Алгоритм для НФХ-грамматики) |
|||
Строка 13: | Строка 13: | ||
</tex>. | </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, i}</tex> заполняются истиной, если правило <tex>A \rightarrow w[i]</tex> принадлежит множеству правил <tex>P</tex> грамматики <tex>\Gamma</tex>: |
Версия 05:39, 11 октября 2011
Пусть дана контекстно-свободная грамматика грамматика и слово . Требуется выяснить, выводится ли это слово в данной грамматике.
Алгоритм для НФХ-грамматики
Пусть нормальной форме Хомского.
приведена кПусть
, если из нетерминала можно вывести подстроку . Иначе :.
Будем динамически заполнять матрицу
следующим алгоритмом:- База. Ячейки заполняются истиной, если правило принадлежит множеству правил грамматики :
.
- Переход. Пусть на текущем шаге . Если все ячейки, для которых справедливо , уже вычислены, то алгоритм смотрит, можно ли вывести подстроку из этих ячеек:
.
- Завершение. После окончания работы ответ содержится в ячейке , где .
Сложность алгоритма
Необходимо вычислить
булевых величин. На каждую требуется затратить операций, где – количество правил. Суммируя по всем правилам получаем конечную сложность .Алгоритму требуется
памяти, где – количество нетерминалов грамматики.Минус алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ.