Razlika između inačica stranice »Potisni automat«
(Bot: Automatski unos stranica) |
m (Bot: Automatska zamjena teksta (-{{cite book +{{Citiranje knjige)) |
||
Redak 79: | Redak 79: | ||
== Izvori == | == Izvori == | ||
* {{ | * {{Citiranje knjige | ||
|author = Michael Sipser | |author = Michael Sipser | ||
| year = 1997 | | year = 1997 | ||
Redak 85: | Redak 85: | ||
| publisher = PWS Publishing | | publisher = PWS Publishing | ||
| id = {{ISBN|0-534-94728-X}}}} | | id = {{ISBN|0-534-94728-X}}}} | ||
*{{ | *{{Citiranje knjige | ||
| author = Siniša Srbljić | | author = Siniša Srbljić | ||
| title = Jezični procesori 1 | | title = Jezični procesori 1 |
Trenutačna izmjena od 23:57, 17. studenoga 2021.
U teoriji automata, potisni automat je konačni automat koji primjenjuje podatkovnu strukturu stog. Termin "potisni" se odnosi na akciju "potiskivanja" (engl. pushing down) kojom bi prototipni mehanički automat fizički doticao bušenu karticu u svrhu iščitavanja njenog sadržaja. Termin "potisni automat" (PA) u teoretskom računarstvu se odnosi na apstraktni matematički stroj koji prepoznaje kontekstno neovisne jezike.
Djelovanje
Potisni se automati razlikuju od normalnog konačnog automata na sljedeća dva načina:
- Mogu upotrebljavati vrh stoga kako bi odlučili koji prijelaz obaviti
- Mogu manipulirati sadržajem stoga prilikom obavljanja prijelaza
Potisni automati odabiru prijelaz indeksiranjem tablice prijelaza sa ulaznim znakom (simbolom), trenutnim stanjem te vrhom stoga. Normalni konačni automati upotrebljavaju samo ulazni znak i trenutno stanje: nemaju stoga nad kojim mogu obavljati promjene. Potisni automati dodaju stog kao parametar izbora. Za dani ulazni znak, trenutno stanje te dani znak na vrhu stoga, odabire se odgovarajući prijelaz.
Potisni automati također mogu manipulirati stogom prilikom obavljanja prijelaza. Normalni konačni automati kao rezultat obavljanja prijelaza odabiru novo stanje. Prilikom manipuliranja stogom može se na vrh stoga dodati (engl. push) određeni znak, ili uzeti (engl. pop) znak za vrha stoga. Automat može alternativno potpuno ignorirati sadržaj stoga, ne obavljajući nikakve operacije nad njim. Izbor manipuliranja (ili nemanipuliranja) sadržajem stoga je određeno funkcijom prijelaza.
Ukratko: Za dani ulazni znak, trenutno stanje te znak na vrhu stoga, potisni automat može preći u drugo stanje, te opcionalno manipulirati (dodati znak ili uzeti znakove) sadržajem stoga.
Ako je (pozadinski) konačni automat konkretno nedeterministički konačni automat, dobivamo stroj koji je tehnički poznat pod nazivom "nedeterministički potisni automat" (NPA). Ako se upotrebljava deterministički konačni automat, kao rezultat dobivamo deterministički potisni automat (DPA), strogo slabiji uređaj. Nedeterminizam u ovom kontekstu ne označava pojavu slučajnih događaja, već označava mogućnost više od jednog prijelaza za dani ulazni znak, stanje i znak na vrhu stoga.
Ako dozvolimo konačnom automatu pristup dva stoga umjesto samo jednom, dobijemo znatno jači uređaj, istovjetan po moći sa Turingovim strojem. Linearno ograničen automat je uređaj koji je moćniji od potisnog automata, ali i slabiji od Turingovog stroja.
Za svaku kontekstno neovisnu gramatiku postoji istovjetan potisni automat u smislu da jezik koji gramatika generira je istovjetan jeziku kojeg automat prihvaća. Sljedbeno tome, za svaki potisni automat postoji istovjetna kontekstno neovisna gramatika takva da jezik koji ona generira je istovjetan jeziku koji automat prihvaća.
Definicija
NPA W može biti definiran kao uređena sedmorka:
[math]\displaystyle{ W=(Q,\Sigma,\Phi,\sigma,s,\Omega,F) }[/math] gdje
- [math]\displaystyle{ Q }[/math] je konačan skup stanja
- [math]\displaystyle{ \Sigma }[/math] je konačan skup ulaznih znakova (ulazna abeceda)
- [math]\displaystyle{ \Phi }[/math] je konačan skup znakova stoga (stogovna abeceda)
- [math]\displaystyle{ \sigma }[/math] (ili ponekad [math]\displaystyle{ \delta }[/math]) je konačna relacija prijelaza [math]\displaystyle{ (Q \times ( \Sigma \cup \left \{ \epsilon \right \} ) \times \Phi) \longrightarrow P( Q \times \Phi ^{*} ) }[/math]
- [math]\displaystyle{ s }[/math] je element skupa [math]\displaystyle{ Q }[/math] početno (ili inicijalno) stanje
- [math]\displaystyle{ \Omega }[/math] je početni znak stoga
- [math]\displaystyle{ F }[/math] je podskup skupa [math]\displaystyle{ Q }[/math] koji čini skup prihvatljivih stanja
Dva su moguća kriterija prihvaćanja niza znakova: prihvaćanje praznim stogom i prihvaćanje prihvatljivim stanjem. Lako se može pokazati da su oba kriterija istovjetna: konačno stanje može u petlji uzimati znakove sa vrha stoga sve dok se sadržaj stoga ne isprazni, a i stroj može detektirati prazni stog i preći u prihvatljivo stanje detektiranjem jedinstvenog znaka kojeg na vrh stoga dodaje početno stanje.
Ponegdje se u formalnoj definiciji potisnog automata rabi i uređena šestorka, izuzimajući [math]\displaystyle{ \Omega }[/math] kao početni znak stoga, i umjesto istaknutog znaka stogovne abecede dodaju prvi prijelaz koji dodaje početni znak na vrh stoga.
Primjer
Kontekstno neovisni jezik [math]\displaystyle{ \{a^kb^k | k \ge 0 \} }[/math] može biti prepoznat sljedećim potisnim automatom:
[math]\displaystyle{ M = (\{q_0, q_1, q_2, q_3\}, \{a,b\}, \{A,\underline{A}\}, \delta, q_0, \{q_0, q_3\} ), }[/math]
sa definiranim prijelazima:
[math]\displaystyle{ \delta(q_0, a, \epsilon) = \{(q_1, \underline{A})\} }[/math]
[math]\displaystyle{ \delta(q_1, a, \epsilon) = \{(q_1, A)\} }[/math]
[math]\displaystyle{ \delta(q_1, b, A) = \{(q_2, \epsilon)\} }[/math]
[math]\displaystyle{ \delta(q_1, b, \underline{A}) = \{(q_3, \epsilon)\} }[/math]
[math]\displaystyle{ \delta(q_2, b, A) = \{(q_2, \epsilon)\} }[/math]
[math]\displaystyle{ \delta(q_2, b, \underline{A}) = \{(q_3, \epsilon)\} }[/math]
[math]\displaystyle{ \delta(q, \theta, \rho) = \empty }[/math] za svaki drugi [math]\displaystyle{ (q, \theta, \rho) }[/math]
Značenje ovih prijelaza se može objasniti pregledavanjem prvog prvog prijelaza
[math]\displaystyle{ \delta(q_0, a, \epsilon) = \{(q_1, \underline{A})\} }[/math]
Kada je [math]\displaystyle{ q_0 }[/math] trenutno stanje, [math]\displaystyle{ a }[/math] je ulazni znak i [math]\displaystyle{ \epsilon }[/math] je uzet sa vrha stoga te stroj prelazi u stanje [math]\displaystyle{ q_1 }[/math] i znak [math]\displaystyle{ \underline{A} }[/math] je zapisan na vrh stoga.
Također vidjeti
Vanjske poveznice
- non-deterministic pushdown automaton, na Planet Math.
- JFLAP, simulator za nekoliko tipova automata, uključujući nedeterministički potisni automat
Izvori
- Michael Sipser (1997). Introduction to the Theory of Computation. PWS Publishing. ISBN 0-534-94728-X
- Siniša Srbljić (2003). Jezični procesori 1. Element. ISBN 953-197-129-3
Teorija automata: formalni jezici i formalne gramatike | |||
---|---|---|---|
Chomskyjeva hijerarhija |
Gramatike | Jezici | Minimalni automat |
Tip 0 | Neograničenih produkcija | Rekurzivno prebrojiv | Turingov stroj |
n/a | (nema uobičajenog imena) | Rekurzivni | Odlučitelj |
Tip 1 | Kontekstno ovisna | Kontekstno ovisni | Linearno ograničen |
n/a | Indeksirana | Indeksirani | Ugniježđenog stoga |
Tip 2 | Kontekstno neovisna | Kontekstno neovisni | Nedeterministički potisni |
n/a | Deterministička kontekstno neovisna | Deterministički kontekstno neovisni | Deterministički potisni |
Tip 3 | Regularna | Regularni | Konačni |
Svaka kategorija jezika ili gramatika je pravi podskup nadređene kategorije. |