Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МУ к лаб по ДМ_ускор

.pdf
Скачиваний:
42
Добавлен:
07.06.2015
Размер:
1.27 Mб
Скачать

Лабораторная работа №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)