Il Dizionario Informatico, © www.dizionarioinformatico.com

Non Deterministic F. Automata
Deterministic Finite Automata
Espressione regolare
Grammatica di tipo 2

 
Esercizio
Sia dato l'automa non deterministico
M = {{q0, q1}, {0,1}, §, {q0}, {q1}}

§(q0,0) =  {q0, q1}
§(q0,1) = {q1}
§(q1,1) = {q0, q1}

Determinare il linguaggio accettato dall'automa, definire una grammatica di tipo 3 che lo genera e definire un automa deterministico equivalente.

Soluzione:
Rappresentiamo graficamente l'automa.


A volte capire il linguaggio generato da un automa non e' semplice, e a mio avviso lo è ancor meno quando l'automa e' di tipo non deterministico (Non Deterministic Finite Automata - NDFA). Quindi conviene trovare un automa deterministico equivalente (Deterministic Finite Automata - DFA).


Ripasso di un argomento di matematica discreta (algebra):
L'insieme delle parti: Se l'insieme A e' costituito dai seguenti elementi: A={1,2,3}
l'insieme delle parti, ossia l'insieme di tutti i possibili sottoinsiemi definibili da questo insieme, è così fatto:
P(A) = { / , {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}}. Le parti sono 8, con / = insieme vuoto. In generale il numero di tutte le possibili parti, ossia |P(A)| e' 2 n se |A| = n.


Per definire un automa deterministico equivalente a partire da uno non deterministico, ricaviamoci prima tutte le possibili parti dall'insieme degli stati del NDFA.
K = insieme degli stati = {q 0, q1}
allora P(K)={/, {q0}, {q1}, {q0, q1}}. Ogni sottoinsieme di A è uno stato del nuovo automa deterministico, insieme vuoto (/) compreso. La funzione di transizione è:

§([q0],0)=[q0, q1]
§([q0],1)=[q1]
§([q1],0)=/
§([q1],1)=[q0, q1]
§([q0, q1],0)=[q0, q1]
§([q0, q1],1)=[q0, q1]
 
L'insieme F1 (l'insieme degli stati finali dell'automa deterministico) e' un sottoinsieme di P(K)  in cui è presente almeno uno stato di accettazione (q 1).
A questo punto risulta piu' semplice capire il inguaggio accettato. q0 rimane sempre il nostro stato iniziale. Se scelgo di andare in [q1] riconosco 1 e posso fermarmi oppure posso proseguire per [q0q1] (e quindi ho riconosciuto 11). Arrivato in [q0q1] posso fermarmi o riconoscere qualsiasi tipo di stringa di 0 e 1,  (0+1)*.
Riassumendo,  l'espressione regolare corrispondente al linguaggio accettato dell'automa e': (0+1+11)(0+1)*

Non ci rimane che trovare la grammatica di tipo 3 che lo genera:
 

S->0A | 1B | 0 | 1
A->0A | 1A | 0 | 1
B->1A | 1
 


Prossimo esercizio




© C o p y r i g h t     1 9 9 4 - 2 0 0 4
w w w . d i z i o n a r i o i n f o r m a t i c o . c o m