AP9, IN9 Konečné automaty
Zadání
definice, konstrukce konečného automatu, minimalizace konečného automatu, převod nedeterministického konečného automatu na deterministický automat
Definice konečného automatu
Definice 2.1. 1)
Konečný automat M je pětice (
Q,
,
,
q0,
F), kde
Rozšířená přechodová funkce deterministického konečného automatu:
Abychom mohli definovat jazyk akceptovaný automatem, je třeba zavézt rozšířenou přechodovou funkci
: Q x * → Q definována induktivně vzhledem k délce slova ze *:
(
q,
) =
q pro každý stav
q Q
(
q,
wa) =
(
(
q,
w),
a) je-li
(
q,
w) i
(
(
q,
w),
a) definováno
jinak
Jazyk akceptovaný konečným automatem M, označovaný L(M) je tvořen právě všemi takovými slovy, pod kterými automat přejde z počátečního stavu do některého z koncových.
L(M) = {w * | (q0,w) F}
Rozšířená přechodová funkce nedeterministického konečného automatu:
Konstrukce konečného automatu
Mějme například jazyk L = {w {a, b}* | w obsahuje podslovo abaa}.
konstrukce konečného automatu, který rozpoznává daný jazyk, je obecně netriviální úkol. Pro zjednodušení proto volíme označení stavů tak, aby bylo patrné, jaká část podslova abaa již byla automatem přečtena.
Konečný automat akceptující jazyk L je možné reprezentovat:
Uspořádanou pěticí
kde přechodová funkce vypadá následovně:
Tabulkou
Přechodovým grafem
Výpočetním stromem
není určen jednoznačně. Může se lišit podle toho, jakým způsobem jej konstruujeme.
Příklad výpočetního stromu pro automat M:
Synchronní paralelní kompozice
Pro dané automaty M1 a M2 umožňuje sestrojit automat rozpoznávající průnik, sjednocení či rozdíl jazyků L(M1) a L(M2).
Nechť M1 = (Q1, , 1, q1, F1), M2 = (Q2, , 2, q2, F2) a přechodové funkce 1, 2 jsou totální.
Definujeme konečný automat M3 = (Q3, , 3, q3, F3), kde
Q3 =
Q1 x
Q2 = {(
p,
q) |
p Q1,
q Q2}
F3 =
F1 x
F2 = {(
p,
q) |
p F1,
q F2}
q3 = (q1, q2)
3( (
p,
q),
a) = (
1(
p,
a),
2(
q,
a) )
Potom L(M3) = L(M1) L(M2)
Podobně pro sjednocení a rozdíl - zmení sa len množina koncových stavov
F3 = (
F1 x
Q2)
(
Q1 x
F2) = {(
p,
q) |
p F1 ∨
q F2} pre zjednotenie
F3 =
F1 -
F2 = {(
p,
q) |
p F1 ∧
q F2} pre rozdiel
Příklad průniku
Automat pro komplement
K automatu M = (Q, , , q0, F) s totální přechodovou funkcí sestrojíme automat rozpoznávající jazyk co–L(M) jako = (Q, , , q0, Q – F).
Poznámka: přechodovou funkci ztotálníme tak, že přidáme nový nekoncový stav („černá díra“), do kterého „nasměrujeme chybějící šipky“.
Minimalizace konečného automatu
Minimální konečný automat = automat s nejmenším počtem stavů, který rozpoznává daný regulární jazyk L.
Existence minimálního konečného automatu souvisí s Myhill–Nerodovou větou (viz otázka AP8,IN8 Regulární jazyky), kterou můžeme přeformulovat takto:
Věta 2.29 Myhill–Nerodova, 2. varianta2)
Počet stavů libovolného minimálního automatu rozpoznávajícího jazyk L je roven indexu prefixové ekvivalence ~L. (Takový konečný automat existuje právě když index ~L je konečný.)
Důsledek M-N věty
Minimální konečný automat akceptující jazyk L je určen jednoznačně až na isomorfismus (tj. přejmenování stavů).
Minimalizace konečného automatu probíhá tak, že nejprve jsou odstraněny nedosažitelné stavy a poté jsou ztotožněny jazykově ekvivalentní stavy.
Odstranění nedosažitelných stavů
Definice - dosažitelné a nedosažitelné stavy
Nechť
M = (
Q,
,
,
q0,
F) je konečný automat. Stav
q Q nazveme
dosažitelný, pokud existuje
w * takové, že
(
q0,
w) =
q. Stav je
nedosažitelný, pokud není dosažitelný.
Algoritmus pro eliminaci nedosažitelných stavů konečného automatu
Vstup: Konečný automat M = (Q, , , q0, F)
Výstup: Ekvivalentní automat M' bez nedosažitelných stavů.
Algoritmus
i := 0
Si := {
q0}
repeat Si+1 :=
Si {
q |
p Si,
a :
(
p,
a) =
q}
i :=
i + 1
until Si =
Si–1
Q' :=
Si
M' = (
Q',
,
|
Q',
q0,
F Q')
Poznámka: Zápis |Q' znamená, že funkce je omezena na množinu Q'.
Intuitivně: Množina Si je množina stavů dosažitelná v automatu v maximálně i krocích.
Ztotožnění jazykově ekvivalentních stavů
Nechť M = (Q, , , q0, F) je konečný automat bez nedosažitelných stavů, jehož přechodová funkce je totální.
Definice - jazykově ekvivalentní stavy
Stavy
p,
q nazveme
jazykově ekvivalentní, psáno
p ≡
q, pokud
p ≡
q w * : (
(
p,
w)
F (
q,
w)
F).
Definice - Redukt
Reduktem automatu
M = (
Q,
,
,
q0,
F) nazveme konečný automat
M/
≡ = (
Q/
≡,
,
, [
q0],
F/
≡), kde:
p,q Q, a : (q, a) = p ([q], a) = [p].
Počáteční stav je třída rozkladu Q/≡ obsahující stav q0.
Koncové stavy jsou právě ty třídy rozkladu Q/≡, které obsahují alespoň jeden koncový stav.
Věta
Nechť
M = (
Q,
,
,
q0,
F) je konečný automat bez nedosažitelných stavů s totální přechodovou funkcí. Pak
L(
M) =
L(
M/
≡).
Definice
Pro každé
i 0 definujeme binární relaci ≡
i na
Q předpisem
p ≡
i q w *.|
w|
i : (
(
p,
w)
F (
q,
w)
F)
p ≡
i q právě když
p a
q nelze „rozlišit“ žádným slovem délky
i
p ≡
q právě když
p ≡
i q pro každé
i 0. (≡ =
i)
-
≡
i+1 = {(
p,
q) |
p ≡
i q a :
(
p,
a) ≡
i (
q,
a)}
Algoritmus konstrukce minimálního automatu
Vstup: Konečný automat M = (Q, , , q0, F) bez nedosažitelných stavů s totální přechodovou funkcí
Výstup: Redukt M/≡.
Algoritmus
i := 0
≡
0 := {(
p,
q) |
p F q F}
repeat
≡
i+1 := {(
p,
q) |
p ≡
i q a :
(
p,
a) ≡
i (
q,
a)}
i :=
i + 1
until ≡
i = ≡
i–1
≡ = ≡
i
M/
≡ := (
Q/
≡,
,
, [
q0],
F/
≡)
Příklad
První tabulka obsahuje nedostupné stavy (stav 7).
Druhá tabulka ukazuje přechodovou funkci po úpravě na totální, přidáním nového stavu N a nasměrováním všech nedefinovaných přechodů do něj.
Praktické vysvětlení algoritmu
Na začátku tabulku přechodové funkce rozdělíme do dvou částí(tříd), do druhé části zaznamenáme výstupní stavy, do první části ty ostatní. Obě části označíme římskými číslicemi. Postupně procházíme stavy automatu který chceme minimalizovat, a pro jednotlivé prvky abecedy zjišťujeme, ve které části tabulky se nachází stav do kterého se při přechodu dostaneme. Číslo této části zapíšeme do tabulky k prvku abecedy u zpracovávaného stavu. (tabulka 3)
Tabulku opět rozdělíme, do částí(tříd) které označíme římskými číslicemi, v každé necháme stavy ze kterých se pod všemi prvky abecedy dostaneme do stejných částí tabulky. Aplikujeme předchozí krok.(tabulka 4,5)
Tento postup aplikujeme dokud každá část tabulky neobsahuje jen stavy přecházející do stejných tříd. Ve výsledné tabulce nezapisujeme názvy stavů, ale jen označení tříd s jejich přechody(tabulka 6).
Převod NFA na DFA
Věta
Pro každý NFA
M = (
Q,
,
,
q0,
F) existuje ekvivalentní DFA.
Vstup: NFA M = (Q, , , q0, F).
Výstup: Ekvivalentní DFA M' = (Q', , ', {q0}, F') bez nedosažitelných stavů a s totální přechodovou funkcí.
Algoritmus
Q' := { {
q0} };
' :=
;
F' :=
;
Done :=
;
while (
Q' –
Done)
do
M := libovolný prvek množiny
Q' –
Done
if M F then F' :=
F' {
M}
fi
foreach a do
N :=
Q' :=
Q' {
N}
' :=
'
{( (
M,
a),
N)}
od
Done :=
Done {
M}
od
M' = (
Q',
,
', {
q0},
F')
Příklad
Mějme nedeterministický konečný automat :
| a | b |
→ 1 | 1,2 | 1,7 |
2 | - | 3 |
3 | - | 4 |
4 | 5 | - |
← 5 | 5 | 5 |
6 | - | 5 |
7 | 6 | - |
Převod nedeterministického automatu na deterministický provedeme pomocí algoritmu následovně:
Praktické vysvětlení algoritmu
Začínáme vstupním stavem, který napíšeme do tabulky (
1). Zjistíme množinu stavů, do kterých se dostaneme pomocí prvků abecedy. (
pro a 1,2,
pro b 1,7). Poté vždy vytvoříme (pokud ještě neexistuje) nový stav pojmenovaný jako sjednocení stavů (
pro a 12,
pro b 17) a zaznamenáme do tabulky. Vezmeme poté následující nezpracovaný stav v nově tvořené tabulce (
12) a zjistíme do jaké množiny stavů se lze dostat ze stavů
1 a
2 a provedeme jejich sjednocení (
pro a 1,2 ,
pro b 1,3,7) poté opět zaznamenáme případný nový stav. Od této chvíle pokračujeme obdobně.
Algoritmus končí, ve chvíli kdy není možné nalézt žádný nový stav. Vstupní stavy zůstávají stejné, koncové stavy jsou ty, které obsahují některý z původních koncových stavů.
Takto vytvořený automat nemusí být minimální, ale je bez nedosažitelných stavů, s totální přechodovou funkcí.
| a | b |
→ 1 | 12 | 17 |
12 | 12 | 137 |
17 | 126 | 17 |
137 | 126 | 147 |
126 | 12 | 1357 |
147 | 1256 | 17 |
← 1357 | 1256 | 1457 |
← 1256 | 125 | 1357 |
← 1457 | 1256 | 157 |
← 125 | 125 | 1357 |
← 157 | 1256 | 157 |
Využití
Konečné automaty se používají např. k lexikální analýze.
Literatura
Vypracoval
Lukáš Hala, 173454@mail.muni.cz
Pokud si myslíte, že tady něco chybí, přebývá nebo že je něco blbě, tak to prosím upravte
Je potřeba ještě zapracovat poznámky od Jitky Pospíšilové.