Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ — различия между версиями
Tsar (обсуждение | вклад) м (Опечатка в формуле) |
Kirelagin (обсуждение | вклад) |
||
| Строка 13: | Строка 13: | ||
</tex>. | </tex>. | ||
| − | Будем динамически заполнять матрицу <tex>a_{A, i, j}</tex> следующим алгоритмом: | + | Будем динамически заполнять матрицу <tex>a_{A, i, j}</tex> следующим алгоритмом (индукция по <tex>m</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>: | ||
Версия 07:39, 4 декабря 2011
Пусть дана контекстно-свободная грамматика грамматика и слово . Требуется выяснить, выводится ли это слово в данной грамматике.
Алгоритм для НФХ-грамматики
Пусть приведена к нормальной форме Хомского.
Пусть , если из нетерминала можно вывести подстроку . Иначе :
.
Будем динамически заполнять матрицу следующим алгоритмом (индукция по ):
- База. Ячейки заполняются истиной, если правило принадлежит множеству правил грамматики :
.
- Переход. Пусть на текущем шаге . Если все ячейки, для которых справедливо , уже вычислены, то алгоритм смотрит, можно ли вывести подстроку из этих ячеек:
.
- Завершение. После окончания работы ответ содержится в ячейке , где .
Сложность алгоритма
Необходимо вычислить булевых величин. На каждую требуется затратить операций, где – количество правил. Суммируя по всем правилам получаем конечную сложность .
Алгоритму требуется памяти, где – количество нетерминалов грамматики.
Минус алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ.
