Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалка по теории автоматов (ТА).doc
Скачиваний:
199
Добавлен:
11.04.2014
Размер:
864.77 Кб
Скачать

Вопрос 26 [part2]

Это означает, что следующее разбиение πi+1 в каждой итерации строится как сумма ?????? разбиения и разбиения ρ(δ(v,x)δ(s,x) для каждой пары состояний r и s принадлежащих одному блоку разбиения предыдущей итерации для каждого входного сигнала.

3. Замыкание определяется как; такое разбиение, [[ π]]A=πi, что πi+1= πi

ρ(r,s) – элементарное разбиение, которое объединяется в один блок состояния r и s. ρ(r,s) – {< r,s>,<>,<>…<>}

Алгоритм поиска конгруэнции реализуется в два этапа: 1. Для каждой пары r и s различных состояний А стремится (r,s):r,s|εS, r≠s строится замыкание [[ρ(r,s)]]A. 2. Для построения остальных конгруэнций пишутся всевозможные суммы ?????????? на первом этапе замыканий ∑[[ ρ(ri,si)]]

Пример:A:

0

1

2

3

4

5

6

7

a

3

4

3

2

1

1

2

4

b

4

7

0

6

5

4

3

3

Для этого А нужно построить 28 замыканий.

ρ(0,1)={<0,1>;<2>;<3>;<4>;<6>;<5><7>}

7+6+5…=28

Рассмотрим вычисление замыкания [[ρ(0,1)]]А

π0= ρ(0,1)

π1=π0+ ρ(δ(0,a),δ(1,a))+ ρ(δ(0,b),δ(1,b)) = π0+ ρ(3,4)+ ρ(4,7)={<0,1>,<2>,<3,4,7>,<5>,<6>}

1.2.2. π2=π1+ ρ(δ(3,a),δ(4,a))+ ρ(δ(3,b),δ(4,b))+ρ(δ(3,a),δ(7,a))+ρ(δ(3,b),δ(7,b))+ ρ(δ(4,a),δ(7,a))+ρ(δ(4,b),δ(7,b)= π1+ ρ(1,2)+ ρ(5,6)+ ρ(2,4)+ ρ(3,6)+ ρ(1,4)+ ρ(3,5)=<0,1,2,3,4,5,6,7>=I

π0= ρ(0,2)

π1=π0= ρ(δ(0,a),δ(2,a))+ ρ(δ(0,b)δ(2,b)) = π0+ ρ(3,3)+ ρ(0,4)= {<0,2,4>,<1>,<3>,<5>,<6>,<7>}

π2=π1+ ρ(δ(0,a),δ(4,a))+ ρ(δ(0,b),δ(4,b))+ρ(δ(2,a),δ(4,a))+ρ(δ(2,b),δ(4,b))= π1+ ρ(1,3)+ ρ(4,5)+ ρ(0,5)+ ρ(4,5)={<0,2,4,5>,<1,3>,<6>,<7>}

[[ρ(0,2)]]A={<0,2,4,5>;<1,3>;<6,7>} – первая конгруэнция

В результате завершения первого этапа алгоритма после анализа всех 28 пар состояний получим сходные конгруэнции.

π1={<0,2,4,5>;<1,3>;<6,7>}

π2={<0,2,4,5>;<1,3,6,7>}

π3={<0,2>;<1>;<2>;<3,6>;<4>;<5>;<7>}

π4={<0,7>;<1,2>;<3,4,5,6>}

π5={<0,5>;<1,3>;<2,4>;<6,7>}

π6={<0>;<1>;<2>;<3,>;<4,5>;<6>;<7>}

π7={<0,5>;<1????????,3,6,7>;<2,4>}

π8={<0,7>;<1,2>;<3,4>;<5,6>}

π9={<0,5,6,7>;<1,2,3,4>}

Полученные конгруэнции можно использовать для последовательной и параллельной декомпозиции автомата.

[pg.65]

Вопрос 27. Объединение нескольких уа в один

На первом этапе необходимо построить совместный алгоритм работы объединенных автоматов как общего автомата. Номер автомата кодируется и затем код автомата является одним из входных сигналов синтезируемого автомата.

Подобные автоматы можно строить и при программной и при аппаратной реализации А. При этом в обоих случаях можно оставлять структуру каждого А без изменений либо, использовать часть схемы или программы автомата в нескольких подавтоматах.

При синтезе общего закона функционирования автомата, составленного из двух автоматов, можно воспользоваться, например, матрицей переходов / выходов (МПВ) для обоих автоматов, ввести доп. входной сигнал, указывающий на номер матрицы, и произвести синтез совмещенной матрицы.

Вопрос 28. Программная реализация ка. Варианты реализации. Шаблон Состояние.

Рассмотрим другой пример реализации со статическими переменными. Смоделируем турникет.

Объектная реализация автоматов

В Объектно-ориентированном программировании данный стиль реализации автомата не при приветствуется, т.к. много операторов-ветвлений и выбора, которых в ООП пытаются избежать. Даже на данных примерах видно, что код программы становится запутанным, трудновоспринимаемым и модифицированным.

В ООП стремятся перейти от развилок и выбора к наследованию. В данном случае лучше использовать один из так называемых patten’ов или шаблонов (не template) и паттерн State (состояние). Впервые pattern были описаны в книге GoF, в которой описано 23 состояния.

Рассмотрим пример шаблона State для моделирования турникета.

Для этого рассмотрим диаграмму классовUML (Unified modeling language) – язык диаграмм

.

Где:

+ - public

- - private

# - protected

 ассоциация

- - - > - зависимость

- - -- наследование

<<interface>> - абстрактный класс, который не может иметь экземпляров и имеет хотя бы один нереализованный метод.

Turnstile (турникет) – класс, реализующий работу турникета, аналог автомата Глушкова.

Им управляет Turnstile FSM (Finite State Machine – КА) – этот класс реагирует на входные события coin и pass и осуществляет переключение состояний с помощью метода Setstate. Но этот класс реализует переключение состояний совсем не так, как было рассмотрено выше: он делегирует реакцией на входные события конкретного состояния, реализующие интерфейс Turnstile State, т.е. наследует Turnstile State. Turnstile State – интерфейс одного состояния, реагирующего на входные сигналы coin и pass. Получая событие (например coin) класс Turnstile FSM вызывает соответствующий метод текущего состояния Turnstile State, при этом сам Turnstile FSM не знает, какое конкретное состояние обрабатывает само событие.

Это позволяет:

1) отделить поведение А от логики его переключения

2) данная схема позволяет заменить вложения управляющих структур наследованием, используя базовые абстрактные состояния.

При этом использование интерфейса позволяет добавлять новые состояния не изменяя другие части программы, с условием, что не изменяются входным сигналы и т.п.