Skip to content
Snippets Groups Projects
Commit 5343eef8 authored by Martin Mareš's avatar Martin Mareš
Browse files

Redukce: Korektury

parent f233ae1a
No related branches found
No related tags found
No related merge requests found
......@@ -790,8 +790,8 @@ prozkoumáme, jak automaty zjednodušovat.
\figure[dfa-reduce]{redukce.epdf}{width 0.8\hsize}{Automat a jeho redukce}
Prohlédněme si na automat na obrázku \figref{dfa-reduce} vlevo,
definovaný nad abecedou $\{\|a|, \|b|\}$.
Prohlédněme si automat na obrázku \figref{dfa-reduce} vlevo,
pracující nad abecedou $\{\|a|, \|b|\}$.
Zřejmě rozpoznává jazyk generovaný regulárním výrazem $(\|a|\mid\|b|)\;\|a|^*\|b|\;(\|a|\mid\|b|)^*$.
Tentýž jazyk lze ovšem rozpoznávat i automatem vpravo, který má pouhé 3~stavy.
......@@ -805,10 +805,10 @@ Zamysleme se nad tím, jakých stavů bychom se v~levém automatu dokázali zbav
\:Stavy 3 a~4 není potřeba rozlišovat: oba jsou přijímací a po zpracování
libovolného slova automat skončí zase v~přijímacím stavu. Můžeme je tedy
sloučit do společného stavu 34, který bude přijímací a jak~\|a|, tak~\|b| povedou
do téhož stavu.
opět do stavu 34.
\:Stavy 1 a~2 také není potřeba rozlišovat: v~obou platí, že \|b| nás posune
do stavu 34, zatímco na \|a| zůstaneme v~1 nebo~2. Opět je můžeme sloučit
do stavu 34, zatímco po \|a| zůstaneme v~1 nebo~2. Opět je můžeme sloučit
do společného stavu 12. (Naproti tomu 12 a 34 se chovají jinak, například se
liší tím, zda jsou přijímací.)
......@@ -823,8 +823,7 @@ tentýž jazyk. Nyní se tento proces pokusíme popsat obecně.
Dosažitelné stavy jsou přesně ty, do nichž ze stavu~$q_0$ vede cesta. Tím pádem
je můžeme najít prohledáním automatu do šířky. Odstraníme-li všechny nedosažitelné
stavy, nezmění se $\delta(q_0,\alpha)$ pro žádné~$\alpha$, a~tím pádem ani jazyk
přijímaný automatem.
stavy, nezmění se množina možných výpočtů, a~tím pádem ani jazyk přijímaný automatem.
\defn{Stavy $s,t\in Q$ jsou \df{ekvivalentní} (značíme $s\equiv t$), pokud pro
každé slovo $\alpha\in\Sigma^*$ platí $\delta^*(s,\alpha)\in F$, právě když
......@@ -848,8 +847,8 @@ kdykoliv $|\alpha|\le k$.
}
\obs{\list{o}
\:Je-li $s\equiv_k t$, platí také $s\equiv_{k+1} t$. Ekvivalence~$\equiv_{k+1}$ je tedy
\em{zjemněním} ekvivalence~$\equiv_k$, tedy $\mathord{\equiv_k} \subseteq \mathord{\equiv_{k+1}}$
\:Je-li $s\equiv_{k+1} t$, platí také $s\equiv_k t$. Ekvivalence~$\equiv_{k+1}$ je tedy
\em{zjemněním} ekvivalence~$\equiv_k$, tedy $\mathord{\equiv_{k+1}} \subseteq \mathord{\equiv_k}$
a třídy jemnější ekvivalence jsou podmnožinami tříd hrubší ekvivalence.
\:$s\equiv t$ platí právě tehdy, když je $s\equiv_k t$ pro všechna~$k$.
......@@ -917,19 +916,27 @@ Pak definujeme \df{faktorový automat} $A/\mathord{\equiv} = (Q',\Sigma,\delta',
\note{
Stavy faktorového automatu jsou tedy ekvivalenční třídy stavů původního
automatu. Přechod z~ekvivalenční třídy $S$ do $T$ přes znak~$x$ odpovídá
přechodu mezi $s\in S$ do $t\in T$ přes~$x$ v~původním automatu;
z~vlastností relace~$\equiv$ plyne, že nezáleží na volbě reprezentantů
tříd $s$ a~$t$. Podobně třída je přijímací, pokud stavy v~ní ležící
byly v~původním automatu přijímací; opět se na tom všechny stavy shodnou.
přechodu mezi $s\in S$ do $t\in T$ přes~$x$ v~původním automatu.
Z~vlastností relace~$\equiv$ přitom plyne, že nezáleží na volbě reprezentantů $s$ a~$t$:
pro každé $s,s'\in S$ a $x\in\Sigma$ je $sx \equiv s'x$.
Podobně třída je přijímací, pokud stavy v~ní ležící byly v~původním automatu přijímací;
opět se na tom všichni reprezentanti třídy shodnou.
}
Faktorizací automatu se nezmění přijímaný jazyk. Indukcí snadno dokážeme,
že pro každý řetězec~$\alpha$ platí $\delta'(q'_0,\alpha) = \delta'([q_0],\alpha) = [\delta(q_0,\alpha)]$.
\lemma{
Faktorizací automatu se nezmění přijímaný jazyk.
}
\proof
Indukcí podle délky řetězce dokážeme, že pro každý řetězec~$\alpha$ platí
$\delta'(q'_0,\alpha) = \delta'([q_0],\alpha) = [\delta(q_0,\alpha)]$.
Tento stav leží v~$F'$ právě tehdy, když $\delta(q_0,\alpha)$ leží v~$F$.
\qed
\example{Z~levého automatu na obrázku \figref{dfa-reduce} dostaneme faktorizací pravý automat.}
\defn{
Automat je \df{redukovaný,} pokud nemá dosažitelné stavy a pokud žadné
Automat je \df{redukovaný,} pokud jsou všechny jeho stavy dosažitelné a žádné
dva stavy nejsou ekvivalentní.
}
......@@ -958,7 +965,8 @@ pamatovat číslo $t[s]$ třídy, kam patří.
\::$p \= 2$ \cmt{počet tříd}
\:Pro $k=1,2,\ldots,|Q|$: \cmt{postupně vytváříme další ekvivalence~$\equiv_k$}
\::Pro všechny stavy $s\in Q$:
\:::$a_s \= \hbox{pole nul indexované abecedou}$
\:::$a_s \= \hbox{pole nul indexované abecedou rozšířenou o~$\varepsilon$}$
\:::$a_s[\varepsilon] \= t[s]$
\:::Pro všechny znaky $x\in\Sigma$:
\::::$a_s[x] \= t[\delta(s,x)]$
\::Setřídíme všechna $a_s$ lexikograficky.
......@@ -973,15 +981,16 @@ pamatovat číslo $t[s]$ třídy, kam patří.
\algout Ekvivalence~$\equiv$ popsaná polem~$t$ čísel tříd.
\endalgo
Při konstrukci ekvivalence~$\equiv_k$ algoritmus každému stavu~$s$ přiřadí jeho kód:
$|\Sigma|$-tici čísel indexovanou znaky abecedy. Na $x$-té pozici leží číslo ekvivalenční
třídy v~$\equiv_{k-1}$, do níž padne $\delta(s,x)$. Dva stavy jsou pak ekvivalentní v~$\equiv_k$
právě tehdy, když dostaly stejný kód. Stačí tedy kódy setřídit a pro každou skupinu stejných
kódů založit ekvivalenční třídu.
Při konstrukci ekvivalence~$\equiv_k$ algoritmus každému stavu~$s$ přiřadí jeho \em{kód:}
$(|\Sigma|+1)$-tici čísel indexovanou znaky abecedy rozšířené o~$\varepsilon$.
Na $x$-té pozici leží číslo ekvivalenční třídy v~$\equiv_{k-1}$, do níž padne $\delta(s,x)$.
Na pozici~$\varepsilon$ leží číslo původní ekvivalenční třídy.
Dva stavy jsou pak ekvivalentní v~$\equiv_k$ právě tehdy, když dostaly stejný kód.
Stačí tedy kódy setřídit a pro každou skupinu stejných kódů založit ekvivalenční třídu.
Jaká je složitost tohoto algoritmu v~závislosti na počtu stavů $S = |Q|$ a velikosti abecedy $A = |\Sigma|$?
Hlavní smyčka přes~$k$ proběhne nejvýš $S$-krát, pak už nemůže ekvivalenčních tříd přibývat.
Pro každou ekvivalenci sestrojíme $S$ kódů délky~$A$, což trvá $\Theta(SA)$.
Pro každou ekvivalenci sestrojíme $S$ kódů délky~$A+1$, což trvá $\Theta(SA)$.
V~tomto čase je stihneme i přihrádkově setřídit a očíslovat nové ekvivalenční třídy.
Algoritmus tedy doběhne v~čase $\Theta(S^2A)$.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment