Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ — различия между версиями
(→Алгоритм для НФХ-грамматики) |
|||
| Строка 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
Пусть дана контекстно-свободная грамматика грамматика и слово . Требуется выяснить, выводится ли это слово в данной грамматике.
Алгоритм для НФХ-грамматики
Пусть приведена к нормальной форме Хомского.
Пусть , если из нетерминала можно вывести подстроку . Иначе :
.
Будем динамически заполнять матрицу следующим алгоритмом:
- База. Ячейки заполняются истиной, если правило принадлежит множеству правил грамматики :
.
- Переход. Пусть на текущем шаге . Если все ячейки, для которых справедливо , уже вычислены, то алгоритм смотрит, можно ли вывести подстроку из этих ячеек:
.
- Завершение. После окончания работы ответ содержится в ячейке , где .
Сложность алгоритма
Необходимо вычислить булевых величин. На каждую требуется затратить операций, где – количество правил. Суммируя по всем правилам получаем конечную сложность .
Алгоритму требуется памяти, где – количество нетерминалов грамматики.
Минус алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ.
