Minimalny DFA

by Jerry Sky

2020-10-15



1. Minimalny DFA

Dla każdego języka regularnego istnieje dokładnie jeden (z dokładnością do izomorfizmów) DFA o minimalnej liczbie stanów.
(Własność ta wynika z twierdzenia Myhill-Nerode, które jednak zostanie pominięte na wykładzie.)

2. Idea algorytmu

Chcemy znaleźć takie stany, które można ze sobą połączyć (stan równoważne). Dwa stany równoważne to takie, że dla każdego xx startujące z tych stanów albo znajdziemy się równocześnie w stanach akceptujących, albo nieakceptujących.

3. Algorytm minimalizacji

Oznaczamy pary stanów, które nie są równoważne.

  1. for all pFqQFp \in F \land q \in Q\setminus F do flag (p,q)(p,q)
  2. for all p,q(F×F)(QF×QF)p, q \in (F\times F) \cup (Q \setminus F \times Q \setminus F) takich że pqp \neq q do:
    1. if aΣ\exists a\in \Sigma taki że (δ(p,a),δ(q,a))(\delta(p,a), \delta(q,a)) is flagged then:
      1. flag (p,q)(p,q)
      2. flag w sposób rekurencyjny wszystkie nieoznaczone pary na liście (p,q)(p,q)
    2. else (żadna para (δ(p,a),δ(q,a))(\delta(p,a),\delta(q,a)) nie jest oznaczona)
      1. for all aΣa \in \Sigma do:
        1. umieść parę (p,q)(p,q) na liście (δ(p,a),δ(q,a))(\delta(p,a),\delta(q,a)) pod warunkiem, że δ(p,a)δ(q,a)\delta(p, a) \neq \delta(q,a)

DFA uzyskany przez złączenie stanów równoważnych uzyskanych przez powyższy algorytm, z usuniętymi stanami nieosiągalnymi, jest minimalnym DFA dla danego języka.


4. Przykład

M=({a,b,c,d,e,f},{0,1},δ,a,{c,d,e})M = \left( \{ a,b,c,d,e,f \}, \{ 0,1 \}, \delta, a, \{ c,d,e \} \right)

δ\delta 00 11
aa bb cc
bb aa dd
cc ee ff
dd ee ff
ee ee ff
ff ff ff

Pomarańczowe X — pierwszy etap
Niebieskie X — drugi etap

Czyli sklejamy:


Uproszczony DFA: M=({ab,cde,f},{0,1},δ,ab,{cde})M' = (\{ ab, cde, f \}, \{ 0,1 \}, \delta, ab, \{ cde \})

δ\delta 00 11
abab abab cdecde
cdecde cdecde ff
ff ff ff