Kétirányú automaták
Kétirányú automata: ugyanolyan, mint az eddig megszokott véges automata, annyi különbséggel, hogy a ![]() ![]() Lehet nem determinisztikus is, most azonban nézzünk egyenlőre csak determinisztikusakat. Rövitítés: 2VA. Állítás: A kétirányú automaták sem erősebbek mint az egyirányúak, azaz ugyanazokat a nyelveket ismerik fel mint az eddigi 1VA-k. 1.Az s irány, azaz a semerre-se-lépés elhagyása nem gyengíti az automatát. Ez azért igaz, mert ha van egy olyan 2VA, ami tartalmaz s-es átmenetet, akkor ehhez készíthetünk egy olyan, másik 2VA-t, ami ugyanazt fogadja el, csak nincsen benne ilyen s-es átmenet. A következőképpen megy ez: ha van egy ![]() ![]() Első ötlet: Szimuláljuk a 2VA-t egyirányúval a következő módon. Amíg előre lépked a 2VA, addig menjünk mi is vele, ha visszafele indulna, akkor mi álljunk meg és várjuk meg amíg visszatér. Ha visszatért, akkor vegyük fel mi is újra a fonalat. 2. Előfordulhat, hogy nem tér vissza a 2VA, de akkor nem is tudja végigolvasni a szót, azaz nem fogadja el. Ez persze nem baj, ekkor mi is megállhatunk az 1VA-val és ekkor az 1VA sem fogad el. Második ötlet: Ne várjuk meg amíg visszatér (pláne, mert lehet, hogy nem is tér vissza), hanem tegyük fel, hogy valaki megmondja nekünk, hogy visszajön-e és ha igen, akkor milyen állapotban. Ha pl. a 2VA egy (R,a) párra a (Q,l) párral válaszol, tehát elindul visszafelé, akkor az a valaki megmondja nekünk, hogy ehhez az állapothoz milyen visszatérő állapot tartozik (mondjuk ez P) és ekkor a szimulációt a P állapotból folytatuk, azaz a megnézzük, hogy a 2VA mit tesz a (P,a) párra. (Megjegyzés: ezt az információt, amit ez a valaki tud, úgy nevezzük, hogy ismerjük a visszatérési falat.) 3. Ha a (P,a) pár hatására újra visszafele indul a 2VA, akkor az előbbi eljárást csináljuk mi is újra. Ezt nem tesszük a végtelenségig, mert csak véges sok állapotunk van. Ha ismétlődést találunk, azaz olyan állapotot érintünk aminek a hatására már egyszer elindultunk ugyaninnen visszafele, akkor tuti, hogy most már mindig itt fogunk cikázni előre-hátra, vagyis sose lépünk le az aktuális betűről, azaz sose olvassuk el a szót, tehát nem is fogadjuk el. Ha ezt a helyzetet felismertük, akkor álljunk meg az 2VA-val és utasítsuk el a szót. Ha nincs végtelen ciklus és végül azért mégis lelép előre a 2VA arról a fránya a-ról, és eközben T állapotba megy, akkor lépjünk le mi is az 1VA-val és menjünk T állapotba. Harmadik ötlet Az aktuális visszatérési falat mi is nyilván tudjuk tartani magunknak, nem kell kérdezgetni senkit. 4. Először is: csak véges sok visszatérési fal lehetséges, konkrétan max. (|Q|+1)|Q|-féle, ahol |Q| az állapotok száma. Ugyanis a fal megadása azt jelenti, hogy minden állapotra (van |Q| darab) |Q|+1 lehetséges kimenet van: vagy nem jön vissza, vagy valamelyik állapotban visszajön. 5. A kezdőfal az a fal, ahol minden kimenő állpothoz a ![]() 6. Ha a 2VA egy a-n áll most és a fej mögött a ![]() ![]() ![]() Egyik eset: Ha az a hatására az adott állapotban előre megyünk valami Q állapotba a 2VA-ban, az azt jelenti, hogy visszalépünk a ![]() Másik eset: Ha az a hatására az adott állapotban visszafele mennénk, akkor meg az előző fal, a ![]() ![]() ![]() ![]() 7. Ezután látszik már, hogy az 1VA állapotába két dolgot kell belekódolni: az adott pillanatban milyen állapotban van a 2VA és mi az aktuális visszatérési fal, ami mögött állunk. Vagyis az 1VA állapotai ![]() ![]() Az 1VA kezdőállapota az ![]() ![]() Azok a ![]() Aaz 1VA ![]() ![]() |