Äärellinen automaatti

**Äärellinen automaatti** on tietojenkäsittelytieteen automaattiteoriassa, kieliteknologiassa ja generatiivisessa kielitieteessä käytetty käsite, joka viittaa tehtävän, kielen tai vaikkapa tietojoukon mallintamiseen eräänlaisena tilojen ja niiden välisten relaatioiden tai siirtymien joukkona. Äärellinen automaatti on malli äärellistilaiselle tietokoneelle, joka saa syötteen merkki kerrallaan.

Automaatit jaetaan niiden tilasiirtymien ominaisuuksien mukaan kahteen ryhmään: epädeterministisissä äärellisissä automaateissa on tyhjiä kaaria, joita merkitään joko lambdalla '&lambda;' tai epsilonilla '&epsilon;', ja kutsutaan sovellusalueesta riippuen vaikkapa vapaiksi siirtymiksi, tai tyhjäksi syötteeksi. Tällaisen kaaren tarkoitus on mahdollistaa vapaa siirtyminen tilasta toiseen, joka usein helpottaa automaatin kokoamista. Toinen erikoistapaus kaaren paino tai todennäköisyys, jotka viittaavat siirtymän valintaan jonkinasteisen sattuman mukaan. 

Äärellisiä automaatteja tyypillisesti kuvataan graafisesti siten, että tiloja merkitään ympyröillä tai ellipseillä, ja tilojen välisiä siirtymiä merkitään nuolilla. Sekä tilat, että siirtymät ovat nimettyjä. Tilojen nimet kirjoitetaan tässä ympyrän sisälle, ja siirtymien nimet kaaren päälle tai sen läheisyyteen.

## Deterministinen äärellinen automaatti

Deterministinen äärellinen automaatti, lyh. *DFA* (*engl. deterministic finite-state automaton*) on tila-automaatti, jossa kustakin tilasta voi olla vain yksiselitteisiä tilasiirtymiä muualle. Tällaisen automaatin erottamisen peruste on, että näin voidaan koneellisesti tai mekaanisesti läpikäydä automaattia ilman epäselvyyksiä tai välivaiheita.

### DFA:n määrittely

Deterministinen äärellinen automaatti määritellään viisikkona ( Q, &Sigma;, &delta;, q̂, F ) jossa:
*Q on äärellinen joukko tiloja
*&Sigma; on kielen aakkosto
*&delta; on osittainen funktio Q×&Sigma; → q
*q̂ ∈ Q, alkutila
*F ⊆ Q, lopputilojen joukko

DFA voidaan esittää graafisesti graafina, jolloin automaatin tila piirretään solmuina, alkutila merkitään siihen tyhjästä osoittavalla nuolella, ja hyväksyvät lopputilat kaksinkertaisilla ympyröillä. Tilasiirtymät piirretään kaarina tilojen välille. Kaaret nimetään kielen aakkoston mukaan, samasta tilasta voi olla vain yksi samanniminen lähtökaari.

### DFA:n toiminta

DFA aloittaa toimintansa alkutilasta q̂ ja lukee syöteaakkostoon kuuluvia merkkejä. Merkin lukemisen seurauksena voi tapahtua kaksi asiaa: jos siirtymä &delta;(q, a) on määritelty, automaatti siirtyy tilaan &delta;(q, a), muutoin automaatti lakkaa olemasta missään tilassa.

Deterministinen äärellinen automaatti D hyväksyy kielen merkkijonon &alpha; jos ja vain jos &alpha;:n lukeminen vie D:n alkutilasta johonkin lopputilaan.

Äärellinen automaatti kuvaa siis yleensä kaikkia mahdollisia siirtymäreittejä alkutilasta lopputilaan oikeina ratkaisuina, kun taas mikä tahansa automaatin seuraaminen joka päätyisi muualle kuin lopputilaan antaisi virheellisen tuloksen.

### DFA:n operaatioita

DFA:n osittainen tilasiirtymäfunktio &delta; voidaan täydentää täydelliseksi. Tämä tapahtuu lisäämällä uusi hylkäävä tila, nimeltään vaikkapa qr (R = *reject*), ja vetämällä kaari (qr, a, qr) jokaiselle a ∈ &Sigma; ja (q, a, qr) jokaiselle q ∈ Q ja a ∈ &Sigma;, joille &delta;(q, a) ei ole määritelty.

DFA:n voidaan komplementoida, jolloin aakkostosta &Sigma; muodostetun kielen ℒ komplementti ℒ - &Sigma;* on ne merkkijonot, jotka eivät kuulu ℒ:ään. Tämä tapahtuu muuntamalla kaikki lopputilat ei-lopputiloiksi ja ei-lopputilat lopputiloiksi. Ennen tätä operaatiota DFA:n tilasiirtymäfunktio on muutettava täydeksi.

Saavuttamattomien tilojen poisto: jos DFA:ssa on tiloja, joita ei voida saavuttaa alkutilasta, ne voidaan poistaa kielen muuttumatta. Tämä onnistuu valitsemalla joukkoon Q' vain ne tilat, joihin on polku alkutilasta.

Automaatin minimointi: saman kielen hyväksyviä automaatteja on äärettömän monta. Niitä voidaan konstruktoida vaikka lisäämällä loputtomasti tiloja, joihin ei ole kaaria mistään. Saavuttamattomien tilojen poisto tekee osan minimoinnista, mutta ei täydellistä. Automaatin minimointi tapahtuu etsimällä tilojen joukkoja, *lohkoja*, jotka hyväksyvät saman kielen. Lohkot voidaan yhdistää tiloiksi, ja lohkojen väliset siirtymät näiden tilojen välisiksi siirtymiksi.

Minimoitu DFA, josta on poistettu saavuttamattomat tilat on yksikäsitteinen, ja hyväksyy saman kielen kuin alkuperäinen DFA.

Tuloautomaatti: Kahden DFA:n tuloautomaatti muodostaa automaatin, jonka hyväksymä kieli on sama kuin automaattien kielen leikkaus. Se voidaan muodostaa seuraavilla operaatioilla:
*Q = Q1 × Q2
*&delta;((q1, q2), a) = (&delta;(q1, a), &delta;(q2, a)), jos &delta;(q1, a) ja &delta;(q2, a) on määritelty, muutoin määrittelemätön
*q̂ = (q̂1 × q̂2)
*F = F1 × F2
*&Sigma;:n on oltava sama molemmille automaateille.

## Epädeterministinen äärellinen automaatti

Epädeterministinen äärellinen automaatti, lyh. *NFA* (*engl. non-deterministic finite-state automaton*) on tila-automaatti, jossa kustakin tilasta voi olla samalla aakkosella tilasiirtymiä useampaan kuin yhteen tilaan. Nimessä oleva osa epädeterministinen tulee siitä, että saman ratkaisun tuottavat tilat voidaan käydä lävitse useampaa kuin yhtä polkua pitkin kulkemalla. NFA:n ilmaisuvoima ei ole suurempi kuin DFA:n, mutta tietyntyyppiset DFA:t voi ilmaista huomattavasti yksinkertaisemmilla tilakoneilla NFA:ta käyttäen. Mielivaltaisesta epädeterministisestä äärellisestä automaatista voidaan muodostaa algoritmisesti saman kielen hyväksymä vastaava deterministinen automaatti.

NFA:ssa DFA:n osittainen tilasiirtymäfunktio &delta; korvataan tilasiirtymärelaatioilla, joka merkitään &Delta;. NFA on *ystävällisesti epädeterministinen*, ja hyväksyy merkkijonon &alpha;, jos on olemassa polku q̂─&alpha;→q, jossa q ⊂ F. Eli valitsee aina hyväksyntään johtavan tavan jos sellainen on olemassa.

## Sovellutuksia

Äärellisillä automaateilla voidaan mallintaa formaaleja kieliä. Tällöin äärellinen automaatti muodostetaan siten, että siirtymäkaaret ovat kielen aakkoston symboleita, ja kaikki onnistuneet matkat alkutilasta lopputilaan kuvaavat siirtymäjoukoillaan kaikkia kielen sallittuja ilmauksia. Automaatin tunnistama kieli on sen hyväksymien syötteiden joukko. 

Äärellisillä automaateilla on kielenmallinnuksessa suora yhteys säännöllisiin ilmauksiin. Säännölliset ilmaukset voi konvertoida äärellisiksi automaateiksi hyvin yksinkertaisella ja intuitiivisella mekaniikalla. Tyypillisesti tässä käytetään apuna indeterminististä automaattia joka determinisoidaan tarvittaessa lopuksi. Esimerkiksi olkoot a, b mielivaltaisia aakkoston kirjainjoukkoja joita vastaa automaatissa joukko tiloja ja kaaria:
* *a** saadaan aikaan vetämällä aloitustilasta &epsilon;-siirtymä lopputilojen ohi ja vastaavasti lopputiloista alkutilaan (0&mdash;n kertaa tilajoukon läpikäynti)
* *(a|b)* saadaan erottamalla yhteinen alkutila, josta siirrytään &epsilon;-kaarella a:n tai b:n alkutilaan, ja joukkojen lopuista vastaavasti yhteiseen lopputilaan.

## Lähteet
# Aho, A. & Ullman, J. D. (1977) Principles of Compiler Design. 
# Valmari, Antti: Ohjelmistotekniikan matemaattiset menetelmät, TTY, 2004
# Orponen, Pekka: Laskennan teoria, Helsingin yliopisto, 1994

## Aiheesta muualla