Алгоритм Кока-Янгера-Касами разбора грамматики в НФХ — различия между версиями
Kabanov (обсуждение | вклад) |
Kabanov (обсуждение | вклад) м |
||
Строка 23: | Строка 23: | ||
[[Файл:CYK_rule_2.jpg]] | [[Файл:CYK_rule_2.jpg]] | ||
− | |||
− | |||
*'''Завершение'''. После окончания работы ответ содержится в ячейке <tex>a_{S, 1, n}</tex>, где <tex>n = |w|</tex>. | *'''Завершение'''. После окончания работы ответ содержится в ячейке <tex>a_{S, 1, n}</tex>, где <tex>n = |w|</tex>. | ||
Строка 46: | Строка 44: | ||
== См. также == | == См. также == | ||
==Источники информации== | ==Источники информации== | ||
+ | |||
+ | [[Категория:Дискретная математика и алгоритмы]] | ||
+ | [[Категория:Динамическое программирование]] | ||
+ | [[Категория: Теория формальных языков]] | ||
+ | [[Категория: Контекстно-свободные грамматики]] |
Версия 21:41, 4 ноября 2014
Задача: |
Пусть дана контекстно-свободная грамматика грамматика в нормальной форме Хомского и слово . Требуется выяснить, выводится ли это слово в данной грамматике. |
Алгоритм
Описание
Пусть
, если из нетерминала можно вывести подстроку . Иначе :.
Будем динамически заполнять матрицу
следующим алгоритмом (индукция по ):- База. . Ячейки заполняются значением , если правило принадлежит множеству правил грамматики : .
- Переход. Рассмотрим все пары . Значения для всех нетерминалов и пар уже вычислены, так что: .
- Завершение. После окончания работы ответ содержится в ячейке , где .
Псевдокод
Асимптотика
Необходимо вычислить
булевых величин. На каждую требуется затратить операций, где – количество правил. Суммируя по всем правилам получаем конечную сложность .Алгоритму требуется
памяти, где — количество нетерминалов грамматики.Пусть,
- длина входной строки, а - количество правил вывода в грамматике.Обработка правил вида
выполняется за .Проход по всем подстрокам выполняется за
. В обработке подстроки присутствует цикл по всем правилам вывода и по всем разбиениям на две подстроки, следовательно обработка работает за . В итоге - .Следовательно, общее время работы алгоритма -
. Кроме того, алгоритму требуется память (на массив ) объемом .Недостаток алгоритма заключается в том, что изначально грамматику необходимо привести к НФХ.