Алгоритм Кока-Янгера-Касами, модификация для произвольной грамматики
Версия от 12:48, 2 марта 2012; 194.85.161.2 (обсуждение)
Пусть дана контекстно-свободная грамматика грамматика и слово . Требуется выяснить, выводится ли это слово в данной грамматике.
Базовая версия данного алгоритма работает только для грамматик в нормальной форме Хомского. Модифицируем алгоритм для работы на произвольных контекстно-свободных грамматиках без цепных правил и без . -правил
Алгоритм для произвольной грамматики
Обозначим
— максимальную длину правой части правила.Введём вспомогательную динамику:
— можно ли из префикса длины правой части данного правила вывести . Также введём динамику , аналогично базовой версии алгоритма.- База динамики: — вывод терминалов, — -вывод; — -вывод для -префиксов правил.
- Переход: Пусть для всех подстрок динамики уже вычислены. Сначала вычислим вспомогательную динамику: . Это вычисление может обратится к , но на результат это не повлияет, так так в данный момент . Главная динамика выражается так: .
- Завершение: После окончания работы ответ содержится в ячейке , где .
Оценка сложности
Расчёт вспомогательной динамики занимает
времени, основной динамики — . Итоговая временная сложность алгоритма равна . Алгоритму требуется памяти.