- •Теория языков программирования
- •1. Введение
- •2. Индивидуальное задание
- •3. Переход от праволинейной грамматики к автоматной
- •4. Построение недетерминированного конечного автомата
- •5. Преобразование недетерминированного конечного автомата в детерминированный конечный автомат
- •6. Минимизация автомата
- •7. Программная реализация конечного автомата
- •8. Порядок выполнения курсовой работы
- •9. Требования к оформлению
- •Список рекомендуемой литературы
6. Минимизация автомата
Минимизация автомата, эквивалентного полученному в предыдущем разделе полностью определенному автомату, проводится в два этапа. Сначала множество состояний автомата разбивается на классы эквивалентности, а затем строится минимальный (приведенный) автомат.
Рассмотрим алгоритм приведения автомата для случая модели Мура, к которой относится рассматриваемый пример.
Построим треугольную таблицу (табл. 6), клетки которой соответствуют всем парам рабочих состояний (qi, qj) i j, т.е. состояний, отличных от q20 «Ошибка». Если для рабочих состояний qi и qj в табл. 5 существует входной символ х1, при котором переход из qi осуществляется в одно из рабочих состояний, а из qj в состояние ошибки, то состояние qi и qj не эквивалентны, и соответствующая им клетка помечается крестом. То есть, если какие - либо две строчки табл. 5 содержат разное число рабочих состояний или отличаются позициями, занимаемыми рабочими состояниями, то обозначающие эти строки состояния не эквивалентны. В противном случае в клетку табл. 6 с координатами qi qj запишем каждую пару состояний (qs, qt), t s, в которые автомат может перейти из qi и qj при подаче одного и того же входного символа (количество этих пар равно числу столбцов с рабочими состояниями в строке qi и qj табл. 5).
В рассматриваемом случае в табл. 5 автомат из состояния qo переходит в рабочие состояния при входных символах х2 , х3 , х5 , при остальных входных символах qo переходит в состояние q20 «Ошибка». Других состояний, которые оказываются в рабочих состояниях при том же наборе входных символов (х2 , х3 , х5) нет, поэтому в столбце qo табл. 6 все клетки следует вычеркнуть. То же можно сделать со столбцами qi,3, q2, q4. Из состояния q5 автомат переходит в состояния q19 , q8 при входных символах хо , xi , и при этих же символах в рабочие состояния автомат переходит из состояний q6 ( q19 , q9) и q7 (то же q19 , q9). Поэтому две клетки в столбце q5 не должны вычеркиваться и в них должны быть вписаны: в первую пару состояний (q19, q8; q19, q9), во вторую — то же (q19, q8; q19, q9). Для экономии места в клетки вписываются только индексы состояний. Такая запись означает, что состояния q5 и q6 (q5 и q7) будут эквивалентны, если эквивалентны состояния q19, q8 и q19, q9. Из состояний q6 и q7 автомат переходит при хо в состояния q19 ,q9. Аналогично, из q8 и q9 автомат переходит при x6 в qo, а при х7 - в q19.
В этом случае пары состояний q5 и q6, q6 и q7, q5 и q7, q8 и q9 являются явно эквивалентными, как и пары q13 и q16 , q13 и q18 , q16 и q18. В табл. 6 таким состояниям соответствуют непомеченные клетки. Таким образом заполняются все клетки табл. 6.
Затем в табл. 6 следует вычеркнуть клетки, в которых записаны индексы хотя бы одного состояния, помечающего строку и столбец со всеми вычеркнутыми состояниями. По этому правилу зачеркиваются ранее заполненные клетки в столбце 17, затем снова необходимо вычеркнуть все клетки, которые содержат индексы состояний с вычеркнутыми клетками и т. д. пока не образуется таблица, в которой ни одной клетки вычеркнуть уже нельзя. В нашем случае необходимо вычеркнуть клетки в строке 17, столбцах 13 и 16, остальные клетки вычеркнуть нельзя.
Таблица 6
1,3 |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
X |
X |
|
|
|
|
(19,8; 19,9) |
|
|
|
|
|
|
| ||||
4 |
X |
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
X |
X |
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
X |
X |
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
X |
X |
X |
X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
|
|
|
|
|
9 |
X |
X |
X |
X |
X |
X |
X |
|
|
|
|
|
|
|
|
|
|
|
10 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
|
|
(12; 15) |
|
|
| ||
11 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
|
(13; 16) |
|
| |||
12 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
(19; 18) |
| ||||
13 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
|
|
(19; 18) | ||
14 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
X |
|
|
|
|
|
15 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
X |
|
(19; 18) | ||
16 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
X |
|
|
|
17 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
X |
|
|
|
18 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
X |
X |
|
|
|
19 |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
X |
|
0 |
1,3 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
Не вычеркнутые клетки результирующей таблицы соответствуют всем парам эквивалентных состояний.
Класс эквивалентности образуется состояниями, которые попарно эквивалентны. В данном случае образуются следующие пары эквивалентных состояний: q5 и q6, q5 и q7, q6 и q7, q8 и q9, q11 и q14, q12 и q15, q13 и q16, q13 и q18, q16 и q18.
Всего восемь пар попарно эквивалентных состояний. Эти состояния образуют пять классов эквивалентности - {q5 , q6 , q7}, {q8 , q9}, {q11 , q14}, {q12, q15} и {q13, q16 , q18}.
Каждое состояние, не вошедшее ни в один класс эквивалентности, эквивалентно лишь само себе и само образует этот класс. В рассматриваемом примере к нерасчлененным пяти классам необходимо добавить еще семь классов эквивалентности: q0; q13; q2; q4; q10; q17; q19.
Состояние минимального автомата обозначим буквами r с индексами
r0={q0}; r1={q1,3}; r2=(q2}; r3={q4}; r4={q5, q6, q7}; r5={q8, q9}; r6={q10}; r7={q11, q14}; r8={q12, q15}; r9={ q13, q16, q18}; r10={q17}; r11={q19}.
Таким образом, минимальный автомат содержит 12 состояний, не считая состояния r12={q20} "Ошибка". Орграф этого автомата приводится на рис. 5 (без указания состояния «Ошибка»), а таблица переходов - в табл. 7.
X2
X5
Рис.5
В этой таблице, также как и в табл. 5, незаполненные клетки соответствуют состоянию «Ошибка».
Таблица 7
|
Х0 |
X1 |
Х2 |
Х3 |
Х4 |
Х5 |
Х6 |
Х7 |
r0 |
|
|
r4 |
r1 |
|
|
|
r6 |
r1 |
|
|
r2 |
|
|
|
|
r3 |
r2 |
|
r4 |
|
|
|
|
|
|
r3 |
|
|
|
|
r4 |
|
|
|
r4 |
r12 |
r5 |
|
|
|
|
|
|
r5
|
|
|
|
|
|
|
r0 |
r12 |
r6 |
|
|
|
|
r7 |
r7 |
r10 |
|
r7 |
|
|
|
|
|
|
r8 |
|
r8 |
r9 |
|
|
|
|
|
|
|
r9 |
|
|
|
|
|
r11 |
|
|
r10 |
|
|
|
|
|
|
r9 |
|
r11 |
|
|
|
|
|
|
|
|