Sunteți pe pagina 1din 27

1

Curs 3 - plan
Automate finite
De la automate finite cu c-tranziii la automate
deterministe
Automate finite i gramatici de tip 3
Automatul determinist minimal

2
Eliminarea c - tranziiilor
Pentru orice automat A cu c - tranziii exist un
automat A fr c - tranziii echivalent cu A:
Dac A = (Q, E, o, q
0
, F) atunci A = (Q, E, o, q
0
, F) unde:
o(q, a) = (q, a)
F = F {q|Cl(q) F = u}

o(q, w) = (q, w) w e E*
o(q
0
, w) F = u (q
0
, w) F = u
(q
0
, w) F = u
o

a, b
b
3
Exemplu
a b
0 1
2
a b
2
a, b
0 1
4
Automatul determinist echivalent
Pentru orice automat A cu c - tranziii exist un
automat A determinist echivalent cu A:
Dac A = (Q, E, o, q
0
, F) atunci
A = (Q, E, o, q
0

, F) determinist unde:
Q _ 2
Q
q
0
= Cl(q
0
)
o(S,a) = Cl(o(S,a)) (= (S,a)) , S eQ, a e E
S e F S F = u

o

5
Automatul determinist echivalent
Algoritmul: Transformarea unui automat cu c - tranziii n automat finit determinist.
Intrare: Automatul A (cu c - tranziii) ; Cl(S)
Ieire: Automatul determinist (cu o parial definit) A = (Q, E, o, q0, F), echivalent cu A.
Metoda: Se construiesc strile lui A ncepnd cu q0 i continund cu cele accesibile prin tranziii
cu simboluri din alfabet.
q0 = Cl({q0}); Q = {q0} ;
marcat(q0) = false; F = u ;
if ( q0 F= u ) then F = F {q0} ;
while (-S e Q && !marcat(S)){//S este nemarcat
for(a e E ){
S = Cl(o(S,a)); // o(S,a)=S
if (S = u) {
o(S,a) = S ;
if ( S e Q) {
Q = Q {S};
marcat(S) = false;
if(S F= u)then F = F {S};
}//endif
}//endif
}//endfor
marcat(S) = true;
}//endwhile
6
De la gramatici de tip 3 la automate finite
Pentru orice gramatic de tip 3 G (n form normal) exist un
automat A (nedeterminist) astfel ca L(A) = L(G):
n gramatica G n automatul A
T = T
N Q = N { f }, F = { f }
S

q
0
= S
q ap p e o(q, a)
q a f e o(q, a)
Dac S c Se adaug S la F
7
De la automate finite la gramatici regulate
Pentru orice automat finit(determinist) A exist o gramatic
regulat G astfel ca L(G) = L(A):
n automatul A n gramatica G
Alfabetul de intrare T =
Strile Q N = Q
Starea iniial q
0
S = q
0
o(q, a) = p q ap
o(q, a) e F q a
dac q
0
e F se adaug q
0
c
Minimizarea unui atuomat
determinist
Stri accesibile:

Fie A=(Q, E, o, q
0
, F) automat finit determinist.

Starea q este accesibil n A dac exist un
cuvnt we E
*
astfel nct q= o(q
0
, w).
8
Minimizarea unui atuomat
determinist
Fie A = (Q, E, o, q
0
, F) un automat finit determinist
Strile q
1
i q
2
sunt inseparabile n raport cu F, (notat
q
1
q
2
) ddac
we E
*
:o(q
1
,w) e F o(q
2
,w) e F
Dac exist we E
*
cu o(q
1
,w) e F i o(q
2
,w) e F (sau
invers), strile q1 i q2 sunt separabile (de ctre w)

Observaie:
dac q
1
e F i q
2
eF, atunci q
1
q
2
Relaia este relaie de echivalen
9
b
a,b
Minimizarea unui atuomat
determinist

10
b
2
a
3
a,b
4
1
a
0
a b
Minimizarea unui atuomat
determinist

Teorem: Fie A un automat determinist cu toate
strile accesibile. Dac toate strile din A sunt
separabile n raport cu F, atunci nu exist un alt
automat A cu numr mai mic de stri i L(A)=L(A)
12
Automatul minimal
Fie A = (Q, E, o, q
0
, F) un automat finit determinist i
relaia .
Dac q
1
, q
2
eQ: q
1
q
2
, atunci A este minimal
Altfel:
Automatul minimal:
A

= (Q/, E, o

, [q
0
],

F/)
Q/ - clasele de echivalen ale relaiei :
Q/ ={ [q] | q e Q}
o

([q],a) = [o(q,a)]
[q
0
] clasa de echivalen n care se afl starea q
0

F/ ={ [q] | q e F}

14
Minimizarea unui atuomat
determinist
15
a,b
b
b
2
a
3
a,b
4
1
a
0
a b
a,b
b
[2]
a,b
[4]
[1]
a
[0]
a b
Automatul minimal
Automatul minimal:
A

= (Q/, E, o

, [q
0
],

F/)
Q/ - clasele de echivalen ale relaiei :
Q/ ={ [q] | q e Q}
o

([q],a) = [o(q,a)]
[q
0
] clasa de echivalen n care se afl starea q
0

F/ ={ [q] | q e F}

Teorema: Fie automatul determinist A, cu toate
strile accesibile. Automatul A

construit ca mai sus
este automatul cu numr minim de stri care accept
limbajul L(A).

16
Algoritm pentru determinarea relaiei
Fie A=(Q, E, o, q
0
, F), Q={q0,q1,,qn}
Tablou separabil[qi,qj]:
separabil[qi,qj]=1 ddac qi qj
iniial separabil [qi,qj]=1 ddac qi eF, q
j
eF (sau invers)
Dac qi i qj sunt inseparabile (qi qj) dar exist a eE cu
o(qi,a) o(qj,a), atunci qi qj , adic :
Dac separabil[qi,qj]=0 i exist a eE cu
separabil[o(qi,a) ,o(qj,a)]=1, atunci separabil[qi,qj]=1
19
Algoritm pentru determinarea relaiei
lista[p,r]:
Fie p, r cu separabil[p,r]=0, p =r;
(qi,qj) se adaug la lista[p,r] ddac exist a e E astfel nct
p=o(qi,a), r= o(qj,a) ((qi,qj) e lista[o(qi,a), o(qj,a) ]
dac p i r devin la un moment dat separabile printr-un
cuvnt u, atunci i qi i qj separabile (prin cuvntul au):
p r o(qi,a) o(qj,a) qi qj

20
Algoritm pentru determinarea relaiei
Pentru orice qi,qj (0si<j s n) cu separabil[qi,qj]=0 :
Dac exist a eE cu separabil[o(qi,a) ,o(qj,a)]=1, atunci
separabil[qi,qj]=1 i trebuie modificat tabloul separabil pentru
toate perechile de stri a cror separabilitate depinde de qi, qj

Altfel: pentru orice a eE cu o(qi,a)= o(qj,a) adaug (qi, qj) la
lista[o(qi,a) ,o(qj,a)]
21
Algoritm pentru determinarea relaiei
//iniializarea tablourilor, se marcheaz perechile F(Q-F)
i (Q-F)F

1.for(i=0; i<=n-1; i++)
2. for(j=i+1,j<=n; j++){
3. lista[qi,qj]=u;
4. if((qi e F && qj e F) || (qi e F && qj eF))
5. separabil[qi,qj]=1;
else
6. separabil[qi,qj]=0;
}


22
7.for(i=0; i<=n-1; i++)
8. for(j=i+1,j<=n; j++){
//se selecteaza doar starile inseparabile
9. if(!separabil[qi,qj]){
//daca exista a astfel incat o(qi,a) o(qj,a)
//inseamna ca qi si qj sunt separabile
10. if(-aeE: separabil[o(qi,a),o(qj,a)]=1){
//qi si qj devin separabile si la fel toate
//perechile de stari dependente de qi,qj
11. update_separabil(qi,qj);
}
else{
12. for(aeE && o(qi,a) = o(qj,a))
13. adauga (qi,qj) la lista[o(qi,a), o(qj,a)]
} //endelse
}//endif
}//endfor

23
Algoritm pentru determinarea relaiei
// qi i qj devin separabile i la fel toate
//perechile de stri dependente de qi i qj

update_separabil(qi,qj){
separabil[qi,qj]=1;
for((p,r) e lista[qi,qj]){
if(!separabil[p,r])
update_separabil(p,r);
}
}
24
b
Exemplu
25
q1 q2 q3 q4
0 0 0 1 q0


0 0 1 q1
0 1 q2


1 q3
b
q3
a
q2
a,b
q4
b
q1
a
q0
a b
a
a b
q0 q1 q2
q1 q1 q3
q2 q1 q2
q3 q1 q4
q4 q4 q4
b
Exemplu
26
q1 q2 q3 q4
0 0 (0) 1 1 q0


0 0 1 q1
0
(q0,q1)
1 q2


1 q3
b
q3
a
q2
a,b
q4
b
q1
a
q0
a b
a
a b
q0 q1 q2
q1 q1 q3
q2 q1 q2
q3 q1 q4
q4 q4 q4
b
Exemplu
27
q1 q2 q3 q4
0 0 1 1 q0


0 (0) 1 1 q1
0
(q1,q2)
(q0,q1)
1 q2


1 q3
b
q3
a
q2
a,b
q4
b
q1
a
q0
a b
a
a b
q0 q1 q2
q1 q1 q3
q2 q1 q2
q3 q1 q4
q4 q4 q4
b
Exemplu
28
q1 q2 q3 q4
(0) 1 0 1 1 q0


(0) 1 1 1 q1
(0)1
(q1,q2)
(q0,q1)
1 q2


1 q3
b
q3
a
q2
a,b
q4
b
q1
a
q0
a b
a
a b
q0 q1 q2
q1 q1 q3
q2 q1 q2
q3 q1 q4
q4 q4 q4
a
b
Exemplu
29
q1 q2 q3 q4
1 0 1 1 q0


1 1 1 q1
1
(q1,q2)
(q0,q1)
1 q2


1 q3
b
q3
a
q2
a,b
q4
b
q1
a
q0
a b
a
b
[q3]
a,b
[q4]
b
b
[q1]
a
a
[q0,q2]
Corectitudinea algoritmului
Teorem : algoritmul are un numr finit de pai i n
final se obine, pentru orice dou stri qi i qj,
0si<j s n: separabil[qi,qj]=1 ddac q
i
q
j

1. (:) Fie qi i qj cu q
i
q
j
. Exist w astfel nct
o(qi,w) eF, o(qj,w) eF
Se arat c:
Pentru orice dou stri qi i qj i orice cuvnt w cu |w| sk, dac
qi si qj separabile de ctre w (o(qi,w) eF, o(qj,w) eF)), atunci are
loc separabil[qi,qj] =1;

Inducie dup |w|.


30
Corectitudinea algoritmului
Teorem : algoritmul are un numr finit de pai i n
final se obine, pentru orice dou stri qi i qj,
0si<j s n: separabil[qi,qj]=1 ddac q
i
q
j

2. () Se arat c pentru oricare dou stri pentru care
separabil[qi,qj]=1, are loc q
i
q
j
.
Inducie asupra momentului n care algoritmul face
separabil[qi,qj]=1

31