Упражнение 2.1.25 |
Конечные автоматы
2.6. Детерминированные конечные автоматы
Определение 2.6.1.
Конечный автомат
называется детерминированным
(deterministic),
если
- множество I содержит ровно один элемент;
- для каждого перехода
выполняется равенство |x| = 1 ;
- для любого символа
и для любого состояния
существует не более одного состояния
со свойством
.
Пример 2.6.2. Конечный автомат из примера 2.1.14 является детерминированным.
Определение 2.6.3.
Детерминированный конечный автомат
называется полным (complete),
если для каждого состояния
и для каждого символа
найдется такое состояние
,
что
.
Пример 2.6.4.
Конечный автомат из примера 2.1.14
эквивалентен полному детерминированному конечному автомату ,
где Q = {1,2,3},
, I = {1}, F = {1,2},
![\Delta = \{
\langle 1 , a , 2 \rangle ,\
\langle 1 , b , 3 \rangle ,\
\langle 2 , a , 3 \rangle ,\
\langle 2 , b , 1 \rangle ,\
\langle 3 , a , 3 \rangle ,\
\langle 3 , b , 3 \rangle
\} .](/sites/default/files/tex_cache/81aec0783220a84913ded6358c7eac72.png)
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
*=[o][F=]{1}
\ar @`{+/l16mm/} [] ^{}
\ar "1,2" <0.6mm> ^{a}
\ar "2,2" _{b}
& *=[o][F=]{2}
\ar "1,1" <0.6mm> ^{b}
\ar "2,2" ^{a}
\\
%
& *=[o][F-]{3}
\rloop{1,0} ^{a}
\rloop{0,-1} ^{b}
}](/sites/default/files/tex_cache/137f2b115f8d217ee9866f93436cd22a.png)
Замечание 2.6.5.
Некоторые авторы используют в определении
полного детерминированного конечного автомата вместо
отношения
функцию
.
От функции
можно перейти
к отношению
,
положив
![\Delta = \{ \langle p , a , \delta ( p , a ) \rangle \mid
p \in Q , \; a \in \Sigma \} .](/sites/default/files/tex_cache/4d3da0846d5a89622ad6d568470d2cf3.png)
Упражнение 2.6.6. Является ли детерминированным следующий конечный автомат?
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix @=1mm{
%
&
& *=[o][F-]{2}
\ar "2,5" ^{b}
\rloop{0,1} ^{a}
\rloop{0,-1} _{b}
&
&
\\
*=[o][F-]{1}
\ar @`{+/l16mm/} [] ^{}
\ar "1,3" ^{a}
\ar "3,3" ^{b}
&
&
&
& *=[o][F=]{4}
\\
%
&
& *=[o][F-]{3}
\rloop{0,1} _{a}
\rloop{0,-1} ^{b}
\ar "2,5" ^{a}
&
&
}](/sites/default/files/tex_cache/6729c3af8584fabc3cb10f66e74b6029.png)
Упражнение 2.6.7. Является ли полным следующий
детерминированный конечный автомат с алфавитом ?
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
*=[o][F=]{1}
\ar @`{+/l16mm/} [] ^{}
\rloop{0,1} ^{a}
\rloop{0,-1} ^{b}
\ar "1,2" ^{c}
& *=[o][F-]{2}
\rloop{0,1} ^{a}
\rloop{0,-1} ^{b}
\ar "1,3" ^{c}
& *=[o][F=]{3}
\rloop{0,1} ^{a}
\rloop{0,-1} ^{b}
\rloop{1,0} ^{c}
}](/sites/default/files/tex_cache/5b302650f6bcfbefe68383da9bb69af6.png)
2.7. Преобразование конечного автомата к детерминированному виду
Теорема 2.7.1 Каждый автоматный язык распознается некоторым полным детерминированным конечным автоматом.
Доказательство.
Без ограничения общности можно предположить,
что исходный язык задан конечным автоматом ,
содержащим только переходы с метками длины единица.
Для любых
и
обозначим
![\Delta _ a ( H ) \rightleftharpoons \{ q \in Q \mid
\langle p , a , q \rangle \in \Delta
\mathspace\text{для некоторого}\mathspace p \in H \} .](/sites/default/files/tex_cache/c415777aeb57559d52b464e0f7f2031b.png)
Обозначим через
множество всех подмножеств множества Q.
Построим искомый полный детерминированный конечный автомат
,
положив
,
![\Delta' = \{ \langle H , a , \Delta _ a ( H ) \rangle \mid
H \subseteq Q ,\; a \in \Sigma \} ,](/sites/default/files/tex_cache/ecdd916dcabcdd21343c97ad7d17d42b.png)
![I' = {I}](/sites/default/files/tex_cache/5749016895012ac10233a7abba555130.png)
![F' = \{ H \subseteq Q \mid H \cap F \neq \varnothing \}](/sites/default/files/tex_cache/187f7aace635118f9856e584f4a1cc9e.png)
Пример 2.7.2.
Пусть .
Рассмотрим конечный автомат
,
где
![\Delta = \{
\langle 1 , a , 1 \rangle ,\
\langle 1 , b , 1 \rangle ,\
\langle 1 , a , 2 \rangle ,\
\langle 2 , b , 3 \rangle
\} .](/sites/default/files/tex_cache/a85771df4f2063f2e300d5fecda5797e.png)
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
*=[o][F-]{1}
\ar @`{+/l16mm/} [] ^{}
\rloop{0,1} ^{a}
\rloop{0,-1} ^{b}
\ar "1,2" ^{a}
& *=[o][F-]{2}
\ar "1,3" ^{b}
& *=[o][F=]{3}
}](/sites/default/files/tex_cache/a9d5e9fb82e39214b8627cc613b269c8.png)
![M' =
\langle \{ \{ 1 \} , \{ 1 , 2 \} , \{ 1 , 3 \} \} , \Sigma , \Delta' ,
\{ \{ 1 \} \} , \{ \{ 1 , 3 \} \} \rangle ,](/sites/default/files/tex_cache/8d938699fb672ae70674580afb6900c6.png)
![\begin{multiline*}
\Delta' = \{
\langle \{ 1 \} , a , \{ 1 , 2 \} \rangle ,\
\langle \{ 1 \} , b , \{ 1 \} \rangle ,\
\langle \{ 1 , 2 \} , a , \{ 1 , 2 \} \rangle ,\
\\
\langle \{ 1 , 2 \} , b , \{ 1 , 3 \} \rangle ,\
\langle \{ 1 , 3 \} , a , \{ 1 , 2 \} \rangle ,\
\langle \{ 1 , 3 \} , b , \{ 1 \} \rangle
\} .
\end{multiline*}](/sites/default/files/tex_cache/05b7293da3a5cd49449de8fd43feee04.png)
![\objectwidth={7.5mm} \objectheight={7.5mm} \let\objectstyle=\scriptstyle
\xymatrix {
*=[o][F-]{1}
\ar @`{+/l16mm/} [] ^{}
\rloop{0,1} ^{b}
\ar "1,2" ^{a}
& *=[o][F-]{1,2}
\rloop{0,1} ^{a}
\ar "2,2" <0.6mm> ^{b}
\\
%
& *=[o][F=]{1,3}
\ar "1,2" <0.6mm> ^{a}
\ar "1,1" ^{b}
}](/sites/default/files/tex_cache/287a3c7a2a42a4e1524d18ea1f71253c.png)
Упражнение 2.7.3. Найти полный детерминированный конечный автомат, эквивалентный автомату, изображенному на диаграмме.
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
*=[o][F-]{1}
\ar @`{+/l16mm/} [] ^{}
\ar "2,1" ^{ab}
\\
*=[o][F=]{2}
\ar @`{+/l16mm/} [] ^{}
\rloop{1,0} ^{a}
}](/sites/default/files/tex_cache/9e4e2ff692126aae7c7f277b2953a246.png)
Упражнение 2.7.4. Найти детерминированный конечный автомат для языка, порождаемого грамматикой
![\begin{align*}
S \; & {\to} \; a T , \\
S \; & {\to} \; a R , \\
T \; & {\to} \; b T , \\
T \; & {\to} \; \varepsilon , \\
R \; & {\to} \; a R , \\
R \; & {\to} \; \varepsilon .
\end{align*}](/sites/default/files/tex_cache/ac64c6811217531f6f8998b4d9fd7dbe.png)
Упражнение 2.7.5. Найти детерминированный конечный автомат, распознающий
язык