- •1. Алфавит, слова, операции над словами
- •2. Языки. Операции над языками
- •2.1. Теоретико-множественные операции
- •2.2.Специфические операции
- •3. Абстрактные формальные системы
- •4. Формальные порождающие грамматики
- •5. Классификация грамматик
- •6.1. Диаграмма грамматики
- •6.2. Порождение и распознавание цепочек
- •6.3. Детерминизация недетерминированных автоматов
- •6.4. Автоматы с -переходами
- •Детерминизация автоматов с -переходами
- •Оптимизация автоматов с -переходами
- •6.5. Минимизация числа состояний автомата Минимизация автоматов методом таблиц различий
- •Минимизация автоматов по методу Хафмена
- •Минимизация не полностью определенных автоматов
- •6.6. Регулярные множества и регулярные выражения
- •6.7. Разрешимые проблемы для а-грамматик
- •7. Нотации для задания кс-грамматик
- •7.1. Математическая нотация
- •7.2. Бекусова нормальная форма
- •7.3. Расширенная форма Бекуса – Наура (рбнф)
- •7.4. Синтаксическая диаграмма
- •8. Структура цепочек. Су-схемы
- •9. Преобразования кс-грамматик
- •9.1 Устранение непроизводящих правил
- •Алгоритм устранения непроизводящих нетерминалов.
- •9.2. Устранение недостижимых нетерминалов
- •Алгоритм преобразования грамматики.
- •9.3. Устранение -правил
- •Алгоритм преобразования грамматики.
- •9.4. Устранение цепных правил (правил вида а в)
- •Алгоритм исключения цепных правил.
- •10. Разрешимые и неразрешимые свойства кс-грамматик
- •10.1. Разрешимые свойства кс-грамматик
- •10.2. Неразрешимые свойства кс-грамматик
- •11. Синтаксический анализ для кс-языков
- •11.1. Типовая задача синтаксического анализа
- •11.2. Ll(k)-грамматики
- •Использование ll(k) свойства при построении анализатора.
- •11.3. Восходящий анализ
- •Алгоритм разбора для гпп.
- •12.Элементы теории конечных автоматов
- •12.1. Автомат Мили
- •Метод Хафмена минимизации числа состояний автомата
- •12.2. Автоматы Мура
- •12.3. Частичные автоматы
- •13. Сети автоматов. Их анализ и синтез
- •13.1. Синхронные сети автоматов
- •13.2. Правильно построенные логические сети
Метод Хафмена минимизации числа состояний автомата
Этот метод работает как для лингвистических автоматов, так и для автоматов Мили.
Идея – объединение в один класс предположительно эквивалентных состояний, а затем проверка, являются ли состояния действительно эквивалентными (неразличимыми). Затем, если состояния не эквивалентны, классы разбиваем на подклассы, и проверка повторяется. Если состояния ведут себя одинаково, то процедура закончена и получившиеся классы являются состояниями минимизированного автомата.
Например, рассмотрим автомат SD, диаграмма которого представлена на рис. 25
Рис.25
Алгоритм минимизации автомата
Составляем таблицы переходов и выходов. По строкам указываются входы, по столбцам – состояния, в первом подстолбце каждого столбца указаны переходы, во втором – соответствующие выходы.
|
A |
B |
C |
D |
E |
F |
G |
|||||||
0 |
B |
1 |
D |
1 |
E |
0 |
D |
1 |
A |
0 |
G |
0 |
D |
0 |
1 |
F |
0 |
C |
0 |
G |
1 |
C |
0 |
F |
1 |
E |
1 |
C |
1 |
2. Составляем классы предположительно эквивалентных состояний (состояний, при переходе из которых при одинаковых входах выдаются одинаковые выходы, т.е. тех, у которых одинаковы вторые подстолбцы).
В данном случае это классы K1= {A, B, D}, K2= {C, E, F, G}.
3. Составляем таблицу переходов, в которой вместо состояний указываются классы, которым принадлежат состояния. Для наглядности в таблицу добавлена строка, с указанием номера классов, которым принадлежат состояния.
№ класса |
1 |
1 |
2 |
1 |
2 |
2 |
2 |
Вход\состояние |
A |
B |
C |
D |
E |
F |
G |
0 |
K1 |
K1 |
K2 |
K1 |
K1 |
K2 |
K1 |
1 |
K2 |
K2 |
K2 |
K2 |
K2 |
K2 |
K2 |
Если в пределах одного класса состояния ведут себя по-разному, то класс разбивается на подклассы, включающие состояния, ведущие себя одинаково, и возвращаемся к шагу 3 (в рассматриваемом случае классы разбиваются, таблицы приводятся после алгоритма).
4. Если во всех классах состояния ведут себя одинаково, то это действительно классы эквивалентности. Строится автомат, состояниями которого являются классы эквивалентности исходного автомата.
В нашем примере класс К2 разбивается на 2 класса: К3= {C, F} и К4 = {E,G}
№ класса |
1 |
1 |
3 |
1 |
4 |
3 |
4 |
Вход\состояние |
A |
B |
C |
D |
E |
F |
G |
0 |
K1 |
K1 |
К4 |
K1 |
К1 |
К4 |
К1 |
1 |
К3 |
К3 |
К4 |
К3 |
К3 |
К4 |
К3 |
После этого разбиения состояния в классах действительно эквиваленты. Диаграмма полученного автомата представлена на рис.26. Этот автомат эквивалентен исходному автомату SD.
Рис.26
