Vés al contingut

Construcció de subconjunts

De la Viquipèdia, l'enciclopèdia lliure

En la teoria de la computació, la Construcció de subconjunts és un mètode estàndard per a, partint d'un NFA (Autòmat Finit No Determinista), obtenir un DFA (Autòmat Finit Determinista) equivalent, és a dir, que reconegui el mateix Llenguatge regular. En la teoria és important perquè estableix que els NFA encara que són més flexibles, no poden reconèixer cap llenguatge que un DFA no pugui. No obstant això, donat un NFA amb estats, el DFA equivalent podria tenir fins estats, per la qual cosa de vegades, construir un DFA a partir d'un NFA de grans dimensions no és practicable. Aquest problema es minimitza en gran manera amb l'algorisme de Construcció de subconjunts , el qual limita la inserció d'estats al DFA resultant únicament als casos estrictament necessaris.

Sigui un NFA. L'algorisme de Construcció de subconjunts permet trobar un DFA de manera que

Algorisme de construcció de subconjunts

[modifica]

Vegem un Pseudocodi per l'algorisme:

 = S = ;
desmarcar(S);
DFA_states := {S};
While ( T  DFA_states and !marcat(T)) do
marcar (T);
For all a  do
R := (T, a));
(T, a) := R;
if (!(R  DFA_states)) then
DFA_states := DFA_states  {R};
desmarcar(R);
end;
end;
end;

Apliquem ara l'algorisme al NFA de la següent figura:

NFA exemple

Comencem obtenint la -clausura de l'estat d'arrencada del NFA, és a dir, el conjunt d'estats abastables des de l'estat inicial, consumint únicament -transicions .


Figura1_1

Un cop tenim definit l'estat d'arrencada del nostre DFA, podem començar a completar els estats i transicions restants. Com sabem que S representa un conjunt d'estats del NFA inicial, només hem de fer transitar aquest conjunt amb cada símbol del nostre alfabet i estudiar a quins altres conjunts s'arriba. Si aquests altres conjunts no pertanyen a Q ', llavors els afegirem al nostre DFA, en el cas contrari, només haurem d'afegir noves transicions.
En el nostre cas, el nostre estat inicial S ={0,1,2,4,7}transita amb símbol 'a' a un nou conjunt ({3,8}), al qual calcularem la seva -clausura per obtenir B ={0,1,2,3,4,6,7,8}.

 

Figura1_2

Repetim el procés anterior usant ara l'altre símbol pertanyent al nostre alfabet.



Figura1_3

Un cop creades totes les transicions possibles per al nostre estat inicial ( S ), continuem l'execució de l'algorisme amb cada un dels estats trobats prèviament. En aquesta iteració, obtenim un conjunt d'estats ja conegut, per la qual cosa, només haurem d'afegir la transició corresponent al nostre autòmat.



Figura1_4



Figura 1.5



Figura 1.6



Figura 1.7



Figura 1.8



Figura 1.9



Figura 1.10



Figura 1.11

El conjunt d'estats d'acceptació del DFA resultant estarà format per tots aquells estats que continguin un estat final de l'NFA. En el nostre cas, el NFA inicial tenia un estat d'acceptació identificat com 10 . En el procés que hem seguit només hem obtingut un conjunt que contingui aquest estat ( E ), per la qual cosa aquest es convertirà en el nostre nou estat d'acceptació.


El DFA resultant quedaria d'aquesta forma:

Figura 2

Exemples

[modifica]

Exemple 1

[modifica]

Exemple 1 Exemple 1

Exemple 2

[modifica]

Exemple 2

Exemple 2

Referències

[modifica]