Ovaj članak ili neki od njegovih odlomaka nije dovoljno potkrijepljen izvorima (literatura, veb-sajtovi ili drugi izvori). |
U teoriji računanja, nedeterministički konačni automat (NKA) je konačni automat u kojem za svaki par stanja i ulaznog znaka (simbola) može postojati nekoliko mogućih sljedećih stanja.
NKA obrađuje niz ulaznih znakova. Za svaki ulazni znak obavlja prijelaz u novo stanje sve dok svi ulazni znakovi nisu obrađeni.
Zovemo ga nedeterminističkim zato što se može dovesti u situaciju da postoje višestruki prijelazi iz trenutnog stanja koristeći isti znak. Za ε-NKA je također moguć prijelaz u novo stanje bez čitanja ulaznog znaka uopće. Na primjer, ako je neki fiktivni ε-NKA trenutno u stanju 1, a sljedeći ulazni znak jest a, on može preći u stanje 2 bez da obradi ijedan ulazni znak, kao i ući u stanje 3 čitanjem znaka a. NKA ne može odrediti koji je korektan prijelaz koji treba obaviti, te stoga ulazi u oba stanja.
Promjene stanja ε-NKA, a da se pri tome ne pročita ulazni znak, zovemo epsilon-prijelazi ili lambda-prijelazi. Obično se označavaju grčkim slovima ε ili λ.
Kada NKA pročita sve znakove ulaznog niza, on prihvaća niz ako i samo ako postoji neki slijed prijelaza koje može načiniti a koji će ga dovesti u prihvatljivo stanje. Shodno tome, ne prihvaća (odbija) niz znakova ako bez obzira koje izbore učini prilikom prijelaza u neki element skupa od više stanja, neće završiti u nekom od prihvatljivih stanja.
Nedeterministički konačni automat (NKA) se formalno definira kao uređena petorka, (S, Σ, T, s0, A), koju čini:
gdje je P(S) partitivni skup (skup svih podskupova) skupa S, ε prazni niz, a Σ ulazna abeceda
Neka je M NKA takav da M = (S, Σ, T, s0, A), i X je niz znakova nad abecedom Σ. M prihvaća niz X ako postoji i reprezentacija niza X oblika x1x2 ... xn, xi ∈ (Σ ∪{ε}), i slijed prijelaza stanja r0,r1, ..., rn, ri ∈ S koji zadovoljava sljedeće uvjete:
Stroj započinje rad u proizvoljnom početnom stanju te potom čita niz znakova svoje ulazne abecede. Automat koristi relaciju prijelaza T da odredi sljedeće stanje koristeći trenutno stanje te znak upravo pročitan ili prazni niz (u slučaju ε-prijelaza). Međutim, sljedeće stanje NKA ne ovisi samo o trenutnom ulaznom događaju (tj. trenutno pročitanom znaku), već i o proizvoljnom broju narednih ulaznih događaja. Sve dok se ti sljedeći ulazni događaji ne dogode (tj. znakovi se ne pročitaju), nije moguće odrediti stanje u kojem se stroj nalazi. Ako se po završetku čitanja ulaznog niza automat nalazi u prihvatljivom stanju, kažemo da NKA prihvata niz, inače kažemo da ga ne prihvata (odbija).
Skup svih nizova znakova koje NKA prihvata zovemo jezikom koji NKA prihvata. Taj jezik je regularni jezik.
Za svaki NKA može biti konstruisan istovjetni DKA, tj. DKA koji prihvata isti jezik. Stoga je moguće obaviti konverziju već postojećeg NKA u DKA u svrhu implementiranja jednostavnijeg stroja. Takva konverzija može dovesti do eksponencijalnog rasta u broju potrebnih stanja stroja.
Postoji mnogo načina za ostvarenje NKA:
Sljedeći primjer objašnjava NKA M koji operiše nad binarnom abecedom i koji odlučuje sadrži li ulazni niz znakova paran broj brojki 0 ili paran broj brojki 1.
M = (S, Σ, T, s0, A) gdje je
Dijagram stanja za M jest:
M se može shvatiti kao unija dva DKAa: jednog sa skupom stanja {S2, S1} i drugog sa skupom stanja {S3, S4}.
Jezik automata M može biti opisan sljedećim regularnim izrazom: