Yleistetty epädeterministinen äärellinen automaatti
Yleistetty epädeterministinen äärellinen automaatti, lyhyesti GNFA, on epädeterministinen automaatti, jonka siirtymissä ei tarvitse olla pelkästään aakkoston symboleja, vaan niissä voi olla säännöllinen lauseke.
Määritelmä
Tarvitsemme GNFA:ta algoritmissa, jolla äärellinen automaatti muunnetaan säännölliseksi lausekkeeksi. GNFA on siis NFA, jonka siirtymät on määritelty säännöllisillä lausekkeilla. Esimerkki tällaisesta GNFA:sta:
Näemme, että esimerkiksi tilasta q2 johtaa siirtymä tilaan qf, ja se on merkitty säännöllisellä lausekkeella a∗ b. GNFA:lle on lisäksi muita vaatimuksia:
- Alkutilasta q0 täytyy olla siirtymä kaikkiin muihin tiloihin. Kuvassa näemme, että tilasta q0 johtavat siirtymät kaikkiin muihin tiloihin.
- GNFA:ssa on vain yksi lopputila, ja kaikista muista tiloista on siirtymä tähän tilaan. Kuten kuvasta näkyy, kaikista tiloista on nuoli tilaan qf.
- Alkutila ei saa olla sama kuin lopputila. GNFA:ssa on siis vähintään kaksi tilaa.
- Kaikista muista tiloista paitsi alku- ja lopputilasta täytyy olla siirtymät kaikkiin muihin tiloihin paitsi alku- ja lopputilaan. Silmukat mukaan lukien (siirtymä tilasta qi tilaan qi).
Tavallisen NFA:n muuntaminen GNFA:ksi
Jos meillä on jokin NFA, muuntaminen GNFA:ksi on helppoa.
- Luomme uuden alkutilan qs ja luomme epsilon-siirtymän alkuperäiseen alkutilaan.
- Luomme uuden lopputilan qf ja johdamme kaikista alkuperäisistä lopputiloista epsilon-siirtymät tilaan qf. Alkuperäisistä lopputiloista teemme tavallisia tiloja.
- Jos jossakin on useita siirtymiä (eli jos tilasta q1 pääsee tilaan q2 sekä symbolilla 0 että symbolilla 1), yhdistämme nämä säännöt yhdeksi säännölliseksi lausekkeeksi ja liitämme kaikki alkuperäiset symbolit yhdisteoperaattorilla (eli merkitsemme nuolen säännöllisellä lausekkeella 0|1).
- Jos automaatista puuttuu jokin siirtymä, jonka määritelmän mukaan pitäisi olla siinä, luomme sen ja merkitsemme sen säännöllisellä lausekkeella ∅. Näin emme muuta automaatin hyväksymää kieltä, koska tällaista siirtymää ei koskaan tehdä.
Tätä automaattia voimme käyttää automaatin muuntamiseen säännölliseksi lausekkeeksi.
Luvut: Säännölliset lausekkeet, Säännöllisen lausekkeen muuntaminen automaatiksi, Yleistetty epädeterministinen äärellinen automaatti, Automaatin muuntaminen säännölliseksi lausekkeeksi