Sunteți pe pagina 1din 5

Transformarea AFN n AFD

Un AFN se poate transforma ntr-un automat finit determinist (AFD) care s accepte acela i limbaj ca i AFN. Not m cu s0 starea ini ial a AFN. O stare a AFD va fi compus dintr-o mul ime de st ri {s1, s2,..., sn } ale AFN. No iunea de P-nchidere se define te pentru fiecare mul ime de st ri T ale unui automat: este mul imea st rilor n care se poate trece din st rile mul imii T pentru un simbol de intrare. Exemplu: Pentru automatul din Figura 2, prin tranzi ii vide, P-nchidere(0) = {0,2}, P-nchidere(1) = {1}, P-nchidere(0, 3) = {0,2,3} etc. Not m: alfabetul limbajului surs Dst ri mul imea st rilor AFD Dtranz mul imea tranzi iilor Pentru implementarea algoritmului putem folosi ca structuri de date dou stive i un ir de cifre binare indexat de st rile automatului. ntr-una din stive se ine eviden a mul imii curente a st rilor nedeterministe iar a doua stiv se utilizeaz pentru calculul mul imii de st ri urm toare. Vectorul de cifre binare nregistreaz dac o stare este prezent n stiv , pentru a se evita dublarea ei. Organizarea acestei structuri ca vector are avantajul timpului de c utare constant al unei st ri. Dup ncheierea procesului de calcul a mul imii de st ri urm toare, rolul stivelor se inverseaz . Se ini ializeaz st rile AFD c utat Dst ri cu un singur element (o stare), i anume cu mul imea st rilor n care se poate ajunge din starea s0 a AFN numai prin tranzi ii vide (de fapt P-nchidere({s0}), care va fi notat cu P-nchidere({s0}). La nceput aceast stare e nemarcat . Totodat , mul imea tranzi iilor este vid . Pentru fiecare stare nemarcat din Dst ri i pentru fiecare simbol din alfabet se caut st rile n care se poate ajunge n AFN pentru simbolul respectiv. Adaug aceste st ri la Dst ri dac ele nu sunt deja incluse n aceast mul ime, adaug tranzi ia la Ditranz i marcheaz starea testat din Dst ri.
Algoritmul de ob inere a AFD este:

procedura AFN2AFD este *ini ializeaz Dst ri cu P-nchidere({s0}) *la nceput st rile din Dst ri sunt nemarcate Dtranz = ct timp mai exist n Dst ri o stare x = {s1, s2,. . ., sn } nemarcat execut

*marcheaz x pentru fiecare a execut *fie T = mul imea st rilor din AFN pentru care  o tranzi ie etichetat cu a de la o stare si x; y = P-nchidere(T); dac y Dst ri atunci *adaug y la Dst ri, y - nemarcat *adaug tranzi ia x p y la Dtranz, dac nu exist deja sfr it AFN2AFD

Algoritmul de calcul pentru func ia P-nchidere este: func ia P-nchidere( T ) este *pune toate st rile din T ntr-o stiv *ini ializeaz P-nchidere( T ) cu T ct timp stiva nu e vid execut *extrage starea s din vrful stivei pentru fiecare stare t pentru care  s p t pentru simbolul P execut dac t P-nchidere( T ) atunci *adaug t la P-nchidere( T ) *pune t n stiv

sfr it P-nchidere( T )

Exemplu: Fie AFN din figura 7. Limbajul acceptat este: {a, b, ab, abab, }.

b 2 3

P
0

P P
7

P
4 b 6

Figura 7
Aplic m algoritmul AFN2AFD pe diagrama de tranzi ii. Dst ri = {(0,1,4)} Dtranz =

Se marcheaz cu * starea (0,1, 4)


- Pentru simbolul a construim mul imea {2, 5} i calcul m P-nchidere ({2, 5}) = {2, 5, 7} Dst ri = {(0,1,4)* , (2, 5, 7)} Dtranz = {(0,1,4)p(2, 5, 7) cu simbolul a} - Pentru simbolul b construim mul imea {6} i calcul m P-nchidere ({6}) = {6, 7} Dst ri = {(0,1,4)* , (2, 5, 7), (6, 7)} Dtranz = {(0,1,4)p(2, 5, 7) cu a; (0,1,4)p(6,7) cu b }

Se marcheaz cu * starea (2, 5, 7)


- Pentru simbolul a nu avem tranzi ii - Pentru simbolul b construim mul imea {3} i calcul m P-nchidere ({3}) = {1, 3, 7} Dst ri = {(0,1,4)* , (2, 5, 7)*, (6, 7), (1, 3, 7)} Dtranz = {(0,1,4)p(2, 5, 7) cu a; (0,1,4)p(6,7) cu b ; (2, 5, 7) p(1, 3, 7) cu b}

Se marcheaz cu * starea (6,7)


- Pentru simbolul a nu avem tranzitii - Pentru simbolul b nu avem tranzi ii Dst ri = {(0,1,4)* , (2, 5, 7)*, (6, 7)*, (1, 3, 7)} Dtranz = {(0,1,4)p(2, 5, 7) cu a; (0,1,4)p(6,7) cu b ; (2, 5, 7) p(1, 3, 7) cu b}

Se marcheaz cu * starea (1, 3, 7)


- Pentru simbolul a construim mul imea {2} i calcul m P-nchidere ({2}) = {2} Dst ri = {(0,1,4)* , (2, 5, 7)*, (6, 7)*, (1, 3, 7)*, (2)} Dtranz = {(0,1,4)p(2, 5, 7) cu a; (0,1,4)p(6,7) cu b ; (2, 5, 7) p(1, 3, 7) cu b; (1, 3, 7) p(2) cu a } - Pentru simbolul b nu avem tranzi ii

Se marcheaz cu * starea (2)


- Pentru simbolul a nu avem tranzi ii - Pentru simbolul b construim mul imea {3} i calcul m P-nchidere ({3}) = {1, 3, 7}, dar ea exist . Dst ri = {(0,1,4)* , (2, 5, 7)*, (6, 7)*, (1, 3, 7)*, (2)*} St rile pot fi redenumite, de exemplu: (0,1,4) = A B C D E

(2, 5, 7) = (6, 7) =

(1, 3, 7) = (2) =

Matricea i diagrama de tranzi ii pentru AFD par ial definit sunt cele din Figura 8. Se observ c AFD ob inut accept exact limbajul {a, b, ab, abab, } acceptat de AFN ini ial.

St rile acceptoare (finale) ale AFD ob inut vor fi acele st ri x care vor con ine cel pu in o stare acceptoare a AFN. Starea de start a AFD este cea format din s0 mpreun cu toate st rile la care se poate ajunge din s0 doar prin simbolul P. Algoritmul de mai sus este important pentru c d solu ia pentru simularea unui AFN. Simularea direct este dificil , deoarece trebuie simulat calculul "n paralel" al diferitelor traiectorii ce pot fi urmate n AFN. Folosind algoritmul, se determin mai nti AFD echivalent i apoi se simuleaz AFD. Aceast simulare este echivalent cu construirea analizorului limbajului generat de gramatic .

a A B C D E B --E --

a
C D --D

b
B D E

a
A C

Figura 8