Опубликован: 21.08.2007 | Уровень: специалист | Доступ: свободно | ВУЗ: Тверской государственный университет
Лекция 4:

Конечные автоматы: преобразователи и распознаватели

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Аннотация: Конечные автоматы-преобразователи. Пример: сложение двоичных чисел. Конечные автоматы-распознаватели. Конечно-автоматные языки. Доказательство правильности автомата. Произведение автоматов. Замкнутость класса конечно-автоматных языков относительно теоретико-множественных операций

Переработка информации с помощью конечных автоматов

Конечные автоматы являются математической моделью устройств, перерабатывающих дискретную входную информацию в режиме "реального времени", т.е. в темпе ее поступления.

Автомат

Автомат

На такие устройства в последовательные дискретные моменты времени 1,2, ..., t, t+1,... поступают входные сигналы x(1),x(2), ..., x(t),x(t+1),... и в ответ на них автомат A вырабатывает выходные сигналы y(1) y(2), ..., y(t), y(t+1),.... Конечные автоматы характеризуются двумя особенностями.

  1. Отсутствие предвосхищения: выходной сигнал y(t), выдаваемый автоматом в момент t, зависит лишь от полученных к этому времени входов x(1),x(2), ..., x(t), т.е. автомат не может предвосхитить будущие входы и заранее на них отреагировать. Таким образом, имеется некоторая функция выходов \psi (x(1),x(2), \dots , x(t))= y(t), определяющая очередной выход по предшествующему входу.
  2. Конечная память: в каждый момент t информация в автомате о полученном к этому моменту входе x(1),x(2), ..., x(t) конечна. Это свойство удобно интерпретировать следующим образом: автомат имеет конечное множество состояний Q и в каждый момент находится в одном из этих состояний. При получении очередного входа состояние может измениться. Таким образом, состояние q \in  Q, в котором находится автомат после получения входной последовательности x(1),x(2), ..., x(t), и представляет информацию об этой последовательности, используемую в дальнейшей работе автомата при определении следующего состояния и выхода.

Наше обсуждение приводит к следующему определению конечного автомата с выходом.

Определение 4.1. Конечный автомат - преобразователь - это система вида

A = <\Sigma_X, \Sigma_Y, Q, q_0, \Phi, \Psi>

включающая следующие компоненты:

  • \Sigma _{X}=\{ a_{1}, \dots  , a_{m}\}  (m \ge  1) - конечное множество - входной алфавит ;
  • \Sigma _{Y}=\{ b_{1}, \dots  , b_{r}\}  (r \ge  1) - конечное множество - выходной алфавит ;
  • Q={q0, ... , qn-1} (n >= 1) - конечное множество - алфавит внутренних состояний;
  • q_{0} \in  Q - начальное состояние автомата;
  • \Phi : Q \times \Sigma _{X} \to  Q - функция переходов, \Phi (q, a) - это состояние, в которое переходит автомат из состояния q, когда получает на вход символ a ;
  • \psi : Q \times \Sigma _{X} \to  \Sigma _{Y} - функция выходов, \psi (q, a) - это символ из \Sigma _{Y}, который выдает на выход автомат в состоянии q, когда получает на вход символ a.

Иногда пару функций \Phi , \psi называют программой автомата A и задают как список из m n команд вида q_{i}a_{j} \to  \Phi (q_{i},a_{j}) / \psi (q_{i},a_{j}).

Другой удобный способ задания функций \Phi и \psi - табличный. Каждая из них определяется таблицей (матрицей) размера n x m, строки которой соответствуют состояниям из Q, а столбцы - символам из входного алфавита \Sigma _{X}. В первой из них на пересечении строки qi и столбца aj стоит состояние \Phi (q_{i},a_{j}), а во второй - выходной символ \psi (q_{i},a_{j}).

Еще один способ представления конечного автомата основан на использовании ориентированных размеченных графов.

Определение 4.2. Диаграмма автомата A = <\Sigma _{X}, \Sigma _{Y}, Q, q_{0}, \Phi , \psi > - это ориентированный (мульти) граф DA=(Q, E) с помеченными ребрами, в котором выделена вершина- начальное состояние q0 и из каждой вершины q \in  Q выходит |\Sigma _{X}| ребер, помеченных парами символов a / b (a \in  \Sigma _{X}, b \in  \Sigma _{Y}). Таким образом, для каждой q \in  Q и каждого символа a \in  \Sigma _{X} имеется единственное ребро с меткой a / \psi (q,a) из q в вершину q' =\Phi (q,a) .

Как автомат A перерабатывает входное слово x1x2 ... xt? Он начинает работу в состоянии q(0)=q0. Затем, получив (прочитав) входной символ x1, переходит в состояние q(1)= \Phi (q_{0},x_{1}) и выдает символ y(1)= \psi (q_{0},x_{1}). Далее, получив x2 A переходит в состояние q(2)= \Phi (q(1),x_{2}) и выдает символ y(2)= \psi (q(1),x_{2}) и т.д. Таким образом, работа автомата, характеризуется последовательностью проходимых им состояний q(0), q(1), ... , q(t), ... и последовательностью выходных символов y(1), ... , y(t), .... Они определяются следующими реккурентными соотношениями:

\begin{array}{l}
q(0)=q_0\\ q(1)= \Phi(q(0),x_1)\\ y(1)= \Psi(q_0,x_1)\\ \ldots\\ q(t+1)= \Phi(q(t),x_i)\\ y(t+1)= \Psi(q(t),x_i)\\ \ldots\\
\end{array}

Рассмотрим несколько примеров автоматов-преобразователей.

Пример 4.1. Сумматор последовательного действия

Мы уже строили схему из функциональных элементов SUMn, реализующую для фиксированного n суммирование двух n -разрядных двоичных чисел. Построим теперь конечный автомат SUM, который сможет складывать два двоичных числа произвольной разрядности. На вход этого автомата будут последовательно подаваться пары x(i)= (x1(i),x2(i)) соответствующих i -ых (1<= i <= r) разрядов двух двоичных чисел x1=x1(r) ... x1(2) x1(1) и x2=x2(r) ... x2(2) x2(1), а признаком завершения чисел будет служить символ x(r+1)= * (если одно из слагаемых короче другого, то будем считать, что недостающие разряды - нули). Выходом автомата должна быть последовательность (r+1) двоичных разрядов суммы y = x1 + x2:

\begin{tabular}{ccccc}
 & x_1(r) & \ldots & x_1(2)& x_1(1)\\
 +& x_2(r) & \ldots & x_2(2)& x_2(1)\\
\hline y(r+1) & y(r) & \ldots & y(2)& y(1)
\end{tabular}

Таким образом, входной алфавит автомата: \Sigma _{X} =\{  (00), (01), (10), (11), *\}, а выходной алфавит: \Sigma _{Y}=\{  0, 1\}. Что нужно знать автомату SUM о первых i разрядах x1 и x2, чтобы получив их (i+1) -ые разряды (x1(i+1),x2(i+1)), верно определить выход y(i+1)? Ясно, что для этого достаточно знать, был ли перенос в i -ый разряд. Поэтому можно зафиксировать множество состояний Q = {q0, q1}, в котором q0 означает, что переноса не было, а q1 - что перенос был. Теперь легко построить таблицы, представляющие функции переходов и выходов автомата SUM.

\Phi : Q\setminus \Sigma _{X} (00) (01) (10) (11) *
q0 q0 q0 q0 q1 q0
q1 q0 q1 q1 q1 q0
\Psi : Q\setminus \Sigma _{X} (00) (01) (10) (11) *
q0 0 1 1 0 0
q1 1 0 0 1 1

Заметим, что после получения символа * автомат SUM переходит в начальное состояние q0 и готов выполнять сложение следующей пары чисел.

 Диаграмма автомата SUM

Рис. 4.1. Диаграмма автомата SUM

На диаграмме автомата у вершины q0 четыре петли, а у вершины q1 - три, объединены в одну с четырьмя и тремя метками, соответственно. Точно так же слиты два ребра из q1 в q0. Стрелкой указано начальное состояние.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Алексей Семенов
Алексей Семенов
Россия, Москва, МГУПИ