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