✖

Saavuttamattomat tilat

Äärellisessä automaatissa voi olla tiloja, joihin ei ole mahdollista päästä. Tällaisia tiloja kutsutaan saavuttamattomiksi tiloiksi. Ne haluamme yleensä poistaa, koska ne vain turhaan monimutkaistavat koko automaattia.

Esimerkki saavuttamattomista tiloista

Olkoon meillä tämä automaatti:

Näemme, että mitä tahansa teemmekin, emme koskaan pääse tilaan q3, koska siihen ei johda yhtään siirtymää. Sanomme siis, että tila q3 on saavuttamaton. Kysymys — olisiko tila q3 saavutettavissa, jos siihen johtaisi siirtymä jostakin toisesta tilasta? Jos vetäisimme siihen kaaren jostakin tiloista q0, q1, q2, q5, se olisi saavutettavissa. Jos lisäisimme toisen solmun ja vetäisimme siirtymän siitä…

…niin sekä tila q3 että q4 olisivat tietenkin saavuttamattomia.

Saavuttamattoman tilan määritelmä

Määrittelemme ensin saavutettavissa olevan tilan. Olkoon meillä äärellinen automaatti A = (Q, Σ, δ, q0, F). Sanomme, että tila q ∈ Q on saavutettavissa, jos on olemassa sana w ∈ Σ∗, jolle

(q0,w)↦∗(q,ε).

Tila q ∈ Q on saavuttamaton, jos se ei ole saavutettavissa.

Saavuttamattomien tilojen poistaminen

Jos automaatissa on jo saavuttamattomia tiloja, ne kannattaa poistaa. Rakennamme siis ekvivalentin automaatin A′ = (Q′, Σ, δ′, q0, F′), jossa ei ole saavuttamattomia tiloja.

Rakennamme saavutettavissa olevien tilojen joukon iteratiivisesti. Aloitamme joukosta S0 = {q0}, koska alkutila on varmasti saavutettavissa. Seuraavan joukon rakennamme näin:

Si={r|δ(q,a)=r jollekin q∈Si−1,a∈Σ}∪Si−1

Suomeksi sanottuna joukko S0 on aina annettu, ja joukon S1 rakennamme ottamalla kaikki joukon S0 tilat ja selvittämällä, mihin kaikkialle niistä johtaa siirtymiä kaikille aakkoston Σ symboleille. Nämä tilat yhdistämme alkuperäiseen tilojen joukkoon S0. Samalla tavalla selvitämme joukon S2 ja seuraavat. Selvästi pätee Si − 1 ⊆ Si.

Saavutettavissa olevien tilojen joukon saamme sitten näin:

⋃i=1∞Si

Voi näyttää oudolta, että yritämme yhdistää äärettömän monta joukkoa Si, mutta automaatissa on vain äärellinen määrä tiloja. Se tarkoittaa, että jossakin vaiheessa joukot Sj ja Sj + 1 ja kaikki seuraavat ovat samat, joten myös äärettömän monen joukon yhdisteenä voimme saada äärellisen tilojen joukon.

Palataan automaattiin

ja yritetään löytää saavutettavissa olevien tilojen joukko. Aloitamme asettamalla perusyhtälön

S0={q0}

Nyt laskemme joukon S1. Meidän täytyy löytää kaikki tilasta q0 lähtevät siirtymät ja lisätä niiden kohdetilat joukkoon S0. Koska pätee q0 → a q1 ja q0 → bq2, joukossa S1 on lisäksi tilat q1 ja q2:

S1={q0,q1,q2}

Seuraavaksi muodostamme joukon S2. Katsomme, minne kaikkialle pääsemme tiloista q0, q1, q2. Ainoa uusi tila on q5, johon pääsemme tilasta q1:

S2={q0,q1,q2,q5}

Sitten muodostamme joukon S3. Pääsemmekö tiloista q0, q1, q2, q5 johonkin uuteen tilaan? Emme, joten joukossa S3 on samat alkiot kuin joukossa S2:

S3={q0,q1,q2,q5}

Koska S2 = S3, myös S3 = S4 = S5 = … Jos yhdistämme kaikki joukot Si, saamme joukon S2, koska mihinkään seuraavaan joukkoon ei tule enää yhtään uutta alkiota.

Automaatin saavutettavissa olevien tilojen joukko on siis {q0, q1, q2, q5}. Saavuttamattomat tilat saamme pelkällä joukkojen erotuksella:

Q∖⋃i=1∞Si

Automaattimme saavuttamattomien tilojen joukko on {q3, q4}. Poistamme automaatista A kaikki saavuttamattomat tilat ja kaikki siirtymät, joissa oli jokin saavuttamaton tila. Eli ekvivalentin automaatin ilman saavuttamattomia tiloja A′ = (Q′, Σ, δ′, q0, F′) automaatille A = (Q, Σ, δ, q0, F) määrittelemme seuraavasti:

  • Q′=⋃i=1∞Si
  • ∀q ∈ Q′, a ∈ Σ:  δ′(q, a) = δ(q, a)
  • F′=F∩Q′=F∩⋃i=1∞Si

Lähteet

Luvut: Saavuttamattomat tilat, Tarpeettomat tilat, Automaatin minimointi