• Nem Talált Eredményt

Determinisztikus és nemdeterminisztikus véges automaták

In document Formális nyelvek (Pldal 38-43)

2. Reguláris nyelvek

2.2. Determinisztikus és nemdeterminisztikus véges automaták

Ha az automata minden állapot–karakter párjához legfeljebb egy mozgási szabály tartozik, akkor az automata determinisztikus. Ilyenkor a mozgási szabályok értel-mezése nyilvánvaló és egyértelmű.

Hogyan kell azonban értelmezni az automata működését, ha bizonyos állapot–karakter párokhoz egynél több mozgási szabály tartozik, az automata nemdeterminisztikus? Az általános definíciót, bár egy ízben már megadtuk, fontossága miatt megismételjük.

Egy automata akkor fogad el egy jelsorozatot, ha létezik olyan mozgás-sorozat, amelynek során az automata a teljes jelsorozatot elolvassa, és utána elfogadó állapotban áll meg.

A nemdeterminisztikus automaták esetében kellemetlen, hogy vala-mennyi mozgási lehetőséget egyidejűen kell figyelemmel kísérnünk, hiszen nem tudhatjuk, melyik mozgássorozat lesz sikeres, melyik vezet végül eredményre.

Ugyanakkor ez a definíció nemdeterminisztikus automatáknál is egyér-telművé teszi a tartalmazás kérdését.

Az olyan automatákkal, a sztochasztikus automatákkal, ahol a több lehetőség közül az automata valamilyen törvényszerűség szerint mindig csak egyet vesz igénybe, tehát ahol előfordulhat, hogy egy automata egy jelsorozatot egyszer elfogad máskor meg nem, ez a könyv nem foglalkozik.

Az automaták „nem determinizmusát” egy számmal jellemezhetjük.

Megadjuk a változatok számát annál az állapot–karakter párnál, amely az ilyen variánsokban leggazdagabb. Ez a szám determinisztikus automaták esetében pontosan egy, nemdeterminisztikusokénál egynél nagyobb.

A determinisztikus automata így felfogható, mint a nemdeterminisztikusok speciális esete, olyan nemdeterminisztikus automata, amelynek nem determinizmu-sa egy. Ebből viszont az is következik, hogy a determinisztikus automaták nyelvei a nemdeterminisztikus automaták, vagyis az összes véges automata nyelveinek részhalmazát alkotják.

Kérdés persze, hogy ez a részhalmaz valódi részhalmaz-e, létezik-e olyan a 3-as nyelvosztályba tartozó nyelv, amelyet nem lehet determinisztikus automa-tával elfogadni.

A válasz nemleges, vagyis a determinisztikus automaták által elfogadott nyelvek halmaza megegyezik az összes lehetséges véges automaták által elfoga-dott nyelvek halmazával.

Ezt úgy igazoljuk, hogy megadunk egy mindig alkalmazható algoritmust, amely megmondja, hogyan lehet egy nemdeterminisztikus automatához egy vele ekvivalens, vagyis ugyanazt a nyelvet elfogadó determinisztikus automatát szer-keszteni.

Mint említettem a véges automaták gráfos megjelenítése alkalmas az automaták működésének követésére. Abban maradtunk, hogy egy érmét, például egy tízforintost teszünk a kiindulási állapotra, és a mozgások alkalmával ezt az érmét mindig az új érvényes állapotra csúsztatjuk át.

Determinisztikus automaták esetén, amikor minden helyzetben legfeljebb egyetlen mozgási lehetőség van, ez a pénzérme az egyetlen lehetséges állapotot mutatja.

Amennyiben automatánk nemdeterminisztikus, bizonyos helyzetekben több mozgási lehetőség is adódhat. Annak érdekében, hogy egyidejűen vala-mennyi mozgási lehetőséget nyomon követhessük, helyezzünk most érmét min-den olyan állapotra, amely a mozgási szabályok útján elérhető.

Ennek semmilyen elvi akadálya sincsen, megvalósítása pusztán pénzkér-dés, amennyiben most egynél több tízforintos érmére lesz szükségünk.

Természetesen ezt a gondolatot rekurzív módon minden lépésben véghez kell vinnünk. Egy adott helyzetben az összes megjelölt, tehát az addig elérhető állapotot megvizsgáljuk, és meghatározzuk, hogy a most beolvasott karakter hatására ezekből az állapottokból milyen állapotok érhetőek el.

Így figyelemmel tudjuk kísérni az összes lehetséges változat visel-kedését, ami célkitűzésünk volt. Lényeges különbség azonban, hogy míg a determinisztikus automaták esetében egyetlen állapotot adtunk meg mint elérhető állapotot, addig itt egy állapothalmaz lesz az eredmény.

Ha most egy olyan új automatát definiálunk, amelynek állapottere az eredeti automata állapotterének hatványhalmaza, akkor nyomon tudjuk követni a nemdeterminisztikus automata lehetséges állapotait, mégpedig determinisztikus módon.

Legyen adott egy nemdeterminisztikus automatánk, és definiáljunk hozzá egy új, vele ekvivalens determinisztikus automatát.

A régi és az új automata karakterkészlete nyilván azonos.

Az új automata állapotai a régi automata állapotterének részhalmazai.

Az új automata azon állapotai lesznek az elfogadó állapotok, amelyek az eredeti automata állapotok olyan részhalmazának felelnek meg, amelyben leg-alább egy állapot az eredeti automata elfogadó állapota.

Jelölje M(Q, Σ, δ, q0, F)

az eredeti feltételezésünk szerint nemdeterminisztikus automatát, míg M’( P, Σ, δ’, p0, F’)

a belőle szerkesztett determinisztikus automatát. Mint tisztáztuk a két automata alfabetája szükségképpen azonos, így megnevezésük is egyforma.

A determinisztikus automata állapotterét az eredeti automata állapot-terének részhalmazai alkotják. Ezek szerint

P ⊂ 2Q (2.19a)

vagyis az új állapottér az eredeti állapottér hatványhalmazának részhalmaza.

Részhalmaz, hiszen nem minden állapotkombináció fordul elő, így például az üres halmaz, amely definíció szerint eleme a hatványhalmaznak, nem eleme az új állapottérnek.

p0 = {q0 } (2.19b)

hiszen induláskor, anélkül, hogy karaktert olvasnánk be, csakis az eredeti kezdő -állapot érhető el. Felhívom a gondos olvasó figyelmét, hogy az új kezdőállapot nem azonos a régi kezdőállapottal, hanem a régi állapottérnek egy olyan rész-halmaza, amely egyedül az eredeti kezdőállapotot tartalmazza.

F’ = { pi  pi ∩ F ≠ ∅} (2.19c) mint tisztáztuk, az eredeti állapottér azon részhalmazai lesznek az új állapottér elfogadó állapotai, amelyek tartalmaznak eredeti elfogadó állapotot.

Végül az új automata mozgási szabályait az alábbiak alapján lehet szár-maztatni:

δ’ (R, a) = { U δ(q, a) = T R, T ∈ 2Q } (2.19d)

q∈R

Ezen formális leírás azt mondja, hogy az új állapottér R állapotában az a karakter beolvasásának hatására az új állapottér T állapotába kerülünk. Mind az R, mind a T az eredeti állapottér részhalmaza. A T által definiált részhalmazt úgy állapíthatjuk meg, hogy vesszük az R részhalmazába tartozó eredeti állapotokat, megnézzük, hogy ezekből az állapotokból az eredeti mozgási szabályok szerint milyen állapotokba tudunk eljutni, és képezzük ezeknek az unióját.

Világos, hogy az eredeti és az új most már bizonyosan determinisztikus automata nyelve azonos, és bármilyen is legyen az eredeti automata, az új auto-matát a leírt módszerrel mindig származtatni tudjuk. Ezzel igazoltuk, hogy a determinisztikus automaták valamennyi, a nemdeterminisztikus automaták által elfogadott nyelvet képesek elfogadni.

Sajnos a hatványhalmaz képzése nagyon megnöveli a halmaz számosságát.

Szerencsére általában a helyzet nem ennyire kritikus, ugyanis a hatványhalmaz nem minden elemének van szerepe az új automatában.

A gyakorlatban úgy járhatunk el, hogy az eredeti nemdeterminisztikus automatát elemezve meghatározzuk az állapottér azon részhalmazait, amelyek előfordulhatnak mint egyidejűen elérhető állapotok. Ezeket és csakis ezeket a részhalmazokat vesszük aztán bele az új automata állapotterébe. Az egész folyamat kezdete az új automata kezdőállapota lesz, amely egyedül az eredeti automata kezdőállapotát tartalmazó részhalmaz. Ebből kiindulva állapíthatjuk meg, milyen részhalmazok figyelembe vételére van szükség.

Az algoritmust legjobban egy példán szemléltethetjük. Alakítsuk át a 2.3.

ábrán feltüntetett, és szemmel láthatóan nemdeterminisztikus automatát, szaba-tosabban szerkesszünk egy az automatával ekvivalens, de determinisztikus automatát.

Az áttekinthetőség biztosítására tüntessük fel újra a szóban forgó ábrát.

B

a

A

b

b a

D C

a,b

S

a,b a,b

2.5. ábra

Az egyszerűség kedvéért jelöljük az új automata állapotait egyetlen indexelt betűvel.

Az új automata kezdőállapota – mint azt megbeszéltük – egyedül a régi automata kezdőállapotát tartalmazó részhalmaz lesz:

q0 = { S }

Ebből az állapotból az a karakter beolvasásának hatására mind az S mind az A állapot elérhető. Ily módon az új automata következő állapota az előbbi két állapotot tartalmazó részhalmaz lesz:

q1 = { S, A }

Hasonlóan a b karakter beolvasása esetén q2 = { S, B } adódik.

Ha most a q1 állapotból elérhető állapotokat keressük, akkor azokat az állapotokat kell egy részhalmazba összefognunk, amelyek az új állapotból, va-gyis a q1 halmaz bármelyik állapotából elérhetőek. Így tehát az új q1 állapot és az a karakter esetében a következő állapotot alkotó halmaz elemei azok az eredeti automata állapotok lesznek, amelyek az a karakter beolvasásával vagy az S álla-potból vagy az A állaálla-potból elérhetőek. Minthogy az S állapotból az S és az A állapot, az A állapotból pedig a C állapot érthető el, a következő új állapot:

q3 = { S, A, C }

Ennek mintájára kaphatjuk meg az új automata többi állapotát is.

q4 = { S, B, D } q5 = { S, B, C } q6 = { S, A, D } q7 = {S, B, C, D } q8 = { S, A, C, D }

Az ekvivalens determinisztikus automatát mutatja a 2.6. ábra. Az új auto-mata elfogadó állapotai azok az új állapotok lesznek, ahol a részhalmaznak van olyan eleme, amely az eredeti automatában elfogadó állapot volt.

Két megjegyzés.

Amennyiben nem a 2.6. ábrán bemutatott automatából indultunk volna ki, hanem annak módosított, csupán egyetlen elfogadó állapotot tartalmazó válto-zatából, akkor is ugyanerre a determinisztikus automatára jutottunk volna. Ez, ha nem is véletlen, de nem is szükségszerű.

A determinisztikus automatának 9 állapota van, ami lényegesen keve-sebb, mint az 5 elemű eredeti állapottér hatványhalmazának 25 = 32 lehetséges változata. Bár példánkban az újonnan szerkesztett automata terebélyesebb az ere-detinél, ez nem szükségszerű. Előfordulhat, hogy a determinisztikus automata kevesebb állapotot tartalmaz, mint a nemdeterminisztikus elődje.

Q

5 a

a b

a

Q

4

Q

3

Q

2

Q

1 a

b

b a

Q

8

Q

6 b

Q

7

a b

a b

Q

0 b

a

b

a b

2.6. ábra

Minthogy tetszőleges nemdeterminisztikus automatához a fenti módon megszerkeszthetjük annak determinisztikus párját, igazoltuk azt az állításunkat, hogy a determinisztikus automaták nyelvei teljesen lefedik a 3-as nyelvosztályt.

A determinisztikus automaták mintájára beszélhetünk determinisztikus nyelvtanokról és determinisztikus nyelvekről is. Egy reguláris nyelvtan akkor determinisztikus, ha a neki megfelelő véges automata determinisztikus. Egy nyelv akkor determinisztikus, ha determinisztikus nyelvtannal generálható.

Fenti eredményünket ezek után másképpen is megfogalmazhatjuk. A determinisztikus nyelvtanok alkalmasak a teljes 3-as nyelvosztály generálására.

Ennek következtében minden reguláris nyelv determinisztikus nyelv.

In document Formális nyelvek (Pldal 38-43)