Идея следующего шага состоит в итерационном анализе всех групп на соответствие переходов из состояний, входящих в данную группу, т.е. для состояний группы должно выполняться условие:
s,t Gi |
aj |
: f (s, aj ) us, j , f (t, aj ) ut , j : us, j ,ut , j Gk |
(в случае анализа бинарных сигналов Σ = {0, 1}). Если для каких-то состояний s и t данное условие не выполняется, то данная группа разбивается на подгруппы, в которые помещаются только состояния с одинаковыми переходами, т.е. если переходы из состояний различаются, то они помещаются в разные подгруппы. Фактически, мы получаем новое разбиение ' . Данный шаг повторяется до тех пор, пока после анализа всех групп не будет получено разбиение,
совпадающее с предыдущим ( k
k 1 , где k – текущая итерация шага 2). Более формально шаг 2 представлен в алгоритме П4.1
Алгоритм П4.1 Построение минимально разбиения групп состояний ДКА
': |
0 |
|
выполнить {
: |
' |
': |
Ø |
для каждого G из Π выполнить{ для каждого a из Σ выполнить
{
разбить G на ΠG,a = {Ga1, Ga2,…, Gan}, где Ga1, Ga2,…,
Gan имеют отличные переходы по a относительно Π
}
по ΠG,a построить G
G,a
'
G
}
} до тех пор пока
' Π – искомое разбиение
Отметим, что для шага 2 существует множество алгоритмов кроме приведенного выше, в том числе, и имеющих более эффективную машинную реализацию, например, алгоритм Хопкрофта.
181
На последнем шаге производится замена каждой группы из результирующего разбиения на ее представителя, синтезируются соответствующие таблицы переходов и генерации сигналов. Стартовым состоянием назначается представитель группы, в которой содержится стартовое состояние исходного автомата.
Пример
Постановка задачи. Дан детерминированный конечный автомат (соответствующий РВ 101((0|1)(0|1)(0|1))+101), представленный на рис. 6.10). По состоянию автомата М вырабатываются сигналы GOOD = ‘1’ и BAD = ‘0’, по состоянию Ø – сигналы GOOD = ‘0’ и BAD = ‘1’, во всех остальных состояниях GOOD = ‘0’ и BAD = ‘0’.
Синтез минимального автомата. Шаг 1
По условию у нас существует три различных комбинации выходных сигналов, которые формируются в зависимости от состояния, в котором находится автомат. Тогда мы получаем начальное разбиение состояний, представленное в табл. П4.1.
Таблица П4.1 Начальное разбиение на группы состояний автомата, соответствующего
регулярному выражению 101((0|1)(0|1)(0|1))+101
Группа |
Состояния |
Комбинация сигналов |
G1 |
M |
GOOD = ‘1’, BAD = ‘0’ |
G2 |
Ø |
GOOD = ‘0’, BAD = ‘1’ |
G3 |
A, B, C, D, E, F, G, H, I, J, K, L |
GOOD = ‘0’, BAD = ‘0’ |
Синтез минимального автомата. Шаг 2
Отметим, что группы, содержащие по одному состоянию, не нуждаются в анализе на втором шаге, для них лишь необходимо своевременно изменять таблицу переходов в модифицируемые на данном шаге группы.
1. Построим соответствие переходов для текущего разбиения на группы. Результат построения приведен в табл. П4.2.
182
Таблица П4.2 Итерация 1. Соответствия переходов для разбиения на группы состояний
автомата, соответствующего регулярному выражению 101((0|1)(0|1)(0|1))+101
Группа |
Сигнал |
Состояния |
Переход |
G1 |
0 |
M |
G3 |
|
1 |
M |
G3 |
G2 |
0 |
Ø |
G2 |
|
1 |
Ø |
G2 |
G3 |
0 |
A, C |
G2 |
|
|
B, D, E, F, G, H, I, J, K, L |
G3 |
|
1 |
L |
G1 |
|
|
B |
G2 |
|
|
A, C, D, E, F, G, H, I, J, K |
G3 |
2. Очевидно, что группу G3 необходимо разбить на несколько подгрупп. Так как входные сигналы ‘0’ и ‘1’ дают разные разбиения Π0 и Π1, то результирующее разбиение будет содержать объе-
динение пересечений групп из данных разбиений Gi0 G1j . Ре-
0 , 1
зультирующее разбиение после первой итерации приведено в табл.
П4.3.
Таблица П4.3 Разбиение на группы состояний автомата, соответствующего регулярному
выражению 101((0|1)(0|1)(0|1))+101, после первой итерации
Группа |
Состояния |
Комбинация сигналов |
G1 |
M |
GOOD = ‘1’, BAD = ‘0’ |
G2 |
Ø |
GOOD = ‘0’, BAD = ‘1’ |
G3 |
A, C |
GOOD = ‘0’, BAD = ‘0’ |
G4 |
B |
GOOD = ‘0’, BAD = ‘0’ |
G5 |
L |
GOOD = ‘0’, BAD = ‘0’ |
G6 |
D, E, F, G, H, I, J, K |
GOOD = ‘0’, BAD = ‘0’ |
3. Построим соответствие переходов для текущего разбиения на группы. Результат построения приведен в табл. П4.4.
183
Таблица П4.4 Итерация 2. Соответствия переходов для разбиения на группы состояний
автомата, соответствующего регулярному выражению 101((0|1)(0|1)(0|1))+101
Группа |
Сигнал |
Состояния |
Переход |
G1 |
0 |
M |
G6 |
|
1 |
M |
G6 |
G2 |
0 |
Ø |
G2 |
|
1 |
Ø |
G2 |
G3 |
0 |
A, C |
G2 |
|
1 |
A |
G4 |
|
|
C |
G6 |
G4 |
0 |
B |
G3 |
|
1 |
B |
G2 |
G5 |
0 |
L |
G6 |
|
1 |
L |
G1 |
G6 |
0 |
D, E, F, G, H, I, J |
G6 |
|
|
K |
G5 |
|
1 |
D, E, F, G, H, I, J, K |
G6 |
4. Очевидно, что группы G3 и G6 необходимо разбить на несколько подгрупп. Построим объединение пересечений групп из соответствующих разбиений для этих групп. Результирующее разбиение после второй итерации приведено в табл. П4.5.
Таблица П4.5 Разбиение на группы состояний автомата, соответствующего регулярному
выражению 101((0|1)(0|1)(0|1))+101, после второй итерации
Группа |
Состояния |
|
Комбинация сигналов |
G1 |
M |
|
GOOD = ‘1’, BAD = ‘0’ |
G2 |
Ø |
|
GOOD = ‘0’, BAD = ‘1’ |
G3 |
A |
|
GOOD = ‘0’, BAD = ‘0’ |
G4 |
B |
|
GOOD = ‘0’, BAD = ‘0’ |
G5 |
L |
|
GOOD = ‘0’, BAD = ‘0’ |
G6 |
K |
|
GOOD = ‘0’, BAD = ‘0’ |
G7 |
C |
|
GOOD = ‘0’, BAD = ‘0’ |
G8 |
D, E, F, G, H, I, J |
|
GOOD = ‘0’, BAD = ‘0’ |
|
|
184 |
|
5. Построим соответствие переходов для текущего разбиения на группы. Результат построения приведен в табл. П4.6.
Таблица П4.6 Итерация 3. Соответствия переходов для разбиения на группы состояний
автомата, соответствующего регулярному выражению 101((0|1)(0|1)(0|1))+101
Группа |
Сигнал |
Состояния |
|
Переход |
|
G1 |
0 |
M |
|
G8 |
|
|
|
1 |
M |
|
G6 |
G2 |
0 |
Ø |
|
G2 |
|
|
|
1 |
Ø |
|
G2 |
G3 |
0 |
A |
|
G2 |
|
|
|
1 |
A |
|
G4 |
G4 |
0 |
B |
|
G7 |
|
|
|
1 |
B |
|
G2 |
G5 |
0 |
L |
|
G8 |
|
|
|
1 |
L |
|
G1 |
G6 |
0 |
K |
|
G5 |
|
|
|
1 |
K |
|
G8 |
G7 |
0 |
C |
|
G2 |
|
|
|
1 |
C |
|
G8 |
G8 |
0 |
D, E, F, G, H, I, J |
|
G8 |
|
|
|
1 |
I, J |
|
G6 |
|
|
|
D, E, F, G, H |
|
G8 |
|
|
|
|
|
Таблица П4.7 |
Разбиение на группы состояний автомата, соответствующего регулярному |
|||||
выражению 101((0|1)(0|1)(0|1))+101, после третьей итерации |
|||||
|
|
|
|
|
|
Группа |
|
|
Состояния |
Комбинация сигналов |
|
G1 |
|
M |
|
GOOD = ‘1’, BAD = ‘0’ |
|
G2 |
|
Ø |
|
GOOD = ‘0’, BAD = ‘1’ |
|
G3 |
|
A |
|
GOOD = ‘0’, BAD = ‘0’ |
|
G4 |
|
B |
|
GOOD = ‘0’, BAD = ‘0’ |
|
G5 |
|
L |
|
GOOD = ‘0’, BAD = ‘0’ |
|
G6 |
|
K |
|
GOOD = ‘0’, BAD = ‘0’ |
|
G7 |
|
C |
|
GOOD = ‘0’, BAD = ‘0’ |
|
G8 |
|
I, J |
|
GOOD = ‘0’, BAD = ‘0’ |
|
G9 |
|
D, E, F, G, H |
GOOD = ‘0’, BAD = ‘0’ |
||
|
|
|
185 |
|
|