Опубликован: 09.07.2007 | Уровень: профессионал | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 3:

Конечные автоматы

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Аннотация: В данной лекции рассматриваются два наиболее распространенных способа конечного задания формального языка: грамматики и автоматы. Рассматриваются конечные автоматы, соответствующие в иерархии Хомского праволинейным грамматикам, определяются понятия конечного автомата, недетерминированного конечного автомата и распознаваемого конечным автоматом языка. Приведены практические примеры и упражнения для закрепления материала

Два наиболее распространенных способа конечного задания формального языка - это грамматики и автоматы. Автоматами в данном контексте называют математические модели некоторых вычислительных устройств. В этой лекции рассматриваются конечные автоматы, соответствующие в иерархии Хомского праволинейным грамматикам. Более сильные вычислительные модели будут определены позже, в лекциях "10" , "14" и "15" . Термин "автоматный язык" закреплен за языками, распознаваемыми именно конечными автоматами, а не какими-либо более широкими семействами автоматов (например, автоматами с магазинной памятью или линейно ограниченными автоматами).

В разделе 2.1 определяются понятия конечного автомата (для ясности такой автомат можно называть недетерминированным конечным автоматом) и распознаваемого конечным автоматом языка. В следующем разделе дается другое, но эквивалентное первому определение языка, распознаваемого конечным автоматом. Оно не является необходимым для дальнейшего изложения, но именно это определение поддается обобщению на случаи автоматов других типов.

В разделе 2.3 доказывается, что тот же класс автоматных языков можно получить, используя лишь конечные автоматы специального вида (они читают на каждом такте ровно один символ и имеют ровно одно начальное состояние). Во многих учебниках конечными автоматами называют именно такие автоматы.

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

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

Не все конечные автоматы подходят для конструирования распознающих устройств, пригодных для практических приложений, так как в общем случае конечный автомат не дает точного указания, как поступать на очередном шаге, а разрешает продолжать вычислительный процесс несколькими способами. Этого недостатка нет у детерминированных конечных автоматов (частного случая недетерминированных конечных автоматов), определенных в разделе 2.6. В разделе 2.7 доказывается, что каждый автоматный язык задается некоторым детерминированным конечным автоматом.

2.1. Недетерминированные конечные автоматы

Определение 2.1.1. Конечный автомат (finite automaton, finite-state machine) - это пятерка M = \langle Q , \Sigma , \Delta , I , F \rangle, где \Sigma - конечный входной алфавит (или просто алфавит ) данного конечного автомата, \langle Q и \Delta - конечные множества,

\Delta \subseteq Q \times \Sigma ^* \times Q ,
I \subseteq Q, F \subseteq Q. Элементы Q называются состояниями (state), элементы I - начальными (initial) состояниями, элементы F - заключительными или допускающими (final, accepting) состояниями. Если \langle p , x , q \rangle \in \Delta, то \langle p , x , q \rangle называется переходом (transition) из p в q, а слово x - меткой (label) этого перехода.

Пример 2.1.2. Пусть Q = {1,2}, \Sigma = \{ a , b \}, I = {1}, F = {2},

\Delta = \{
\langle 1 , aaa , 1 \rangle ,\
\langle 1 , ab , 2 \rangle ,\
\langle 1 , b , 2 \rangle ,\
\langle 2 , \varepsilon , 1 \rangle
\} .
Тогда \langle Q , \Sigma , \Delta , I , F \rangle - конечный автомат.

Замечание 2.1.3. Конечные автоматы можно изображать в виде диаграмм состояний (state diagram) (иногда их называют диаграммами переходов (transition diagram)). На диаграмме каждое состояние обозначается кружком, а переход - стрелкой. Стрелка из p в q, помеченная словом x, показывает, что \langle p , x , q \rangle является переходом данного конечного автомата. Каждое начальное состояние распознается по ведущей в него короткой стрелке. Каждое допускающее состояние отмечается на диаграмме двойным кружком.

Пример 2.1.4. На диаграмме изображен конечный автомат из примера 2.1.2.

\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
  *=[o][F-]{1}
 \ar @`{+/l16mm/} [] ^{}
 \rloop{0,1} ^{aaa}
 \ar `ur_r{+/u7mm/}`r_dr{[0,2]}^{ab} "1,3"  
 \ar  "1,3"  ^{b}
&
& *=[o][F=]{2}
 \ar `dl_l{+/d7mm/}`l_ul{[0,-2]}^{\varepsilon} "1,1"  
}

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

Пример 2.1.6. На диаграмме снова изображен конечный автомат из примера 2.1.2.

\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
  *=[o][F-]{1}
 \ar @`{+/l16mm/} [] ^{}
 \rloop{0,1} ^{aaa}
 \ar  "1,3" <1mm> ^{ab,b}
& 
& *=[o][F=]{2}
 \ar  "1,1" <1mm> ^{\varepsilon}
}

Определение 2.1.7. Путь (path) конечного автомата - это кортеж \langle q_0 , e_1 , q_1 , e_2 , \ldots , q_n \rangle, где n \geqslant 0 и e_i = \langle q_{i-1} , w_i , q_i \rangle \in \Delta для каждого i. При этом q0 - начало пути qn - конец пути n - длина пути w1...wn - метка пути.

Замечание 2.1.8. Для любого состояния q \in Q существует путь \langle q \rangle. Его метка - \varepsilon, начало и конец совпадают.

Определение 2.1.9. Путь называется успешным если его начало принадлежит I, а конец принадлежит F.

Пример 2.1.10. Рассмотрим конечный автомат из примера 2.1.2. Путь \langle
1 ,\
\langle 1 , b , 2 \rangle ,\
2 ,\
\langle 2 , \varepsilon , 1 \rangle ,\
1 ,\
\langle 1 , aaa , 1 \rangle ,\
1 ,\
\langle 1 , b , 2 \rangle ,\
2
\rangle является успешным. Его метка - baaab. Длина этого пути - 4.

Определение 2.1.11. Слово w допускается (is accepted, is recognized) конечным автоматом M, если оно является меткой некоторого успешного пути.

Определение 2.1.12. Язык, распознаваемый конечным автоматом M, - это язык L(M), состоящий из меток всех успешных путей (то есть из всех допускаемых данным автоматом слов). Будем также говорить, что автомат M распознает (recognizes, accepts) язык L(M).

Замечание 2.1.13. Если I \cap F \neq \varnothing, то язык, распознаваемый конечным автоматом \langle Q , \Sigma , \Delta , I , F \rangle, содержит \varepsilon.

Пример 2.1.14. Пусть M = \langle Q , \Sigma , \Delta , I , F \rangle, где Q = {1,2}, \Sigma = \{ a , b \}, I = {1}, F = {1,2},

\Delta = \{
\langle 1 , a , 2 \rangle ,\
\langle 2 , b , 1 \rangle
\} .
\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
  *=[o][F=]{1}
 \ar @`{+/l16mm/} [] ^{}
 \ar  "1,2" <0.6mm> ^{a}
& *=[o][F=]{2}
 \ar  "1,1" <0.6mm> ^{b}
}
Тогда
L ( M ) = \{ (ab)^n \mid n \geqslant 0 \} \cup \{ (ab)^n a \mid n \geqslant 0 \} .

Определение 2.1.15. Два конечных автомата эквивалентны, если они распознают один и тот же язык.

Определение 2.1.16. Язык L называется автоматным (finite-state language), если существует конечный автомат, распознающий этот язык.

Замечание 2.1.17. Обычно в учебниках используется более узкое определение недетерминированного конечного автомата, но это не меняет класса автоматных языков (см. лемму 2.3.3.).

Пример 2.1.18. Рассмотрим однобуквенный алфавит \Sigma = \{ a \}. При любых фиксированных k \in \mathbb{N} и m \in \mathbb{N} язык \{ a^{ k + m n } \mid n \in \mathbb{N} \} является автоматным.

Замечание 2.1.19. Каждый конечный язык является автоматным.

Определение 2.1.20. Состояние q достижимо (reachable) из состояния p, если существует путь, началом которого является p, а концом - q.

Лемма 2.1.21. Каждый автоматный язык распознается некоторым конечным автоматом, в котором каждое состояние достижимо из некоторого начального состояния и из каждого состояния достижимо хотя бы одно заключительное состояние.

Пример 2.1.22. Рассмотрим конечный автомат \langle Q , \Sigma , \Delta , I , F \rangle, где Q = {1,2,3,4}, \Sigma = \{ a , b , c , d \}, I = {1,2,4}, F = {1,3,4},

\Delta = \{
\langle 1 , a , 2 \rangle ,\
\langle 1 , b , 4 \rangle ,\
\langle 3 , c , 4 \rangle ,\
\langle 4 , d , 1 \rangle
\} .
\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
  %
& *=[o][F=]{1}
 \ar @`{+/l16mm/} [] ^{}
 \ar  "2,1"  _{a}
 \ar  "2,2" <0.6mm> ^{b}
& *=[o][F=]{3}
 \ar  "2,2"  ^{c}
\\
  *=[o][F-]{2}
 \ar @`{+/l16mm/} [] ^{}
& *=[o][F=]{4}
 \ar @`{+/l16mm/} [] ^{}
 \ar  "1,2" <0.6mm> ^{d}
& 
}
Удалим те состояния (и содержащие их переходы), которые не удовлетворяют требованиям леммы 2.1.21. Получается эквивалентный конечный автомат \langle Q' , \Sigma , \Delta' , I' , F' \rangle, где Q' = {1,4}, I' = {1,4}, F' = {1,4},
\Delta' = \{
\langle 1 , b , 4 \rangle ,\
\langle 4 , d , 1 \rangle
\} .
\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
  *=[o][F=]{1}
 \ar @`{+/l16mm/} [] ^{}
 \ar  "2,1" <0.6mm> ^{b}
\\
  *=[o][F=]{4}
 \ar @`{+/l16mm/} [] ^{}
 \ar  "1,1" <0.6mm> ^{d}
}

Замечание 2.1.23 Естественным обобщением конечного автомата является конечный преобразователь (finite-state transducer), позволяющий на каждом такте отправить несколько символов в дополнительный "выходной" поток. В некоторых книгах конечными автоматами называют именно такие устройства (с выходным потоком).

В данном пособии конечные преобразователи рассматриваться не будут.

Упражнение 2.1.24. Найти конечный автомат, распознающий язык \{ u c v \mid u \in \{a,b\}^* ,\ v \in \{a,b\}^* \}

Упражнение 2.1.25. Найти конечный автомат, распознающий язык \{ w \in \{a,b,c\}^* \mid | w |_c \neq 1 \}

Упражнение 2.1.26. Найти конечный автомат, распознающий язык \{a,b\}^* - (\{ a^n \mid n \geqslant 0 \} \cup \{ b^n \mid n \geqslant 0 \})

Упражнение 2.1.27. Найти конечный автомат, распознающий язык \{ a u b \mid u \in \{a,b\}^* \} \cup
 \{ b u a \mid u \in \{a,b\}^* \}

Упражнение 2.1.28. Найти конечный автомат, распознающий язык \{ w \in \{a,b\}^* \mid | w |_a \geqslant 3 \}

Упражнение 2.1.28. Найти конечный автомат, распознающий язык \{ w \in \{a,b\}^+ \mid f(w) \ \vdots \ 4 \}, где f( \varepsilon ) \rightleftharpoons 0, f( x a ) \rightleftharpoons 1 - f( x ) и f( x b ) \rightleftharpoons -1 - f( x ) для любого x \in \{a,b\}^*

< Лекция 2 || Лекция 3: 1234 || Лекция 4 >
Юлия Маковецкая
Юлия Маковецкая

Упражнение 2.1.25

Евгения Гунченко
Евгения Гунченко

Сдавала тест экстерном, результат получен 74 после принятия данного результата и соответственно оплаты курса, будет ли выдано удостоверение о повышении квалификации?

Юрий Фролов
Юрий Фролов
Украина
Руслан Мухамедьяров
Руслан Мухамедьяров
Россия, Казань, КФУ