- •Введение
- •1. Функциональные модели дискретных устройств
- •1.1. Автоматы
- •1.2. Классификация автоматов
- •1.3. Способы задания конечных автоматов
- •1.4. Система формул переходов
- •1.5. Граф-схема алгоритма
- •1.7.1. Переход от гса к автомату Мура
- •1.6. Переход от сфп к гса
- •1.7. Переход от гса к автомату
- •1.7.2. Переход от гса к автомату Мили
- •1.8. Задачи
- •2. Минимизация автоматов
- •2.1. Минимизация полных автоматов
- •2.1.1. Неотличимость состояний
- •Алгоритм поиска неотличимых состояний автомата
- •2.1.2. Приведенная форма автомата
- •2.1.3. Построение классов неотличимости: алгоритм Мура
- •Свойства разбиения
- •Алгоритм Мура построения классов неотличимости
- •2.1.4. Построение классов неотличимости: алгоритм Хопкрофта
- •Алгоритм Хопкрофта
- •2.2. Минимизация частичных автоматов
- •2.2.1. Совместимость состояний
- •Алгоритм построения множеств совместимости
- •2.2.2. Сохраняемое правильное покрытие
- •Алгоритм построения кратчайшего сохраняемого правильного покрытия
- •2.2.3. Метод последовательных сокращений
- •Алгоритм последовательных сокращений
- •2.3. Задачи
2.1.4. Построение классов неотличимости: алгоритм Хопкрофта
Рассмотрим алгоритм, более эффективный в вычислительном плане, чем алгоритм Мура, но, возможно, более сложный для понимания.
Определение. Обратной функцией переходов конечного автомата назовем функцию вида
,
т.е. значением обратной функции переходов является множество состояний, которые переходят по заданному символу в заданное состояние.
Пример. Рассмотрим автомат из предыдущего подраздела
|
|
|
|
y |
|
|
|
|
X\Q |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
7 |
7 |
8 |
8 |
7 |
5 |
1 |
3 |
|
6 |
2 |
6 |
2 |
4 |
1 |
8 |
8 |
|
1 |
1 |
3 |
3 |
3 |
1 |
3 |
1 |
Обратная функция переходов для него имеет вид
|
|
|
|
|
|
|
|
|
X\Q |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
7 |
|
8 |
|
6 |
|
1,2,5 |
3,4 |
|
6 |
2,4 |
|
5 |
|
1,3 |
|
7,8 |
|
1,2,6,8 |
|
3,4,5,7 |
|
|
|
|
|
Обратная функция переходов очевидным образом может быть распространена на множества:
.
Идея алгоритма Хопкрофта состоит в следующем. Разбиение на классы неотличимости обладает следующими двумя свойствами:
столбцы таблицы выходов состояний из одного блока разбиения одинаковы;
по любому входному символу все состояния одного блока переходят в состояния, также принадлежащие одному и тому же блоку.
Начиная с некоторого стартового разбиения (например, можно взять разбиение из алгоритма Мура) строится разбиение, обладающее такими свойствами. Для этого рассматриваются поочередно пары, состоящие из входного символа и блока разбиения, и каждый блок разбивается на два по следующему правилу: в одно множество помещаются состояния, которые переходят по заданному символу в заданный блок, в другое – остальные состояния. Процесс продолжается, пока порождаются новые разбиения.
