Come trasformare un automa NFA in DFA

Qualsiasi automa a stati finiti non deterministico (NFA) può essere trasformato in un automa deterministico (DFA).

L'automa risultate esplora tutte le possibili transizioni di stato ed è molto più grande del corrispondente automa NFA.

Questo significa che gli automi a stati finiti deterministici o non deterministici sono equivalenti perché accettano lo stesso linguaggo regolare.

    Un esempio pratico

    Considero questo semplice automa a stati finiti non deterministico (NFA) con tre stati \(\{q_0, q_1, q_2\}\) e un alfabeto a due simboli \(\{a, b\}\) dove \( q_0 \) è lo stato iniziale e \( q_2 \) è lo stato di accettazione.

    un automa NFA

    Per prima cosa identifico i sottoinsiemi degli stati dell'NFA calcolando l'insieme delle parti.

    I sottoinsiemi sono:

    \[
    \emptyset, \{q_0\}, \{q_1\}, \{q_2\}, \{q_0, q_1\}, \{q_0, q_2\}, \{q_1, q_2\}, \{q_0, q_1, q_2\}
    \]

    Li dispongo senza un ordine preciso per poterli collegare successivamente

    gli stati possibili dell'automa NFA


    Lo stato iniziale del DFA

    Individuo l'insieme degli stati raggiungibili dallo stato iniziale senza leggere alcun simbolo.

    In questo caso lo stato iniziale del DFA è solo lo stato \(\{q_0\}\) perché non sono transizioni vuote.

    lo stato iniziale del DFA

    Gli stati accettanti del DFA

    I sottoinsiemi che contengono lo stato di accettazione del NFA \(q_2\) sono gli stati accettanti del DFA:

    $$ \{q_2\}, \{q_0, q_2\}, \{q_1, q_2\}, \{q_0, q_1, q_2\} $$ 

    Li indico in rosso

    gli stati accettanti del DFA

    La funzione di transizione del DFA

    A questo punto costruisco la funzione di transizione del DFA considerando tutti i sottoinsiemi:

    • Da \(\{q_0\}\):
      Con \(a\): \(\delta(\{q_0\}, a) =  \{q_0, q_1\}\)
      Con \(b\): \(\delta(\{q_0\}, b) =  \{q_0\}\)
      gli stati raggiungibili da q0
    • Da \(\{q_0, q_1\}\):
      Con \(a\): \(\delta(\{q_0, q_1\}, a) = \delta(q_0, a) \cup \delta(q_1, a) = \{q_0, q_1\}\)
      Con \(b\): \(\delta(\{q_0, q_1\}, b) = \delta(q_0, b) \cup \delta(q_1, b) = \{q_0, q_2\}\)
      le transizioni da {q0,q1}
    • Da \(\{q_0, q_2\}\):
      Con \(a\): \(\delta(\{q_0, q_2\}, a) = \delta(q_0, a) \cup \delta(q_2, a) = \{q_0, q_1, q_2\}\)
      Con \(b\): \(\delta(\{q_0, q_2\}, b) = \delta(q_0, b) \cup \delta(q_2, b) = \{q_0, q_2\}\)
      le transizioni da {q0,q2}
    • Da \(\{q_0, q_1,q_2\}\):
      Con \(a\): \(\delta(\{q_0, q_1, q_2\}, a) =\delta(q_0, a) \cup \delta(q_1, a) \cup \delta(q_2, a) = \{q_0, q_1, q_2\}\)
      Con \(b\): \(\delta(\{q_0, q_1, q_2\}, b) =\delta(q_0, b) \cup \delta(q_1, b) \cup \delta(q_2, b) = \{q_0, q_2\}\)
      le transizioni da {q0,q1,q1}

    Gli altri sottoinsiemi (\( \{ \ \}\), \{q_1\}\), , \{q_2\}\), \(\{q_1, q_2\}\) non vengono raggiunti in questo esempio con i simboli di input dati, quindi non influenzano il DFA finale.

    l'automa DFA equivalente

    DFA risultante

    Il DFA risultante ha i seguenti stati:

    $$ Q =  \{ \emptyset, \{q_0\}, \{q_0, q_1\}, \{q_0, q_2\},  \{q_0, q_1, q_2\} \} $$

    Lo stato iniziale è lo stato  \(\{q_0\}\)

    Gli stati accettanti sono i seguenti:

    $$ F = \{ \  \{q_0, q_2\}, \{q_0, q_1, q_2\} \ \} $$

    La funzione di transizione è la seguente:

    - \(\delta(\{q_0\}, a) = \{q_0, q_1\}\)
    - \(\delta(\{q_0\}, b) = \{q_0\}\)
    - \(\delta(\{q_0, q_1\}, a) = \{q_0, q_1\}\)
    - \(\delta(\{q_0, q_1\}, b) = \{q_0, q_2\}\)
    - \(\delta(\{q_0, q_2\}, a) = \{q_0, q_1, q_2\}\)
    - \(\delta(\{q_0, q_2\}, b) = \{q_0, q_2\}\)
    - \(\delta(\{q_0, q_1, q_2\}, a) = \{q_0, q_1, q_2\}\)
    - \(\delta(\{q_0, q_1, q_2\}, b) = \{q_0, q_2\}\)

    Il grafo dell'automa DFA equivalente è:

    l'automa DFA equivalente

    Dove gli stati in rosso sono gli stati di accettazione del DFA equivalente.

    Questo esempio mostra come un NFA con transizioni non deterministiche può essere convertito in un DFA che simula tutte le possibili computazioni dell'NFA.

     

     


     

    Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

    FacebookTwitterLinkedinLinkedin
    knowledge base