|
|
A nagy zh egy jó megoldása
1. Az alábbi automata jó lesz:
Az állapotok jelentései, ebből adódik, hogy mért jó az automata:
: még nem olvastunk semmit
nulla a szám eleje, azaz biztos elutasítunk
: az első jegy 1
: az első jegy 2-9
: a szám eleje 10 vagy 11, tehát még legalább két karakter kell az
elfogadáshoz
: a szám eleje 12, azaz szét kell majd választani két esetet a következő
karakter szerint
: a szám eleje 13, azaz elég már egy karakter az elfogadáshoz
: az első 3 jegy 124, azaz még egy karakter kell biztosan
: elfogadó, vagy háromjegyű szám jött, vagy egy legalább négyjegyű
Ez determinisztikus és egy kezdőállapotú, szóval pont, amilyen kell.
2. Az órán tanult algoritmus szerint eljárva:
, ahol
(A falaknál a visszatérő állapotokat sorrendben sorolom fel, tehát
az első helyen áll az -hez, aztán az -hoz, végül pedig a -hez
tartozó visszatérő állapot.)
, ahol
, ahol
, ahol
Tehát az egyirányú automata, ami determinisztikus és egy kezdőállapotú:
3. Először megfordítjuk a nyelvtant:

Ezután konstruálunk véges automatát ehhez a megfordított
nyelvtanhoz:
Ezután ezt az automatát visszafordítjuk, azaz a régi kezdőállapot lesz most
az elfogadó, a régi elfogadó állapot a kezdő és minden nyilat fordítva húzunk
be:
Ezt determinizáljuk és teljesen specifikáljuk:
Ezt még minimalizáljuk, mivel minimálautomata kell:
A=1, B=2, SB=3, S=4, SA=5, SAB=6, T=7 számozással:
És ez már nem változik, tehát a minimálautomata:
4.
Először minimálautomatát adunk az első reguláris kifejezéshez:
az -hoz tartozó automata:
Magyarázat ehhez:
-ban vagyunk, ha alakú szó jött eddig
-ben vagyunk, ha alakú szó jött eddig
-ben vagyunk, ha egy darab b jött eddig
-ban vagyunk, ha egy darab ab jött eddig
Ebből a tranzitív lezárt automatája, behúzva -nyilakat -ből és
-ból -be és -et elfogadóvá téve
(nem kell új kezdőállapot, mivel a régi kezdőbe nem vezet
vissza nyíl):
Az -szabályokat kiküszöbölve:
Ezt determinizálva és teljesen specifikálva:
Minimalizálva azt kapjuk, hogy az elfogadók összevonhatók és az
elutasítók is, kivéve a csapdát.
Így lesz a következő automata:
Vagyis az első reguláris kifejezés azokat a szavakat írja le, melyekben minden
után jönnie kell közvetlenül legalább egy -nak. Másszóval amely szavakban
nincs kettő egymás után és ahol a szavak nem is végződhetnek -re.
Megmutatjuk, hogy a második reg. kif. is pont ezeket a szavakat írja le.
Vegyük észre, hogy a második reg. kif. ugyanaz, mint
, hiszen
része -nak és
-nak is.
Az
által leírt szavakban nem állhat két egymás után, mert
minden -t követ legalább egy és ugyanezért -re se végződhetnek a
szavak. Másrészt minden olyan szót, amiben nincs két egymás után és ami nem
végződik -re leír az
kifejezés, hiszen akárhány -t és a
-k után akárhány -t le tudunk tenni.
Tehát a két reg. kif. azonos nyelvet ad meg.
5. Az nyelv reguláris, amit az alábbi véges automata bizonyít:
Az állapotok jelentése a következő:
: eddig pont ugyanannyi volt, mint
: eddig eggyel több volt, mint
: eddig eggyel több volt, mint
: eddig kettővel több volt, mint
: eddig kettővel több volt, mint
: volt már rossz kezdőszelet, ahol túl nagy volt a különbség, innen már sose
fogadunk el, azaz csapda
Ez az automata pont a kívánt nyelvet fogadja el, hiszen csak arra
kell figyelni, hogy az eddig beolvasott szóban az -k és -k számának
különbsége 0, 1, 2, vagy több.
Az nyelv azonban nem reguláris, ezt a pumpálási lemmával igazoljuk.
Ha reguláris lenne, akkor létezne egy olyan szám, ami a lemmában
van. Vegyük ezen -vel az szót. Ez a szó -ben van és
hosszabb -nél. Jelöljük ki benne az részszót. Mivel ez sem rövidebb
-nél, a lemma miatt ebben kell tudnunk találni egy olyan részszót, melyet
lehet ismételgetni úgy, hogy még mindig a nyelvben maradunk.
De -ben csak csupa -ból álló részszót tudunk találni, ha pedig azt
több, mint 3-szor megismételjük, akkor biztos több mint kettővel több
lesz az -k száma a szóban, mint a -k száma.
|