Stări neproductive
Un automat finit poate avea stări din care nu este posibil să ajungem într-o stare finală și care sunt, de aceea, inutile. Astfel de stări se numesc stări neproductive. De obicei vrem să le eliminăm, deoarece nu fac decât să complice inutil automatul.
Exemplu de stări neproductive
Fie acest automat finit:
Vedem că, din momentul în care ajungem în stările q4 sau q5, nu vom mai reuși niciodată să ajungem într-una dintre stările finale q1 sau q2. Astfel de stări sunt neproductive și le putem pur și simplu elimina, obținând un automat nou, dar echivalent; ar accepta același limbaj. După ștergerea stărilor neproductive, automatul ar arăta astfel:
Și ar accepta în continuare același limbaj. Totuși, există situații în care este potrivit să păstrăm unele stări neproductive – de exemplu, când construim un automat complet.
Definiția stării neproductive
Fie un automat finit A = ⟨Q, Σ, δ, q0, F⟩. Spunem că o stare q ∈ Q este neproductivă dacă nu există niciun cuvânt w ∈ Σ∗ și nicio stare qf ∈ F astfel încât
Cum eliminăm stările neproductive
Presupunem că la intrare avem un automat A = ⟨Q, Σ, δ, q0, F⟩ care este deja fără stări inaccesibile. Vom găsi treptat stările care duc în stările finale, apoi stările care duc în stările care duc în stările finale și tot așa mai departe. Astfel obținem mulțimea tuturor stărilor productive. La început punem S0 = F. Vom construi următoarele mulțimi Si pentru i ∈ ℕ după această regulă:
Mulțimea rezultată a tuturor stărilor productive o putem exprima astfel:
Iar mulțimea stărilor neproductive astfel:
Cu alte cuvinte: dacă Si = Si + 1, atunci mulțimea Q ∖ Si conține stările neproductive. Vom ilustra procedeul pe acest automat:
Mai întâi punem egalitatea S0 = {q1, q2}. Apoi construim mulțimea S1 adăugând la mulțimea S0 toate stările care duc într-una dintre stările mulțimii S0. Adăugăm astfel stările q0 și q3, deoarece din q0 pleacă o tranziție spre q1, iar din q3 pleacă o tranziție spre q2. Obținem S1 = {q0, q1, q2, q3}. Deoarece S0 ≠ S1, continuăm.
Construim mulțimea S2. Căutăm deci toate stările din care se poate ajunge în S1 și care încă nu sunt în S1. Este o singură stare, q6, din care se poate ajunge în starea q3. Obținem S2 = {q0, q1, q2, q3, q6}. Deoarece S1 ≠ S2, continuăm.
Construim mulțimea S3. Există vreo stare nouă din care se poate ajunge în vreuna dintre stările din S2? Nu există: din stările q4 și q5 nu se poate ajunge în niciuna dintre stările din S2, iar celelalte stări sunt deja în S2. Deci S3 = {q0, q1, q2, q3, q6}. Deoarece S2 = S3, algoritmul se oprește, iar mulțimea S2 este mulțimea stărilor productive. Mulțimea {q4, q5} este mulțimea stărilor care sunt neproductive.
Formal, construim un automat nou echivalent, fără stări neproductive, astfel. Avem automatul A = ⟨Q, Σ, δ, q0, F⟩ și construim pentru el un automat echivalent A′ = ⟨Q′, Σ, δ′, q0, F⟩ fără stări neproductive.
- ∀q ∈ Q′, a ∈ Σ: δ′(q, a) = δ(q, a), dacă δ(q, a) ∈ Q′, altfel δ′(q, a) nu este definită
Surse
Capitole: Stări inaccesibile, Stări neproductive, Minimizarea automatului