Упражнение 2.1.25 |
Синтаксические моноиды
6.2. Минимизация детерминированных конечных автоматов
Определение 6.2.1.
Говорят, что слово w различает
состояния p
и q
полного детерминированного конечного автомата ,
если одно из состояний
,
заключительное, а другое не является заключительным.
Определение 6.2.2.
Состояния p
и q
полного детерминированного конечного автомата
называются различимыми
(distinguishable), если существует
слово w,
которое их различает.
Замечание 6.2.3.
Пусть полный детерминированный конечный автомат
задает язык L.
Рассмотрим произвольные слова
и
.
Состояния
и
различимы тогда и только тогда, когда
.
Теорема 6.2.4. Существует быстрый алгоритм, позволяющий по произвольному детерминированному конечному автомату находить минимальный (по количеству состояний) автомат среди детерминированных конечных автоматов, эквивалентных исходному автомату.
Доказательство.
Без ограничения общности можно предположить,
что дан
полный детерминированный конечный автомат ,
все состояния которого достижимы из начального состояния
(для обеспечения полноты достаточно добавить одно состояние).
Для каждого натурального числа i
определим на множестве Q
отношение эквивалентности
:
![\begin{align*}
p \equiv _0 q &\iff
( p \in F \rusand q \in F ) \rusor ( p \notin F \rusand q \notin F ) ,\\
p \equiv _{i+1} q &\iff p \equiv _i q \rusand
\Delta _a ( p ) \equiv _i \Delta _a ( q )
\mathspace\text{для каждого}\mathspace a \in \Sigma .
\end{align*}](/sites/default/files/tex_cache/f6d73530d519f634ab6e41fdd75832ca.png)
![p \equiv _i q](/sites/default/files/tex_cache/f291f892d021526ffe0a648c9307c612.png)
![k \geq n](/sites/default/files/tex_cache/b1c98aa59ec9bd5640ee657856f20c34.png)
![\equiv _k](/sites/default/files/tex_cache/b23e36d8ac4fad9b2c17d78418a061b6.png)
![\equiv _{n-1}](/sites/default/files/tex_cache/a09b767d83a5d3bd2fea3cc74390afb9.png)
![\equiv _{n-1}](/sites/default/files/tex_cache/a09b767d83a5d3bd2fea3cc74390afb9.png)
Пример 6.2.5.
Рассмотрим полный детерминированный конечный автомат ,
где
![\begin{multiline*}
\Delta = \{
\lp 1 , a , 2 \rp ,\
\lp 2 , b , 3 \rp ,\
\lp 3 , a , 4 \rp ,\
\lp 4 , b , 1 \rp ,\
\lp 4 , a , 5 \rp ,\
\lp 5 , a , 5 \rp ,\
\\
\lp 1 , b , 6 \rp ,\
\lp 2 , a , 6 \rp ,\
\lp 3 , b , 6 \rp ,\
\lp 5 , b , 6 \rp ,\
\lp 6 , a , 6 \rp ,\
\lp 6 , b , 6 \rp
\} .
\end{multiline*}](/sites/default/files/tex_cache/ae4fee661e4ca960be7a55b8e47a3fab.png)
![\objectwidth={5mm} \objectheight={5mm} \let\objectstyle=\scriptstyle
\xymatrix {
*=[o][F=]{1}
\ar @`{+/l16mm/} [] ^{}
\ar "1,2" ^{a}
\ar "2,2" ^{b}
& *=[o][F-]{2}
\ar "1,3" ^{b}
\ar "2,2" ^{a}
& *=[o][F=]{3}
\ar "1,4" ^{a}
\ar "2,2" ^{b}
& *=[o][F-]{4}
\ar `ul^l{+/u7mm/}`l^dl{[0,-3]}_{b} "1,1"
\ar "2,4" ^{a}
\\
%
& *=[o][F-]{6}
\rloop{0,-1} ^{a}
\rloop{-1,0} ^{b}
&
& *=[o][F-]{5}
\rloop{0,-1} ^{a}
\ar "2,2" ^{b}
}](/sites/default/files/tex_cache/b834e887114fc46fed116a76b729c24f.png)
![\lalg \{ \{ 1 , 3 \} , \{ 2 , 4 \} \} , \{ a , b \} , \Delta' ,
\{ \{ 1 , 3 \} \} , \{ \{ 1 , 3 \} \} \ralg](/sites/default/files/tex_cache/0c97ab0fa2372c7b7aec36365d559072.png)
![\Delta' = \{
\lp \{ 1 , 3 \} , a , \{ 2 , 4 \} \rp ,\
\lp \{ 2 , 4 \} , b , \{ 1 , 3 \} \rp
\} .](/sites/default/files/tex_cache/f7d62e273de3e5aa912f0005be648a81.png)
![\objectwidth={7.5mm} \objectheight={7.5mm} \let\objectstyle=\scriptstyle
\xymatrix {
*=[o][F=]{1,3}
\ar @`{+/l16mm/} [] ^{}
\ar "1,2" <0.6mm> ^{a}
& *=[o][F-]{2,4}
\ar "1,1" <0.6mm> ^{b}
}](/sites/default/files/tex_cache/05dc1f06b2c61cce68fd7e29ff9faafe.png)
Замечание 6.2.6. Неизвестно, существует ли быстрый (полиномиальный) алгоритм, позволяющий по произвольному конечному автомату находить минимальный автомат среди всех (не обязательно детерминированных) конечных автоматов, эквивалентных исходному автомату.
Упражнение 6.2.7. Найти минимальный полный детерминированный конечный автомат для языка, порождаемого грамматикой
![\begin{align*}
C \; & {\to} \; a D , & H \; & {\to} \; a C , \\
C \; & {\to} \; b E , & H \; & {\to} \; b E , \\
D \; & {\to} \; a E , & D \; & {\to} \; \varepsilon , \\
D \; & {\to} \; b H , & H \; & {\to} \; \varepsilon . \\
E \; & {\to} \; a D , \\
E \; & {\to} \; b C , \\
\end{align*}](/sites/default/files/tex_cache/3fc0d22a57d5df97ec6dba5db28ec3cc.png)
Упражнение 6.2.8. Найти минимальный полный детерминированный конечный автомат для языка
(1+(a+b)*b)b(a+b)*.
Упражнение 6.2.9. Найти минимальный полный детерминированный конечный автомат для языка
(a+b)*(aaba+(aabb+bbaa)abbb)(a+b)*.
Упражнение 6.2.10. Равны ли регулярные выражения
(aa+b+ab)* и ((a+b)*b+1)(aa)*?
Упражнение 6.2.11. Равны ли регулярные выражения
(a+b)*aa(a+b)*bb(a+b)* и (ab+b)*aa(a+b)*bb(a+ba)*?
Упражнение 6.2.12. Равны ли регулярные выражения
((ba+bb)(aa+ab)*)*a и b(aa+ab+ba+bb)*(aa+ba)?
Упражнение 6.2.13. Равны ли регулярные выражения
(ca+cb+cc+(a+b+(a+c))+c)(a+b+c)*
и
c(a+b+bc)++(a+b+c)*(ac+cc)(a+b+bc)*?