Zásobníkový automat: Porovnání verzí

Smazaný obsah Přidaný obsah
Editovan priklad s retezcem baabcbacc, odstranena nejednoznacnost symbolu vstupni abecedy a vystupni abecedy (byly oboje velkymi pismeny), upraveny stavy z (q, AA, BCBACC,) na (q, bcbacc, AA), tak jak je to spravne
+Deterministický zásobníkový automat, vysvětlení přechodové relace
Řádek 2: Řádek 2:


== Formální definice ==
== Formální definice ==
Formálně je zásobníkový automat definován jako [[uspořádaná n-tice|uspořádaná sedmice]] <math>\left(Q, T, G, \delta, q_0, z_0, F \right)</math>, kde:
Formálně je zásobníkový automat definován jako [[uspořádaná n-tice|uspořádaná sedmice]] (''Q'', ''T'', ''G'', ''δ'', ''q''<sub>0</sub>, ''z''<sub>0</sub>, ''F'' ), kde:
* ''Q'' je konečná [[množina]] vnitřních stavů,
* ''Q'' je konečná [[množina]] vnitřních stavů,
* ''T'' je konečná vstupní [[abeceda]],
* ''T'' je konečná vstupní [[abeceda]],
* ''G'' je konečná abeceda zásobníku,
* ''G'' je konečná abeceda zásobníku,
* ''δ'' (značeno [[řecká abeceda|řeckým písmenem]] [[delta (písmeno)|delta]]) je tzv. přechodová funkce, popisující pravidla činnosti automatu (jeho [[Počítačový program|program]]), je definována jako [[Zobrazení (matematika)|zobrazení]] z ''Q''×(''T'' ∪ {ε})×''G'' ''Q''×''G''*,
* ''δ'' (značeno [[řecká abeceda|řeckým písmenem]] [[delta (písmeno)|delta]]) je tzv. přechodová relace, popisující pravidla činnosti automatu (jeho [[Počítačový program|program]]), je definována jako konečná podmnožina [[kartézský součin|kartézského součinu]] ''Q''× (''T'' ∪ {ε}) × ''G'' × ''Q'' × ''G''*,
* ''q''<sub>0</sub> je počáteční stav,
* ''q''<sub>0</sub> je počáteční stav,
* ''Z''<sub>0</sub> popisuje symboly uložené na počátku v zásobníku,
* ''Z''<sub>0</sub> popisuje symboly uložené na počátku v zásobníku,
* ''F'' je množina ''přijímajících stavů'', ''F'' ⊆ ''Q''.
* ''F'' je množina ''přijímajících stavů'', ''F'' ⊆ ''Q''.

Prvek (''q''<sub>1</sub>, ''a'', ''z''<sub>1</sub>, ''q''<sub>2</sub>, ''η'') přechodové relace znamená, že automat v situaci, kdy řídicí jednotka je ve stavu ''q''<sub>1</sub>, na vstupu je symbol ''a'' a na vrcholu zásobníku symbol ''z''<sub>1</sub>, může změnit vnitřní stav na ''q''<sub>2</sub>, načíst jeden symbol ze vstupu, vybrat jeden symbol z vrcholu zásobníku a místo něj na zásobník uložit řetězec ''η''.

Prvek (''q''<sub>1</sub>, ''ε'', ''z''<sub>1</sub>, ''q''<sub>2</sub>, ''η'') přechodové relace znamená, že automat v situaci, kdy řídicí jednotka je ve stavu ''q''<sub>1</sub> a na vrcholu zásobníku symbol ''z''<sub>1</sub> (na vstupním symbolu nezáleží), může změnit vnitřní stav na ''q''<sub>2</sub>, vybrat jeden symbol z vrcholu zásobníku a místo něj na zásobník uložit řetězec ''η'' (tak zvaný ''ε''-pohyb).


Je vidět, že zásobníkový automat se v podstatě skládá z [[konečný automat|konečného automatu]], který má navíc k dispozici potenciálně nekonečné množství paměti ve formě zásobníku. Obsah tohoto zásobníku ovlivňuje činnost automatu tím, že vstupuje jako jeden z parametrů do přechodové funkce.
Je vidět, že zásobníkový automat se v podstatě skládá z [[konečný automat|konečného automatu]], který má navíc k dispozici potenciálně nekonečné množství paměti ve formě zásobníku. Obsah tohoto zásobníku ovlivňuje činnost automatu tím, že vstupuje jako jeden z parametrů do přechodové funkce.
Řádek 63: Řádek 67:
Jelikož se tedy přidáním zásobníku rozšíří třída jazyků, které automat umí detekovat, nabízí se otázka, zda by se téhož nedosáhlo přidáním ''dalšího'' zásobníku. A skutečně, zásobníkový automat se dvěma zásobníky má výpočetní sílu ekvivalentní [[Turingův stroj|Turingovu stroji]], neboť jedním zásobníkem může emulovat část pásky vlevo od polohy hlavy, druhým zásobníkem pak část pásky vpravo od hlavy. (Dalším přidáváním zásobníků už evidentně výpočetní síla neroste.)
Jelikož se tedy přidáním zásobníku rozšíří třída jazyků, které automat umí detekovat, nabízí se otázka, zda by se téhož nedosáhlo přidáním ''dalšího'' zásobníku. A skutečně, zásobníkový automat se dvěma zásobníky má výpočetní sílu ekvivalentní [[Turingův stroj|Turingovu stroji]], neboť jedním zásobníkem může emulovat část pásky vlevo od polohy hlavy, druhým zásobníkem pak část pásky vpravo od hlavy. (Dalším přidáváním zásobníků už evidentně výpočetní síla neroste.)


== Deterministický zásobníkový automat ==

Deterministický zásobníkový automat je zásobníkový automat, u něhož existuje v každé situaci nejvýše jedna instrukce, kterou může provést. Formálně:

# Jestliže (''q''<sub>1</sub>, ''a'', ''z''<sub>1</sub>, ''q''<sub>2</sub>, ''η'') ∈ ''δ'' a (''q''<sub>1</sub>, ''a'', ''z''<sub>1</sub>, ''q' ''<sub>2</sub>, ''η''') ∈ ''δ'', pak ''q''<sub>2</sub> = ''q' ''<sub>2</sub> a ''η' '' = ''η''.
# Jestliže (''q''<sub>1</sub>, ''ε'', ''z''<sub>1</sub>, ''q''<sub>2</sub>, ''η'') ∈ ''δ'', pak neexistuje žádné ''a'', tak že (''q''<sub>1</sub>, ''a'', ''z''<sub>1</sub>, ''q'<sub>2</sub>'', ''η' '') ∈ ''δ''.

První podmínka říká, že pro situaci danou trojicí (''q''<sub>1</sub>, ''a'', ''z''<sub>1</sub>) existuje nejvýše jedna instrukce, druhá podmínka, že v situaci, kdy je možné provést ''ε''-pohyb, není možné provést načtení znaku ze vstupu. První podmínku je možné formulovat i tak, že místo přechodové relace má automat přechodovou funkci ''δ'': (''Q''× (''T'' ∪ {ε}) × ''G'') → (''Q'' × ''G''*).

Rozpoznávací síla deterministického zásobníkového automatu závisí na tom, jaké kritérium používáme pro přijetí řetězce. V obou případech je rozpoznávací síla nižší než u nedeterministického zásobníkového automatu. Při přijímání koncovým (přijímajícím) stavem deterministický automat přijímá tak zvané deterministické jazyky, které jsou vlastní podmnožinou [[bezkontextový jazyk|bezkontextových jazyků]]. Například bezkontextový jazyk L = { ''a<sup>n</sup>b<sup>n</sup>c<sup>m</sup>'' | ''n'', ''m'' ∈ N } ∪ { ''a<sup>n</sup>b<sup>m</sup>c<sup>n</sup>'' | ''n'', ''m'' ∈ N } není deterministický.

Při přijímání prázdným zásobníkem automat rozpoznává třídu bezprefixových bezkontextových jazyků, která nepokrývá ani všechny regulární jazyky. Například jazyk L = { ''a'', ''aa'' } není deterministickým zásobníkovým automatem prázdným zásobníkem rozpoznatelný. V praxi však toto omezení není významné, pokud máme informaci o konci řetězce (souboru, apod.). Výše uvedený jazyk se pak změní na L = { ''a$'', ''aa$'' } (kde ''$'' je znak konce řetězce), který deterministickým zásobníkovým automatem prázdným zásobníkem rozpoznáván je.


== Zásobníkový překladový automat ==
== Zásobníkový překladový automat ==

Verze z 4. 3. 2015, 01:21

Zásobníkový automat (PDA z anglického pushdown automaton) je teoretický výpočetní model používaný v informatice pro studium vyčíslitelnosti a obecně formálních jazyků. Popisuje jednoduchý počítač, který má jako pracovní paměť vedle konečně stavové jednotky k dispozici zásobník. Zásobníkový automat dokáže rozpoznávat bezkontextové jazyky.

Formální definice

Formálně je zásobníkový automat definován jako uspořádaná sedmice (Q, T, G, δ, q0, z0, F ), kde:

  • Q je konečná množina vnitřních stavů,
  • T je konečná vstupní abeceda,
  • G je konečná abeceda zásobníku,
  • δ (značeno řeckým písmenem delta) je tzv. přechodová relace, popisující pravidla činnosti automatu (jeho program), je definována jako konečná podmnožina kartézského součinu Q× (T ∪ {ε}) × G × Q × G*,
  • q0 je počáteční stav,
  • Z0 popisuje symboly uložené na počátku v zásobníku,
  • F je množina přijímajících stavů, FQ.

Prvek (q1, a, z1, q2, η) přechodové relace znamená, že automat v situaci, kdy řídicí jednotka je ve stavu q1, na vstupu je symbol a a na vrcholu zásobníku symbol z1, může změnit vnitřní stav na q2, načíst jeden symbol ze vstupu, vybrat jeden symbol z vrcholu zásobníku a místo něj na zásobník uložit řetězec η.

Prvek (q1, ε, z1, q2, η) přechodové relace znamená, že automat v situaci, kdy řídicí jednotka je ve stavu q1 a na vrcholu zásobníku symbol z1 (na vstupním symbolu nezáleží), může změnit vnitřní stav na q2, vybrat jeden symbol z vrcholu zásobníku a místo něj na zásobník uložit řetězec η (tak zvaný ε-pohyb).

Je vidět, že zásobníkový automat se v podstatě skládá z konečného automatu, který má navíc k dispozici potenciálně nekonečné množství paměti ve formě zásobníku. Obsah tohoto zásobníku ovlivňuje činnost automatu tím, že vstupuje jako jeden z parametrů do přechodové funkce.

Popis činnosti automatu

Na počátku se automat nachází v definovaném počátečním stavu a zásobník obsahuje pouze počáteční symbol. Dále v každém kroku podle aktuálního stavu, symbolů na vrcholu zásobníku a symbolu na vstupu provede přechod, při kterém vyjme ze zásobníku vrchní symbol, vloží místo něj jiné a ze vstupu přečte další symbol. Toto se opakuje.

Po dokončení činnosti (po přečtení celého vstupu, pokud do té doby nedojde k chybě) je rozhodnuto, jestli automat vstupní řetězec přijal. K tomu mohou sloužit dvě kritéria:

  • stav, ve kterém se na konci automat nachází, patří do množiny přijímajících stavů, nebo
  • zásobník je na konci prázdný.

Obě definice jsou ekvivalentní, automaty na sebe lze vzájemně převádět (u druhé možnosti je možno z definice automatu zcela vypustit množinu přijímajících stavů).

Ukázka činnosti

Jako příklad je možno ukázat následující zásobníkový automat:

Q = {q}
T = {a, b, c}
G = {A}
δ = {
(q, a, ε) → (q, A),
(q, b, ε) → (q, ε),
(q, c, A) → (q, ε),
}
q0 = q
Z0 = ε

Tento automat rozhoduje o přijetí tím, že po přečtení vstupu je zásobník prázdný, nejsou zde tedy přijímající stavy. Řekněme, že na vstupu je řetězec baabcbacc. Na počátku je automat ve stavu q (ostatně jako neustále, tento automat má pouze jeden stav, viz též níže), zásobník je prázdný (což se značí symbolem prázdného řetězce ε) a na vstupu zbývá celý řetězec, baabcbacc; tuto konfiguraci označíme jako (q, baabcbacc, ε). Z přechodové funkce je vidět, že ve stavu q při přečtení vstupu b se ze zásobníku nečte žádný symbol (ε), „přejde“ se do stavu q a na zásobník se nic neukládá (opět ε). Automat je tedy poté v konfiguraci (q, aabcbacc, ε) – jediná změna spočívá v přečtení symbolu b ze vstupu. Teď se má přečíst symbol a, z přechodové funkce je vidět, že se má na zásobník uložit symbol A. Automat tedy pokračuje konfigurací (q, abcbacc, A), dále následují konfigurace (q, bcbacc, AA), (q, cbacc, AA), (q, bacc, A), (q, acc, A), (q, cc, AA), (q, c, A), (q, ε, ε), vstup byl celý přečten, automat skončil ve stavu s prázdným zásobníkem, řetězec baabcbacc tedy byl přijat, patří do jazyka, který tento automat rozpoznává.

Pro úplnost: tento automat rozpoznává jazyk závorkových struktur, kde symbol a představuje otevírací závorku a symbol c zavírací závorku (symbol b je nevýznamný). Vstupní řetězec odpovídá řetězci x((x)x()), ve kterém jsou závorky správně párovány.


Další zadání:
L={anbn|n≥1}
Jedná se tedy o slova, která mají stejný počet znaků a na začátku, jako znaků b na konci.

Řešení:
(r1, a, Z) → (r1,A)
(r1, a,A) → (r1,AA)
(r1, b,A) → (r2, ε)
(r2, b,A) → (r2, ε)

Výpočet výše uvedeného zásobníkového automatu na vstupním slově aaabbb lze zapsat takto:
(r1, aaabbb, Z) ⊢ (r1, aabbb,A) ⊢ (r1, abbb,AA) ⊢ (r1, bbb,AAA) ⊢ (r2, bb,AA) ⊢ (r2, b,A) ⊢ (r2, ε, ε)

Výpočet je tedy posloupnost konfigurací, kde každá jednotlivá konfigurace zachycuje
• (aktuální) stav řídicí jednotky,
• obsah vstupní pásky, který zbývá přečíst,
• obsah zásobníku (zapsaný jako řetězec symbolů; nejlevější symbol od- povídá vrcholu zásobníku).

Síla modelu

Nejdůležitější částí zásobníkového automatu je jeho paměť, zásobník, samotný konečný automat bez zásobníku dokáže rozpoznávat pouze regulární jazyky. Jak je vidět z předešlého příkladu, „vnitřní“ konečný automat může být velice jednoduchý, dokonce s jediným stavem – důležitější částí je zásobník, který umožňuje automatu rozpoznávat bezkontextové jazyky.

Jelikož se tedy přidáním zásobníku rozšíří třída jazyků, které automat umí detekovat, nabízí se otázka, zda by se téhož nedosáhlo přidáním dalšího zásobníku. A skutečně, zásobníkový automat se dvěma zásobníky má výpočetní sílu ekvivalentní Turingovu stroji, neboť jedním zásobníkem může emulovat část pásky vlevo od polohy hlavy, druhým zásobníkem pak část pásky vpravo od hlavy. (Dalším přidáváním zásobníků už evidentně výpočetní síla neroste.)

Deterministický zásobníkový automat

Deterministický zásobníkový automat je zásobníkový automat, u něhož existuje v každé situaci nejvýše jedna instrukce, kterou může provést. Formálně:

  1. Jestliže (q1, a, z1, q2, η) ∈ δ a (q1, a, z1, q' 2, η') ∈ δ, pak q2 = q' 2 a η' = η.
  2. Jestliže (q1, ε, z1, q2, η) ∈ δ, pak neexistuje žádné a, tak že (q1, a, z1, q'2, η' ) ∈ δ.

První podmínka říká, že pro situaci danou trojicí (q1, a, z1) existuje nejvýše jedna instrukce, druhá podmínka, že v situaci, kdy je možné provést ε-pohyb, není možné provést načtení znaku ze vstupu. První podmínku je možné formulovat i tak, že místo přechodové relace má automat přechodovou funkci δ: (Q× (T ∪ {ε}) × G) → (Q × G*).

Rozpoznávací síla deterministického zásobníkového automatu závisí na tom, jaké kritérium používáme pro přijetí řetězce. V obou případech je rozpoznávací síla nižší než u nedeterministického zásobníkového automatu. Při přijímání koncovým (přijímajícím) stavem deterministický automat přijímá tak zvané deterministické jazyky, které jsou vlastní podmnožinou bezkontextových jazyků. Například bezkontextový jazyk L = { anbncm | n, m ∈ N } ∪ { anbmcn | n, m ∈ N } není deterministický.

Při přijímání prázdným zásobníkem automat rozpoznává třídu bezprefixových bezkontextových jazyků, která nepokrývá ani všechny regulární jazyky. Například jazyk L = { a, aa } není deterministickým zásobníkovým automatem prázdným zásobníkem rozpoznatelný. V praxi však toto omezení není významné, pokud máme informaci o konci řetězce (souboru, apod.). Výše uvedený jazyk se pak změní na L = { a$, aa$ } (kde $ je znak konce řetězce), který deterministickým zásobníkovým automatem prázdným zásobníkem rozpoznáván je.

Zásobníkový překladový automat

Je uspořádaná osmice:

  • Q je konečná množina vnitřních stavů,
  • T je konečná vstupní abeceda,
  • D je konečná abeceda výstupních symbolů,
  • G je konečná abeceda zásobníku,
  • δ přechodová funkce, popisující pravidla činnosti automatu, je definována jako zobrazení z Q×(T ∪ {ε})×G* do Q×GD*,
  • q0 je počáteční stav,
  • Z0 popisuje symboly uložené na počátku v zásobníku,
  • F je množina přijímajících stavů, FQ.

Konfigurace ZPA je čtveřice ( q , x , α , y ) Q × T × G × D {\displaystyle (q,x,\alpha ,y)\in Q\times T^{*}\times G^{*}\times D^{*}} , teda konfigurace má určitý stav, řetězec na vstupu, řetězec v zásobníku a řetězec na výstupu, respektive.

Související články


Zdroj datcs.wikipedia.org
Originálcs.wikipedia.org/wiki/w/index.php
Zobrazit sloupec 

Kalkulačka - Výpočet

Výpočet čisté mzdy

Důchodová kalkulačka

Přídavky na dítě

Příspěvek na bydlení

Rodičovský příspěvek

Životní minimum

Hypoteční kalkulačka

Povinné ručení

Banky a Bankomaty

Úrokové sazby, Hypotéky

Směnárny - Euro, Dolar

Práce - Volná místa

Úřad práce, Mzda, Platy

Dávky a příspěvky

Nemocenská, Porodné

Podpora v nezaměstnanosti

Důchody

Investice

Burza - ČEZ

Dluhopisy, Podílové fondy

Ekonomika - HDP, Mzdy

Kryptoměny - Bitcoin, Ethereum

Drahé kovy

Zlato, Investiční zlato, Stříbro

Ropa - PHM, Benzín, Nafta, Nafta v Evropě

Podnikání

Města a obce, PSČ

Katastr nemovitostí

Katastrální úřady

Ochranné známky

Občanský zákoník

Zákoník práce

Stavební zákon

Daně, formuláře

Další odkazy

Auto - Cena, Spolehlivost

Registr vozidel - Technický průkaz, eTechničák

Finanční katalog

Volby, Mapa webu

English version

Czech currency

Prague stock exchange


Ochrana dat, Cookies

 

Copyright © 2000 - 2024

Kurzy.cz, spol. s r.o., AliaWeb, spol. s r.o.