Documente Academic
Documente Profesional
Documente Cultură
TEMELE 1, 2
n:stari;
{numarul de stari}
m:litera;
{cardinalul alfabetului de intrare}
q0:stari;
{starea initiala a automatului}
delta:automat;
{functia de tranzitie}
finale:array[stari] of boolean;
{finale[s]=true <=> starea s este finala}
procedure citirea_datelor;
var k,j:integer;
begin
writeln('Dati nr. starilor <=',nmax);
readln(n);
writeln('Dati cardinalul alfabetului <=',mmax);
readln(m);
writeln('Dati matricea de tranzitie ');
for j:=1 to n do
for k:=1 to m do begin
write('delta[',j,',',k,']=');
readln(delta[j,k]);
end;
writeln('Dati starea initiala');
readln(q0);
end;
procedure accesibile;
var coada:array[stari] of stari;
{structura de date pentru parcurgerea bfs a automatului}
cap,spate:integer;
{primul, respectiv ultimul element din coada}
este :array[stari] of boolean;
{este[s]=true <=> starea s este in coada}
stare_curenta:stari;
{starea curenta a automatului}
j:integer;
{variabila de lucru}
begin
for j:=1 to n do este[j]:=false;
este[q0]:=true;
cap:=1;
193
194
coada[cap]:=q0;
spate:=1;
repeat
for j:=1 to m do
if not este[delta[coada[cap],j]] then begin
este[delta[cap,j]] :=true;
inc(spate);
coada[spate]:=delta[coada[cap],j]
end;
inc(cap)
until cap>spate;
dec(cap);
writeln('starile accesibile din ',q0,' sunt');
for j:=1 to cap do write(coada[j],' ' );
writeln;
readln
end;
begin {programul principal}
citirea_datelor;
accesibile
end.
Problema P2:
Avem la intrare un automat nit determinist si furnizam la iesire un automat
nit determinist minimal echivalent. Detalii au fost precizate ^n Algoritmul (ALG2),
pagina 57, sau puteti gasi ^n [1, 7].
program reducerea_unui_automat_la_un_automat_minimal;
uses crt;
const nmax=20;
mmax=20;
type stari
litera
automat
=1..nmax;
=1..mmax;
=array [stari,litera] of stari;
var n
:stari;
{numarul de stari}
m
:litera;
{cardinalul alfabetului de intrare}
q0
:stari;
195
196
197
198
199
54
Denitia 2.4.2 Automatul nit determinist A este minimal daca nu exista un alt
automat nit determinist A0 cu mai putine stari dec^at A astfel ^nc^at L(A) = L(A0 ):
Denitia 2.4.3 Fie A un automat nit determinist. Spunem ca A este redus daca
nu are stari inaccesibile.
Asadar, e urmatoarele doua probleme:
Problema (P1):
Problema (P2):
Problema determinarii starilor accesibile este echivalenta cu problema determinarii componentei conexe corespunzatoare starii initiale ^ntr-un graf orientat. De fapt, pentru rezolvarea acestei probleme, nu conteaza daca arcele sunt
etichetate sau nu;
02
2
8 s 2 S ; i 2 ;
1
01
Trecem acum la rezolvarea problemei (P1). Formal, vom construi inductiv niste
multimi de stari accesibile, p^ana nu mai gasim nici o stare noua.
(1)
= fs g
j = j [ ( j ; );
0
+1
56
Algoritmul (ALG1):
begin
i := 0;
:= fs g;
repeat
i := i + 1;
i := i [ ( i ; )
until ( i = i ) or ( i = S );
aseaza('Starile accesibile=', i );
aseaza('Starile inaccesibile=',S
i );
end
Pentru implementare, multimile i se pot reprezenta folosind, ca structura de date, o
stiva sau o coada. ^In primul caz, algoritmul urmeaza o strategie \depth rst search"
(dfs), iar ^n al doilea \breadth rst search" (bfs). Pentru amanunte, cititorii pot
consulta [1].
0
^In continuare, vom vorbi despre solutia celei de-a doua probleme, adica despre automatul minimal. Am vazut ca problema determinarii automatului minimal folosind
relatia L este cel putin NP hard, deoarece relatia L foloseste ^n denitia sa
multimea ; care este innita. ^In cele ce urmeaza, vom deni relatia denita
peste multimea de stari (care este nita), si care va conduce la un algoritm polinomial pentru deducerea automatului minimal.
!
Se observa ca =
1 k
T
k=0
:
Urmatoarele doua rezultate sunt importante ^n demonstrarea corectitudinii si nititudinii algoritmului pe care^l vom prezenta (pentru demonstratia lor, puteti consulta
[7, 9, 10, 11]).
57
k s () s k s
1
1
(s ; i); 8 i 2 :
determinist A are jS j = n
si (s1 ; i)
2S
stari, atunci
Algoritmul (ALG2):
begin
= fF; S F g;
i := 0;
repeat
i := i + 1;
i
calculeaza (folosind Lema 2.4.1)
i i
until (= ) or (i = n 2);
end
Complexitatea timp (una grosiera) a algoritmului precedent este de O(n m); unde
n = jS j; m = jj; deoarece bucla \repeat ... until " se executa de cel mult O(n) ori,
k
iar constructia lui necesita O(n m): Pentru implementare, puteti consulta Anexa
A sau [1]. Varianta implementata acolo este ^mbunatatita, av^and O(n m) operatii.
0
-
q
>
6 ~
N
U
K
-
U
0
0; 1
58
fs ; s ; s g; fs ; s ; s ; s g
3
2
3
Cazul I.1: e perechea fs3 ; s4 g; avem fs3 ; s4 g 2 si (s3 ; 0) = s5 si (s4 ; 0) = s5 ;
0
2
si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s s si s s ,
deci fs ; s g 2;
5
Cazul I.3: pentru perechea fs4 ; s5 g se poate proceda la fel sau, mai elegant,
k
59
2
4
2
si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s s si s s ,
deci fs ; s g 2;
1
2 si (s ; 0)
(s ; 0) = s : Nu mai continuam deoarece s
6 s : Deci fs ; s g 62;
= s si
2
si (s ; 0) = s si
(s ; 0) = s ; respectiv (s ; 1) = s si (s ; 1) = s : Dar s s si s s ,
deci fs ; s g 2;
6
Cazul II.4: pentru perechea fs1 ; s2 g: Putem proceda ca p^ana acum, sau folosim
simetria si tranzitivitatea relatiei : Astfel, presupunem prin reducere la absurd, ca fs ; s g 2 : Utiliz^and cazul II.1, rezulta ca fs ; s g 2; ceea ce este
o contradictie cu cazul II.2. Asadar, fs ; s g 62;
0
Cazul II.5: pentru perechea fs1 ; s6 g: Din cazurile II.1 si II.3, rezulta fs1 ; s6 g 2;
Cazul II.6: pentru perechea fs2 ; s6 g: Din cazurile II.4 si II.5, rezulta fs2 ; s6 g 62;
fs ; s ; s g; fs g; fs ; s ; s g:
Este vorba de o optimizare a procedeului de mai sus. Pentru cazul I, respectiv II, sunt
suciente doar 2; respectiv 3 subcazuri, fata de cele dezbatute 3; respectiv 6: ^In general,
k
daca o clasa de echivalenta a relatiei are n elemente, atunci sunt suciente n 1
n
(
n
1)
subcazuri, ^n loc de Cn2 = 2 : Acest lucru rezulta imediat din proprietatile relatiei
60
; obtinem fs ; s ; s g 2 :
1
Cazul II: ^In ceea ce priveste clasa fs0 ; s1 ; s6 g; ^n mod asemanator cu cazul II de
fs ; s g; fs g:
0
^In mod analog, se calculeaza si se observa ca = : Conform Teoremei 2.4.1 si
Lemei 2.4.1, rezulta ca relatia are urmatoarele clase de echivalenta:
3
fs ; s g; fs g; fs g; fs ; s ; s g:
0
c) Conform Denitiei 2.4.3 si punctelor a) si b) de mai sus, rezulta ca automatul
minimal echivalent cu A este A0 = (f[s ]; [s ]; [s ]; [s ]g; f0; 1g; 0; [s ]; [s ]); unde 0
este dat prin urmatorul graf de tranzitie:
R
1
[s ]
- [s ]
0
[s ]
?
s
3
[s ]
0; 1
0; 1
Legatura dintre starile lui A0 si cele ale lui A este imediata:
[s ] = fs ; s g; [s ] = fs g; [s ] = fs g; [s ] = fs ; s ; s g:
0
d) Este mai simplu de dedus si demonstrat care este limbajul acceptat de A
folosind automatul minimal echivalent cu A; deoarece are mai putine stari. Asadar
L(A) = L(A0 ) = fp=p 2 [s ] 0 0 g = f(01)1f1; 0g ; (01) 00f1; 0g g = f(01)(1 +
00)f1; 0g g:
! Exercitiul 2.4.1 re
ecta un exemplu de automat minimal care are doar jumatate
A ;s