Deterministički konačni automat

U teoriji računanja, **deterministički konačni automat** (DKA) je konačni automat u kojem za svaki par stanja i ulaznog znaka postoji jedan i samo jedan prijelaz u sljedeće stanje. DKAi prepoznaju skup regularnih jezika.

DKA prima niz ulaznih znakova, i za svaki ulazni znak obavlja prijelaz u stanje koje određuje funkcija prijelaza. Kada je pročitan cijeli ulazni niz, prihvatit će ili odbiti niz znakova zavisno od toga da li je DKA u prihvatljivom ili neprihvatljivom stanju.

## Formalna definicija 
DKA se formalno definira uređenom petorkom, (*S*, &Sigma;, *T*, *s*, *A*), koja se sastoji od
* konačnog skupa stanja (*S*)
* konačnog skupa ulaznih znakova zvanog *ulazna abeceda* (&Sigma;)
* funkcije prijelaza (*T* : *S* &times; &Sigma; &rarr; *S*)
* početnog (inicijalnog) stanja (*s* &isin; *S*)
* skupa prihvatljivih stanja (*A* &sube; *S*)

Neka je **M** DKA takav da **M** = (*S*, &Sigma;, *T*, *s*, *A*), i *X = x0x1 ... xn* niz znakova nad abecedom &Sigma;. **M** prihvaća niz znakova *X* ako niz stanja *r0,r1, ..., rn*, postoji u *S* uz sljedeće uslove:

# *r0* = *s*
# *ri+1* = *T*(*ri*, *xi*), for *i* = *0, ..., n-1*
# *rn* &isin; *A*.

Kao što je pokazano u prvom uslovu, stroj započinje rad u početnom stanju *s*.
Drugi uslov kaže da će za svaki znak ulaznog niza *X* stroj preći iz trenutnog stanja u stanje upravljano funkcijom prijelaza *T*.

Posljednji uslov kaže da stroj prihvata ulazni niz ako posljednji znak ulaznog niza *X* uzrokuje prijelaz u jedno od prihvatljivih stanja. Inače kažemo da stroj ne prihvata (odbija) ulazni niz. Skup nizova znakova koje DKA prihvaća je oblik formalnog jezika, i predstavlja oblik jezika kojeg DKA prepoznaje.

## Primjer 
Slijedi primjer DKA *M* nad binarnom abecedom koji određuje sadrži li ulazni niz paran broj znamenki 0.

[desno|frame|[dijagram stanja za *M*]]
*M* = (*S*, &Sigma;, *T*, *s*, *A*) gdje je
**S* = {*S*1, *S*2},
*&Sigma; = {0, 1},
**s* = *S*1,
**A* = {*S*1}, and
**T* je definiran  sljedećom tablicom prijelaza:
:

Kratko rečeno, stanje *S*1 predstavlja događaj da se u ulaznom nizu dosad pojavio paran broj cifri 0, dok stanje *S*2 predstavlja događaj da se pojavio neparan broj. Cifra 1 u ulaznom nizu ne mijenja stanje automata. Kada se završi čitanje ulaznog niza, trenutno stanje će pokazati da li je ulazni niz sadržavao paran broj cifri 0 ili ne.

Jezik DKA *M* je regularni jezik opisan sljedećim regularnim izrazom:

:(1^*01^*01^*)^* \,\!

## Prednosti i nedostaci 
DKAi su jedni od najpraktičnijih modela računanja, s obzirom da postoji trivijalan *online* algoritam koji ih simulira u linearnom vremenu i konstantnom prostoru nad tokom ulaznih simbola. Za dva data DKAa postoje djelotvorni algoritmi za pronalaženje DKA koji prepoznaje uniju, presjek te komplement jezika koje oni prepoznaju. Također postoje djelotvorni algoritmi za određivanje da li DKA prihvata bilo koji niz znakova, da li DKA prihvata sve nizove znakova, da li dva DKA prihvataju isti jezik, te za pronalaženje DKA sa minimalnim brojem stanja za zadani jezik.

DKAi su modeli računanja jednake moći kao NKAi (nedeterministički konačni automati).

U drugu ruku, DKAi su strogo ograničene moći nad jezicima koje mogu prepoznati &mdash; mnogi jednostavni jezici, uključujući bilo koji problem čije rješenje zahtijeva više nego konstantan prostor, ne mogu biti prepoznati od strane DKA. Kanonski primjer jezika kojeg nijedan DKA ne može prepoznati jest jezik koji se sastoji od nizova znakova oblika *anbn* &mdash; konačan broj znakova a nakon kojeg slijedi jednaki broj znakova b. Može se pokazati da nijedan DKA ne može imati dovoljan broj stanja da prepozna takav jezik.

## Također pogledajte 
* Turingova mašina

## Reference 
## Vanjski linkovi 
Kategorija:Teorija automata