Эквивалентность состояний ДКА — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Проверка эквивалентности автоматов)
(Какой-то отстой не по теме был написан, все нафиг поудалял, написал нормально)
Строка 2: Строка 2:
 
== Эквивалентность автоматов ==
 
== Эквивалентность автоматов ==
  
<font face="Times" size="3">
+
{{Определение
 +
|definition = Два <em> автомата</em> <tex> \mathcal{A}_1 = \langle Q_1,\Sigma,\delta_1,s_{10}, T_1\subseteq Q_1 \rangle </tex> и <tex>\mathcal{A}_2 = \langle Q_2,\Sigma,\delta_2,s_{20}, T_2\subseteq Q_2 \rangle </tex> называются <em>эквивалентными</em>, если они распознают один и тот же язык над алфавитом <tex>\Sigma</tex>, то есть <tex>\mathcal{L}(\mathcal{A}_1) = \mathcal{L}(\mathcal{A}_2)</tex>
 +
}}
  
*'''Определение: ''' Два <em> автомата</em> <tex>\mathcal{A}_1(Q_1,\Sigma,\delta_1,s_{10}, T_1\subseteq Q_1)</tex> и <tex>\mathcal{A}_2(Q_2,\Sigma,\delta_2,s_{20}, T_2\subseteq Q_2)</tex> называются <em>эквивалентными</em>, если они распознают один и тот же язык над алфавитом <tex>\Sigma</tex>.
+
{{Определение
*'''Определение: ''' Два <em> состояния</em> <tex>q_i</tex> и <tex>q_j</tex> называются <em>эквивалентными</em> <tex>(q_i \sim q_j)</tex>, если <tex>\forall z\in \Sigma^*</tex>  верно, что <tex>\delta(q_i, z)\in T \Leftrightarrow \delta(q_j, z)\in T</tex>. Из этого следует, что если два состояния <tex>q_i</tex> и <tex>q_j</tex> эквивалентны, то и состояния <tex>\delta_1(q_i, a)</tex> и <tex>\delta_2(q_j, a)</tex> будут эквивалентными для <tex>\forall a \in \Sigma</tex>. Кроме того, т.к. переход <tex>\delta(q, \varepsilon)</tex> может возникнуть только для конечного состояния <tex>q</tex>, то никакое допускающее(терминальное) состояние не может быть эквивалентно недопускающему состоянию. Нахождение классов эквивалентных состояний внутри автомата и их совмещение в одно состояние используется в быстром алгоритме Хопкрофта для минимизации автомата, работающий за <tex>O(n \log n)</tex>.
+
|definition = Слово <tex>z \in \Sigma^*</tex> различает два состояния <tex>q_i</tex> и <tex>q_j</tex>, если  
*'''Определение:''' Слово <tex>z \in \Sigma^*</tex> различает два состояния <tex>(q_i \nsim q_j)</tex>, если <tex>\delta(q_i, z)\in T \Leftrightarrow \delta(q_j, z)\notin T</tex>. Также, если слово <tex>z</tex> различает состояния <tex>t_1</tex> и <tex>t_2</tex> такие, что <tex>t_1=\delta(q_1, a)</tex> и <tex>t_2=\delta(q_2, a)</tex>, то слово <tex>aw</tex> различает состояния <tex>q_1</tex> и <tex>q_2</tex>. Нахождение пар различных состояний в автомате используется в алгоритме минимизации автомата, работающий за <tex>O(n^2)</tex>.
+
* <tex> \langle q_i, z \rangle \vdash^* \langle t_1, \varepsilon \rangle, \langle q_j, z \rangle \vdash^* \langle t_2, \varepsilon \rangle \Rightarrow t_1 \notin T \Leftrightarrow t_2 \in T </tex>.
 +
}}
 +
 
 +
{{Определение
 +
|definition = Два <em> состояния</em> <tex>q_i</tex> и <tex>q_j</tex> называются <em>эквивалентными</em> <tex>(q_i \sim q_j)</tex>, если не существует строки, которая их различает, то есть <tex>\forall z\in \Sigma^*</tex>  верно, что
 +
* <tex> \langle q_i, z \rangle \vdash^* \langle t_1, \varepsilon \rangle, \langle q_j, z \rangle \vdash^* \langle t_2, \varepsilon \rangle \Rightarrow t_1 \in T \Leftrightarrow t_2 \in T </tex>.
 +
}}
  
 
*'''Пример двух эквивалентных автоматов:'''
 
*'''Пример двух эквивалентных автоматов:'''
Строка 13: Строка 21:
 
<em>Состояния <tex>B</tex> и <tex>C</tex> допускающие.</em>
 
<em>Состояния <tex>B</tex> и <tex>C</tex> допускающие.</em>
  
</font>
 
 
== Проверка эквивалентности автоматов ==
 
  
<font face="Times" size="3">
+
== Алгоритм проверки эквивалентности автоматов ==
*Если положить, что начальные состояния эквивалентны, то, последовательно переходя по одному символу из состояний, можем получить и другие пары эквивалентных состояний. Если же в одну из таких пар попадут допускающее состояния вместе с недопускающим, то такие <tex>q_i</tex> и <tex>q_j</tex> <em>неэквивалентны</em>.
 
*Таким образом получим разбиение множества <tex> Q_1\cup Q_2</tex> на множества эквивалентных состояний. После этого проверим, что никакое из этих множеств не содержит допускающее и недопускающее состояние одновременно, тогда автоматы эквивалентны.
 
</font>
 
  
 
== Литература ==
 
== Литература ==
* Н.Н. Вояковская, А.Е. Москаль, Д.Ю. Булычев, А.А. Терехов - "Разработка компиляторов"
 

Версия 02:45, 14 ноября 2011

Эквивалентность автоматов

Определение:
Два автомата [math] \mathcal{A}_1 = \langle Q_1,\Sigma,\delta_1,s_{10}, T_1\subseteq Q_1 \rangle [/math] и [math]\mathcal{A}_2 = \langle Q_2,\Sigma,\delta_2,s_{20}, T_2\subseteq Q_2 \rangle [/math] называются эквивалентными, если они распознают один и тот же язык над алфавитом [math]\Sigma[/math], то есть [math]\mathcal{L}(\mathcal{A}_1) = \mathcal{L}(\mathcal{A}_2)[/math]


Определение:
Слово [math]z \in \Sigma^*[/math] различает два состояния [math]q_i[/math] и [math]q_j[/math], если
  • [math] \langle q_i, z \rangle \vdash^* \langle t_1, \varepsilon \rangle, \langle q_j, z \rangle \vdash^* \langle t_2, \varepsilon \rangle \Rightarrow t_1 \notin T \Leftrightarrow t_2 \in T [/math].


Определение:
Два состояния [math]q_i[/math] и [math]q_j[/math] называются эквивалентными [math](q_i \sim q_j)[/math], если не существует строки, которая их различает, то есть [math]\forall z\in \Sigma^*[/math] верно, что
  • [math] \langle q_i, z \rangle \vdash^* \langle t_1, \varepsilon \rangle, \langle q_j, z \rangle \vdash^* \langle t_2, \varepsilon \rangle \Rightarrow t_1 \in T \Leftrightarrow t_2 \in T [/math].


  • Пример двух эквивалентных автоматов:

Automata1.pngAutomata2.png

Состояния [math]B[/math] и [math]C[/math] допускающие.


Алгоритм проверки эквивалентности автоматов

Литература