
МУ к лаб по ДМ_ускор
.pdfЛабораторная работа №9
Построение разных типов конечных автоматов (Детерминированные и недетерминированные конечные автоматы)
Цель работы: изучить основные понятия конечных автоматов, научиться преобразовывать недетерминированный конечный автомат в эквивалентный ему детерминированный конечный автомат.
Задание
По недетерминированному конечному автомату, диаграмма которого представлена в индивидуальном задании, построить детерминированный конечный автомат, распознающий тот же язык.
В ходе выполнения задания должны быть выполнены и описаны следующие подзадачи:
1. Записать параметры заданного НКА в виде:
M = {S, I, О, f, g, s0, F), |
(4.1) |
где S={s0, s1, s2, ..., sm} – конечное множество число состояний; I – конечное множество допустимых входных символов;
О – конечное множество допустимых выходных символов;
f – функция переходов недетерминированного конечного автомата, т.е. отображение множества S х I во множестве S, которое определяет выбор следующего состояния НКА;
g – отображение множества S х I во множестве О, которое определяет выходной символ (функцию g называют функцией выходов);
s0 S – начальное состояние управляющего устройства;
FS – множество завершающих состояний.
2.Построить таблицу переходов для заданного НКА
3.Преобразовать НКА в КА.
4.Проверить состояния полученного КА на достижимость и эквивалентность
5. Записать параметры заданного |
КА в виде: |
|
M = {S, I, |
g, s0, F), |
(4.2) |
6.Построить диаграмму состояний полученного КА.
7.Проверить, допускает ли полученный КА цепочки, которые были допущены НКА.
8.Составить программу, реализующую работу полученного КА.

Таблица 9.1 – Варианты заданий
№ |
|
|
|
|
|
|
вариан |
|
|
Задание |
|
|
|
та |
|
|
|
|
|
|
1 |
|
|
2 |
|
|
|
|
|
|
|
|
1 |
|
|
1 |
|
|
|
|
|
|
|
|
0 |
|
q1 |
|
|
|
|
0 |
|
|
|
1 |
q0 |
0 |
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
Start |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
q2 |
|
|
|
|
|
|
0 |
|
|
|
0 |
|
|
|
|
|
|
|
1 |
|
q1 |
|
|
|
|
1 |
|
|
|
2 |
|
q0 |
|
|
|
|
|
|
|
|
|
1 |
0 |
|
|
|
|
|
|
|
|
Start |
|
|
|
0,1 |
|
|
|
|
|
|
||
|
|
|
|
|
q2 |
|
|
|
|
|
|
0 |
|
|
|
0 |
|
|
|
|
|
|
|
0,1 |
|
q1 |
|
|
|
|
1 |
|
|
|
|
|
q0 |
|
|
|
|
3 |
Start |
|
|
|
|
|
|
|
0 |
1 |
|
|
|
|
0 |
|
|
|
||
|
0 |
|
|
|
||
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
q2 |
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
0,1 |
|
q1 |
|
|
|
|
0 |
|
|
|
4 |
|
q0 |
0 |
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
Start |
|
|
|
|
0 |
q2
№ |
|
|
|
|
вариан |
|
Задание |
|
|
та |
|
|
|
|
1 |
|
2 |
|
|
|
0 |
|
|
|
|
|
1 |
|
q1 |
|
|
1 |
|
|
|
q0 |
|
|
0 |
|
|
|
|
|
5 |
|
0,1 |
|
|
Start |
|
1 |
|
0,1 |
|
|
|
|
q2 |
|
|
Start |
|
|
0 |
1 |
q1 |
|
|
|
0 |
|
||
|
|
|
0,1 |
|
|
1 |
|
|
|
|
|
|
|
|
q0 |
|
|
|
q3 |
|
|
|
|
|
|
0,1 |
0 |
|
|
Start |
1 |
|
1 |
|
|
|
|
||
6 |
|
q2 |
|
|
|
|
0,1 |
|
|
|
|
|
|
0 |
|
|
0 |
|
|
|
|
|
1 |
|
|
|
|
|
q2 |
|
q0 |
|
1 |
|
|
|
|
|
|
|
|
|
0,1 |
1 |
7 |
|
|
|
|
|
|
|
|
|
|
Start |
|
1 |
0,1 |
|
|
|
|
|
|
|
|
|
q1 |
|
|
|
|
Start |
|
1 |
|
|
|
|
|
1 |
|
q2 |
|
|
1 |
|
|
|
|
|
|
|
|
q0 |
|
|
|
8 |
0 |
|
1 |
|
|
|
|
|
0 |
|
|
q1 |
0 |
|
|
|
|
|
|
|
Start |
|
|
|

Продолжение таблицы 9.1
1 |
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
Start |
|
0 |
|
|
|
|
|
|
|
|
|
|
1 |
|
q2 |
|
|
|
|
|
0 |
|
|
|
|
q0 |
|
|
|
|
|
|
|
|
|
|
0 |
|
1 |
|
9 |
|
|
0 |
|
|
|
1 |
|
|
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
q1 |
|
|
|
|
|
|
|
|
|
|
|
|
q3 |
|
|
|
|
|
|
|
|
0,1 |
|
|
|
|
|
|
1 |
|
|
|
1,0 |
|
|
|
|
0 |
|
|
|
|
|
|
q0 |
1 |
|
q2 |
|
|
|
|
|
|
|
||
10 |
|
0 |
1 |
|
|
|
|
|
|
|
1 |
|
1 |
|
|
|
|
|
|
|
|
||
|
|
|
q1 |
|
|
|
|
|
Start |
|
|
|
|
|
|
|
|
|
|
|
|
Start |
|
|
|
0 |
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
q1 |
1 |
0,1 |
|
|
|
|
|
|
|
||
|
|
|
0 |
|
|
|
|
|
q0 |
|
|
|
|
|
|
|
|
|
|
|
|
q3 |
|
|
|
|
0 |
|
|
|
|
11 |
|
|
0 |
|
1 |
|
|
|
|
|
|
|
|||
|
|
0,1 |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
q2 |
|
|
1
0,1
0 Start
1
q2
q0
12 |
1 |
0,1 |
0 |
1
q1
1 |
2 |
0
Start
0
1 q2
1
q0
1 0
13
0
q1
|
|
|
|
|
|
0 |
|
0 |
Start |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0,1 |
|
|
q1 |
|
|
|
0 |
|
|
|
14 |
q0 |
|
|
|
|
|
|
|
0 |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
0,1 |
|
|
|
|
|
|
q2 |
|
|
|
|
1 |
|
|
|
|
Start |
|
|
|
|
|
0 |
|
|
|
|
|
|
|
0 |
|
q1 |
|
0 |
|
|
|
|
1 |
||
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
q0 |
|
|
0 |
|
|
|
|
|
|
|
q3 |
|
15 |
|
|
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
q2 |
|
|
|
|
|
|
1 |
|
|
|
0 |
Start |
|
|
|
0 |
|
|
|
0 |
|
|
|
|
q0 |
|
1,0 |
|
|
q1 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
|
|
16 |
|
1 |
|
|
|
|
|
|
|
|
1 |
||
|
|
|
|
|
||
|
|
|
|
|
|
0 |
|
|
|
|
q2 |
|
|

Продолжение таблицы 9.1
1 |
|
|
2 |
|
|
|
|
|
0 |
|
|
Start |
|
|
|
|
1 |
q1 |
|
|
|
1 |
|
|
17 |
q0 |
|
0,1 |
0 |
|
|
0,1 |
||
|
|
|
|
|
|
|
1 |
|
1 |
|
|
|
|
|
|
|
|
q2 |
|
|
|
|
0 |
|
|
1 |
Start |
|
|
|
|
|
|
|
|
|
1,0 |
q1 |
|
|
|
1 |
|
|
18 |
q0 |
|
|
|
|
|
|
0 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
0 |
|
1 |
|
|
|
q2 |
|
1 |
|
|
2 |
|
|
|
|
1 |
|
|
0 |
Start |
|
|
|
|
|
|
|
|
|
1,0 |
q1 |
|
|
|
1 |
|
|
19 |
q0 |
|
|
|
|
|
|
0 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
0,1 |
|
|
|
q2 |
|
|
|
Start |
|
0 |
|
|
|
|
|
|
|
0 |
|
|
|
q0 |
1 |
|
q2 |
|
|
|
|
|
20 |
|
1 |
1 |
|
|
|
1 |
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
q1 |
|
Пример. Преобразовывать НКА в эквивалентный ему ДКА
|
1 |
|
|
1,0 |
|
|
|
0 |
|
|
q0 |
|
1 |
q2 |
|
|
|
|
|
0 |
1 |
|
|
|
|
1 |
|
1 |
|
|
|
|
||
|
q1 |
|
|
|
Start |
|
|
|
|
Конечный автомат – это структура вида |
||||
|
|
|
|
M = {S, I, О, f, g, s0, F), |
где S – конечное множество число состояний; |
||||
I – конечное |
|
множество допустимых входных символов; |
О – конечное множество допустимых выходных символов;
f – отображение множества S х I во множестве S, которое определяет выбор следующего состояния (функцию f называют функцией переходов);
g – отображение множества S х I во множестве О, которое определяет выходной символ (функцию g называют функцией выходов);
s0 S – начальное состояниеуправляющего устройства;
F S – множество завершающих состояний.
Для заданного конечного автомата
S={q0,q1,q2}
I={0,1,┴}
S0=q1
F={q0}
Функция переходов недетерминированного конечного автомата представлена в таблице
f
S |
0 |
1 |
┴ |
q0 |
q0 |
q2 |
1 |
q1 |
q2 |
q0q1 |
0 |
q2 |
q2 |
q0q1q2 |
0 |
Переходим к построению детерминированного автомата
S |
0 |
1 |
┴ |
|
q1 |
q2 |
q0q1 |
0 |
a |
q0 |
q0 |
q2 |
1 |
b |
q2 |
q2 |
q0q1q2 |
0 |
c |
q0q1 |
q0q2 |
q0q1q2 |
1 |
d |
q0q1q2 |
q0q2 |
q0q1q2 |
1 |
e |
q0q2 |
q2 |
q0q1q2 |
1 |
f |
Таблица переходов f детерминированного автомата |
|
|
||
|
|
|
|
|
S |
0 |
1 |
┴ |
|
a |
b |
c |
0 |
|
b |
c |
d |
1 |
|
c |
c |
e |
0 |
|
d |
f |
e |
1 |
|
e |
f |
e |
1 |
|
f |
c |
e |
1 |
|
Проверим состояния конечного автомата на достижимость.
Во все состояния можно попасть из начального, значит – все состояния достижимы.
Проверим состояния конечного автомата на эквивалентность. По входному символу ┴
{b,d,e,f},{a,c}
По входному символу 0
{a},{b},{f,c},{d,e}
По входному символу 1 Эквивалентные вычеркнуты.
Новая таблица переходов f’ детерминированного автомата
S |
0 |
1 |
┴ |
a |
b |
f |
0 |
b |
f |
d |
1 |
d |
f |
d |
1 |
f |
f |
d |
1 |
В итоге минимизированный конечный автомат принимает вид:
S |
0 |
1 |
┴ |
a |
f |
f |
0 |
f |
f |
f |
1 |
Самостоятельная работа №1
Построение остовного дерева
Задание
На основе алгоритма Краскала найти минимальное остовное дерево для графа, заданного матрицей длин ребер. Варианты заданий см. лабораторную работу № 5.
Краткие теоретические сведения.
Минимальные остовные деревья нагруженных графов
Граф G = (X, A) называется нагруженным, если для каждого ребра (xi,xj) определена его длина (или вес) cij.
Пусть G - связный нагруженный граф. Задача построения минимального остовного дерева заключается в том, чтобы из множества остовных деревьев найти дерево, у которого сумма длин ребер минимальна.
Приведем типичные случаи, когда возникает необходимость построения минимального остовного дерева графа.
а) Нужно соединить n городов железнодорожными линиями (автомобильными дорогами, линиями электропередач, сетью трубопроводов и т.д.) так, чтобы суммарная длина линий или стоимость была бы минимальной.
б)Требуется построить схему электрической сети, в которой клеммы должны быть соединены с помощью проводов наименьшей общей длины.
Задачу построения минимального остовного дерева можно решить с помощью следующего алгоритма.
Алгоритм Краскала.
Шаг 1. Установка начальных значений. Вводится матрица длин ребер C графа G.
Шаг 2. Выбрать в графе G ребро минимальной длины. Построить граф G2, состоящий из данного ребра и инцидентных ему вершин. Положить i = 2.
Шаг 3. Если i = n, где n - число ребер графа, то закончить работу (задача решена), в противном случае перейти к шагу 4.
Шаг 4. Построить граф Gi +1, добавляя к графу Gi новое ребро минимальной длины, выбранное среди всех ребер графа G, каждое из которых инцидентно какой-нибудь вершине графа Gi и одновременно инцидентно какойнибудь вершине графа G, не содержащейся в Gi. Вместе с этим ребром включаем в Gi +1 и инцидентную ему вершину, не содержащуюся в Gi. Присваиваем i:= i +1 и переходим к шагу 3.
Пример 3.19.
Найдем минимальное остовное дерево для графа, изображенного на рис.
3.14.

Рис. 3.14
Шаг 1. Установка начальных значений. Введем матрицу длин ребер C:
|
1 |
|
1 |
5 |
|
||
|
|
|
|
|
|
|
|
С = 1 |
|
2 |
1 |
3 |
. |
||
|
|
2 |
|
4 |
|
|
|
|
|
||||||
|
|
|
|
|
|||
1 |
1 |
4 |
3 |
|
|||
|
5 |
3 |
|
3 |
|
|
|
|
|
Шаг 2. Выберем ребро минимальной длины. Минимальная длина ребра равна единице. Таких ребер три: (x1, x2), (x1, x4), (x2, x4). В этом случае можно взять любое. Возьмем (x1, x2). Построим граф G2, состоящий из данного ребра и инцидентных ему вершин x1 и x2. Положим i = 2.
Шаг 3. Так как n = 5, то i n, поэтому переходим к шагу 4.
Шаг 4. Строим граф G3, добавляя к графу G2 новое ребро минимальной длины, выбранное среди всех ребер графа G, каждое из которых инцидентно одной из вершин x1, x2 и одновременно инцидентно какой-нибудь вершине графа G, не содержащейся в G2 т. е. одной из вершин x3, x4, x5. Таким образом, нужно выбрать ребро минимальной длины из ребер (x1, x4), (x1, x5), (x2, x3), (x2, x4), (x2, x5). Таких ребер длины единица два: (x1, x4) и (x2, x4). Можно выбрать любое. Возьмем (x1, x4). Вместе с этим ребром включаем в G3 вершину x4, не содержащуюся в G2. Полагаем i = 3 и переходим к шагу 3.
Шаг 3. Так как i n, поэтому переходим к шагу 4.
Шаг 4. Строим граф G4, добавляя к графу G3 новое ребро минимальной
длины из ребер (x1, x5), (x2, x3), (x2, x5), (x4, x5). Такое ребро длины два одно: (x2, x3). Вместе с этим ребром включаем в G4 вершину x3, не содержащуюся в G3.
Полагаем i = 4 и переходим к шагу 3.
Шаг 3. Так как i n, поэтому переходим к шагу 4.
Шаг 4. Строим граф G5, добавляя к графу G3 новое ребро минимальной
длины из ребер (x1, x5), (x2, x5), (x4, x5). Таких ребер длины три два: (x2, x5) и (x4, x5). Возьмем (x2, x5). Вместе с этим ребром включаем в G5 вершину x5, не
содержащуюся в G4. Полагаем i = 5 и переходим к шагу 3.
Шаг 3. Так как i = n, то граф G5 – искомое минимальное остовное дерево. Суммарная длина ребер равна 1 + 1 + 2 + 3 = 7.
Процесс построения минимального остовного дерева изображен на рис.
3.15.

Рис. 3.15
Самостоятельная работа №2
Построение автомата с магазинной памятью
Задание
Разработать программное средство, реализующее следующие функции:
а) ввод произвольной формальной грамматики и проверка ее на принадлежность к классу КС-грамматик;
б) построение МП-автомата по КС-грамматике; Продемонстрировать разбор некоторой входной строки с помощью построенного автомата для случаев:
а) входная строка принадлежит языку исходной КС-грамматики и допускается МП-автоматом;
б) входная строка не принадлежит языку исходной КС-грамматики и не принимается МП-автоматом.
Индивидуальные варианты заданий представлены в таблице 5.1.
Таблица 10.1 - Варианты заданий
Вариант |
Задание |
1 |
G=({S, A, B, D, E}, {a, b, c, e}, P, S), где P: 1) S→AB | ; 2) A→Aa | S | a; 3) B→bD |
|
| bS | b; 4) D→ccD; 5) E→eE |e. |
2 |
G=({E, T, F, G, H}, {+, -, *, /, n, m, h}, P, E), где P:1) E→T | E+T | E-T | ; 2) T→F | |
|
F*T | F/T | ; 3) F→G | Fn | n;4) G→Gm; 5) H→Hh | h. |
3 |
G=({E, T, F, G, H}, {+, -, *, /, n, m, h}, P, E), где P:1) E→T | E+T | E-T | ; 2) T→F | |
|
F*T | F/T | ; 3) F→G | Fn | n; 4) G→Gm; 5) H→Hh | h. |
4 |
G=({R, T, F, G, K}, {m, i, j, k, ^, ~, }, P, R), где P:1) R→R~T | R^T | ; 2) T→F |
|
| Fi | Fj | Gk | ; 3) G→GkG; 4) K→Ki | Km | m. |
5 |
G=({S, X, Y, Z, K}, {x, y, z, k, #, $}, P, S), где P: 1) S→X | Y | Z; 2) X→x#X | x#Y | |
|
; 3) Y→Yy$ |Yz$ | $ | ; 4) Z→Zz$;5) K→Kk$ | k$. |
6 |
G=({S, L, M, P, N}, {n, m, l, p, @, }, V, S), где V: 1) S→@nL | @mM | P; 2) L→M |
|
| Ll | Lm | ; 3) M→L | Mm | mm; 4) N→pN@ | @; 5) P→nmP. |
7 |
G=({X, Y, Z, K, L}, {a, b, l, =, <, >, , , ¬}, V, X), где V:1) X→Y | Y=Y | Y<Y | |
|
Y>Y | K; 2) Y→Y Z | Y Z | ; 3) Z→ ¬ a | ¬ b| ;4) K→ ¬ K; 5) L→ l | a | b. |
8 |
G=({Q, A, B, C, D}, {0, 1, -}, P, Q), где P: 1) Q→01A | 01B | A; 2) A→ 0B1 | B | 1 | |
|
; 3) B→BA0 | B1 | C | ; 4) C→0C11; 5) D→ - D1 | -0 | -1. |
9 |
G=({R, T, U, W, V}, {0, 1, +, -, *, /}, P, R), где P: 1) R→T1T | T1U | W | ; 2) T→U | |
|
T01 | T10 | ; 3) U→+U | +0 | +1 4) W→W-W | W+W; 5) V→*0 | /1. |
10 |
G=({S, R, T, F, E}, {a, b, k, {, [, }, ], }, P, S), где P: 1) S→{R | [ R; 2) R→Ra} | Ra] | |
|
a | T | F | ; 3) F→{F} | bb; 4) T→[T]; 5) E→k . |
11 |
G=({Y, K, M, L, S}, {a, b, *, /, ^}, P, Y), где P: 1) Y→KS | KM; 2) K→K* | K/ | S; 3) |

S→Sa/ | Sb/ | ; 4) M→*M*; 5) L→L^ | ^a.
12G=({S, B, A }, {a, b,x,{,}}, P, S), где P: 1)S → aA{xx};2)A → bA | cBx | ;3)B → bSc
Продолжение таблицы 10.1
13 |
G=({S, B, A }, {a, b,}, P, S), где P: 1)S → aSB | bA; 2) A → aS | cA | ; 3)B → bB | d |
14 |
G=({S, B, A,}, {a, b,}, P, S), где P: 1)S → cA | B | d; 2) A → abA | c | ; 3)B → bSc | |
|
aAb |
15 |
G=({S, B, A }, {a, b,{,}}, P, S), где P: 1)S → bABCb | d; 2)A → aA | cB | ; 3)B → |
|
Sc 4)C → a {bb} |
16 |
G=({S, B, A, }, {a, b,{}}, P, S), где P: 1) S → aAb | cC; 2)A → a { bab };3)B → cAc | |
|
aB | ;4)C→Bb |
17 |
G=({S, B, A, }, {a, b,{}}, P, S), где P: 1)S → aSB | bAf | ; 2)A → bAc | cS;3)B → |
|
cB | d |
Краткие теоретические сведения.
КС-языки можно распознавать с помощью автомата с магазинной памятью (МП-автомата).
Алгоритм Построения МП-автомата по КС-грамматике.
Построим МП-автомат, выполняющий левосторонний разбор. Данный автомат обладает только одним состоянием и принимает входную строку
опустошением магазина. Стек используется для размещения текущей сентенции, первоначально это начальный символ грамматики. Очередная сентенция получается заменой верхнего нетерминала стека.
Вход: КС-грамматика G = (VT,VN , P, S) .
Выход: МП-автомат M = (Q, T, N, F, q0, n0, Z) такой, что L(M) = L(G). Шаг 1. Определить Q = {q}, q0 = q, Z = , N = VT VN, T = VT, N0 = S.
Шаг 2. Для каждого правила вида (А→β ) P, где β V*, сформировать магазинную функцию вида F(q, , A) = (q, β) . Эти функции предписывают замещать нетерминал в вершине стека по правилу грамматики.
Шаг 3. Для каждого t VT сформировать магазинную функцию вида F(q, t, t) = (q, ), которая выталкивает из стека символ, совпадающий с входным, и перемещает читающую головку. Эти функции обеспечивают опустошение стека.
Пример 1. Дана КС-грамматика:
G({+, (, ), a}, {S, A}, {S→S+A | A, A→(S) | a}, {S}). Последовательность построения МП-автомата будет иметь вид.
1)Q = {q}, q0 = q, T = {+, (, ), a }, N = {+, (, ), a, S, A}, N0 = S, Z = .
2)F(q, , S) = (q, S+A), F(q, , S) = (q, A), F(q, , A) = (q, (S)); F(q, , A) = (q, a).
3)F(q, t, t) = (q, ) для каждого t {+, (, ), a}.
Распознавание строки (а) построенным МП-автоматом представлено в таблице 5.1. Полученный МП-автомат является недетерминированным Таблица 5.1 – Распознавание МП-автоматом строки (а)
Номер конфигурации |
Текущее состояние |
Входная строка |
Содержимое магазина |
1 |
q |
(a) |
S |
2 |
q |
(a) |
A |
3 |
q |
(a) |
(S) |
4 |
q |
a) |
S) |
5 |
q |
a) |
A) |