- •1. Алгоритм и его характеристики
- •2. Вычислимые функции и их графики
- •3.Разрешимые и перечислимые множества. Критерий разрешимости множества
- •4.Рекурсивные функции и операторы. Примеры
- •5. Машина Тьюринга и её программа. Машина Тьюринга как алгоритм
- •6. Эффективная нумерация машин Тьюринга
- •7. Неразрешимые алгоритмические проблемы
- •8. Детерминированные конечные автоматы и их работа. Диаграмма и функция переходов. Расширенная функция переходов. Язык дка
- •9. Недетерминированные конечные автоматы и их работа. Диаграмма и отношение переходов. Язык нка
- •10. Недетерминированные конечные автоматы с ε-переходами и их работа. Язык ε-нка
- •11. Языки. Операции над языками
- •12. Регулярные выражения и их свойства. Язык регулярного выражения
- •13. Регулярные выражения и дка
- •14. Свойства регулярных языков. Лемма о накачке. Замкнутость регулярных языков
- •15. Контекстно-свободные грамматики, порождения цепочек, язык грамматики
- •16. Замкнутость и разрешимость кс-языков
- •17. Полезные, порождающие и достижимые символы кс – грамматики. Нормальная форма Хомского кс-грамматики
- •18. Приведение кс-грамматики (контекстно-свободной) к нфх - грамматике (нормальной форме Хомского)
- •19. Автоматы с магазинной памятью и их работа. Конфигурация мп-автомата и его язык, вычисление.
- •21. Эффективная нумерация машин Тьюринга. Язык диагонализации и универсальный язык. Эффективная нумерация машин Тьюринга
- •22. Рекурсивный и рекурсивно-перечислимые языки. Иерархия языков по Хомскому
- •23. Временная сложность машин Тьюринга. Классы p и np языков и связь между ними
18. Приведение кс-грамматики (контекстно-свободной) к нфх - грамматике (нормальной форме Хомского)
Опр. КС – грамматика – G=(V,T,P,S)
V – множество переменных (переменные определяют язык – не терминалы, синтаксические категории)
Т – множество терминалов (элементы алфавита, из которого составляются цепочки определяемого данной грамматикой языка)
Р – множество правил вывода, конечное (продукции, каждая из них представляет рекурсивное определение языка. Продукция состоит из переменной, определяющей продукцию – головы продукции; символа продукции «→»; конечной цепочки, состоящей из терминалов и переменных – тело продукции = способ образования цепочек языка, определяемого переменной в голове)
S – стартовый символ
Приведение КС-грамматики к НФХ – грамматике.
1) Нужно удалить все бесполезные символы (если во всех цепочках символ не используется, то он не нужен). Пусть даны: грамматика G = (V,T,P,S), язык данной грамматики (L(G))≠ и дана грамматика G1 = (V1,T1,P1,S), причем G1 строим по G.
S-одно и то же, т.к. любая грамматика порождается стартовым символом, т.к. В1 строим по G, то G1 должна порождаться тем же стартовым символом. Из грамматики G удаляются не порождающие символы и все продукции, содержащие хотя бы один из этих символов. Получим грамматику G2 = (V2,T2,P2,S).
2) Удаляем все недостижимые символы. Получим грамматику G1 . она не имеет бесполезных символов и L(G1) = L(G).
Алгоритм вычисления порождающих символов.
1) каждый символ из Т является порождающим, т.к. вместо любого символа Т можно подставить букву, а это слово, т.е. порождает цепочку из одного символа. 2) пусть А→α - некоторая продукция этой грамматики и каждый символ в α-порождающий, тогда и А - порождающий (α = ε допускается).
Алгоритм вычисления достижимых символов:
1) S-достижимый,
2) пусть А - достижимо. Тогда для всех продукций с головой А все символы тела этой продукции достижимы. Пусть А - ε-порождающая переменная (А*→ ε). Все ε - порождающие символы этой грамматики можно найти следующим образом:
- если среди продукций грамматики есть продукция А→ ε, то а- ε-порождающий
символ.
- существует В→С1С2….Ск и каждое Сi является ε- порождающим, то В – ε- порождающий (Сi -переменная).
Если G1 построена по G с помощью описанных выше алгоритмов, то язык этой грамматики G1 устроен следующим образом: L(G1) = L(G)-{ε} (т.е. тот же язык, но пустое слово никак не получишь).
Алгоритм приведения грамматики к нормальной форме Хомского:
1). для каждого терминала а, встречающегося в продукции длины ≥2 создаем новую переменную А и соответствующую ей продукцию А→ а. (А используем вместо а во всех продукциях с а длинны ≥2), следовательно, в теле каждой продукции будут либо одиночные терминалы, либо как минимум 2 переменные
без терминалов.
2) каждую продукцию вида А→В1В2…Вк (к≥3) разбиваем на группы продукций, в теле каждой только 2 переменные путем введения новых переменных:
А→В1С1, С1→В2С2, С2→В3С3, …., Ск-3→Вк-2Ск-2, Ск-2→Вк-1Вк
получим НФХ – грамматику.
Теорема: если G - контекстно-свободная (КС) грамматика с непустым языком, то существует НФХ с языком L(G1) = L(G)-{ε}
Каждая КС - грамматика имеет каноническую форму Хомского.