Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Säännöllisen lausekkeen minimointi

Sivun loppuun

Benu87 [18.12.2010 19:17:02]

#

Osaisiko kukaan auttaa säännöllisen lausekkeen minimoimisessa? Olisi annettu seuraava lauseke: a(a_*|_*|_)_*|(b) . Itse ymmärrän tämän seuraavasti: ensiksi on merkki 'a', jonka jälkeen tulee 'a' ja tyhjiä merkkijonoja TAI tyhjiä merkkijonoja TAI tyhjä merkkijono ja lopuksi joko tyhjiä merkkijonoja TAI 'b'.
Minimoituna a(a|ab|b|_), mutta tämä ei ole oikein. Missä mahtaa mennä pieleen?

Antti Laaksonen [18.12.2010 19:30:39]

#

Minusta looginen tulkinta olisi, että merkkijono on muotoa a(a_*|_*|_)_* tai muotoa (b). Tällöin vastaava lyhyempi lauseke olisi a(a|_)|b.

Tässä siis ilmeisesti _ tarkoittaa tyhjää merkkijonoa.

Teuro [18.12.2010 20:14:07]

#

Eli tarkistin hyväksyy seuraavat merkkijonot:

aa     b
a b
aab

ja hylkää seuraavat:

a ba
aabb
 a  ab

Antin lausekkeesta vielä. Pitääkö sulkujen sisällä tulla vielä toistomerkinnät merkkien perään, jotta tunnistus olisi vastaava kuin alkuperäinen?

Benu87 [18.12.2010 20:30:46]

#

Kuinka tuosta mahtaa saada sitten deterministisen automaatin? Se kun ei salli epsilon-siirtymää(tyhjää merkkijonoa)?

Eli Teuron mallin mukaan tekisin näin. Mutta tämä ei siis ole oikea vastaus. Eli pitäisi siis saada noi tyhjät merkit hävitettyä jotenkin.

q1 a q2
q2 a q4
q2 _ q3
q3 b q5
q4 _ q4
q4 b q5
(q1 initial, q5 final)

Antti Laaksonen [18.12.2010 21:34:25]

#

Tuossa tapauksessa molemmat epsilon-siirtymät ovat melko turhia. Tilasta 2 voisi siirtyä suoraan tilaan 5 merkillä b. Tilassa 4 taas ei ole hyötyä tarjota epsilon-siirtymää samaan tilaan 4.

Metabolix [18.12.2010 22:35:50]

#

Teuro kirjoitti:

Pitääkö sulkujen sisällä tulla vielä toistomerkinnät merkkien perään, jotta tunnistus olisi vastaava kuin alkuperäinen?

Tyhjä merkkijono tarkoittaa yleensä näissä puheissa nimenomaan merkkijonoa, jonka pituus on nolla merkkiä. Niinpä toistomerkinnällä ei ole merkitystä. Jos se kuitenkin tarkoittaisi välilyöntiä (kuten ilmeisesti tulkitsit), toistomerkintä olisi toki tarpeen.

Benu87 [19.12.2010 00:19:43]

#

Höh. Poistin tyhjät merkkijonot eli jäi vain:

q1 a q2
q2 a q4
q4 b q5
q2 b q5
(q1 initial, q5 final)

Palautteena tuli että väärä määrä tiloja, eikä hyväksy tyhjää merkkijonoa. Mutta kuinka voidaan hyväksyä tyhjämerkkijono, jos tarkoitus tehdä DFA?
(tehtävänanto: Construct a minimal deterministic finite automaton corresponding to the given regular expression.)

Antti Laaksonen [19.12.2010 00:29:59]

#

Jos DFA:n alkutila on myös lopputila, se hyväksyy tyhjän merkkijonon.

Onko työn alla edelleen lauseke a(a_*|_*|_)_*|(b)? En ymmärrä, millä tulkinnalla se hyväksyisi tyhjän merkkijonon.

Teuro [19.12.2010 09:01:47]

#

Metabolix kirjoitti:

Jos se kuitenkin tarkoittaisi välilyöntiä (kuten ilmeisesti tulkitsit), toistomerkintä olisi toki tarpeen.

Joo huomaa etten ole juuri näitä tutkinut ja luulin todella tyhjän olevan välilyönti.

Benu87 [19.12.2010 11:11:19]

#

Alkuperäinen lauseke a(a_*|_*|_)_*|(b) on siis edelleen työn alla.
Mutta jos alkutilan laittaa myös lopputilaksi niin eihän se silloin noudata annettua säännöllistä lauseketta, sillä ensinhän pitää joka tapauksessa tulla 'a'.

Saamani palaute kokonaisuudessaan oli siis seuraava: 'Given automaton has a different number of states than the minimal one. Also, given automaton doesn't accept the empty string.'

Antti Laaksonen [19.12.2010 11:34:13]

#

Benu87 kirjoitti:

Mutta jos alkutilan laittaa myös lopputilaksi niin eihän se silloin noudata annettua säännöllistä lauseketta, sillä ensinhän pitää joka tapauksessa tulla 'a'.

Juuri tämän vuoksi en ymmärrä, miksi automaatin pitäisi hyväksyä tyhjä merkkijono.

Mistä järjestelmästä saat noita palautteita? Pystynkö minä käyttämään järjestelmää?

Benu87 [19.12.2010 11:44:11]

#

Tämä on on luultavasti koulun oma systeemi - Stratum. Tämä generoi jokaiselle opiskelijalle omat tehtävät.

Mutta tehtävästä: Kolmen tilan kokoinen kaavio olisi haettu koko, mutta eriasia kuinka sen saa rakennettua oikein. Eli pitäisi kai saada tehtyä 'tyhjä', 'a', 'aa' ja 'ab' merkkijonot.

Kokeilin nyt tällaista:
#Initial state:
q1
#Final states:
q3
q1
q2
#Transitions:
q1 a q2
q2 b q3
q2 a q1

Mutta ei. Tilojen määrä on oikein, mutta siirtymät eivät, eikä myöskään salli 'aba'. Kuinka ihmeessä tuo voi edes sallia merkkijonon jossa on 'a' b:n jälkeen. Taitaa olla alkuperäisen lausekkeen tulkinta hieman pielessä.

Chiman [19.12.2010 13:04:27]

#

a(a_*|_*|_)_*|(b) on nähdäkseni yksinkertaistettuna aa?_*|b

Eli a_*, aa_* tai b. Hyväksyttäviä ovat siten mm. a, aa, b, a__, aa_ ja a____.

Benu87 kirjoitti:

ensinhän pitää joka tapauksessa tulla 'a'

Ei, jos on pelkkä b.

Benu87 [19.12.2010 13:23:40]

#

Viime kerralla kun yritin niin sain seuraavan palautteen:
"Given automaton has the same number of states, but different transitions than the minimal one. Also, given automaton doesn't accept string 'aba'."

Chimanin versiokaan ei hyväksy tätä merkkijonoa. Eli jollain menetelmällä tuo automaatti haluaa että a voisi olla myös b:een jälkeen.

Täytyy pistää proffalle palautetta että tätä on mahdoton ratkaista. Tenttiin pääsy kun on vain tästä tehtävästä kiinni. Nimittäin pitää tehdä kaikki esitehtävät ja tämä on ainut mikä on jäänyt roikkumaan.

Chiman [19.12.2010 13:28:25]

#

Onko _ sitten mikä tahansa merkki tuossa tehtävänannossa? Tällöin yksinkertaistettu muoto olisi: a_*|b

Benu87 [19.12.2010 13:58:44]

#

'_' on tyhjä merkkijono eli epsilon. Tarkistin ohjeista.

Metabolix [19.12.2010 19:48:25]

#

Eihän tuo lauseke voi mitenkään hyväksyä merkkijonoa "aba", koska lausekkeen ainoa b on aivan sen lopussa.

Tarkista nyt vielä sadannen kerran, että olet kopioinut tehtävänannossa olevan lausekkeen oikein ja että yrität lähettää vastausta oikeaan tehtävään. Jos kaikki on varmasti kunnossa, kannattanee seuraavaksi kysyä järjestelmän tekijältä, onko tehtävässä tai sen tarkistuksessa jokin virhe.

Benu87 [19.12.2010 19:51:48]

#

# Assignment:

a(a_*|_*|_)_*|(b)

Ja viimeinen palaute:
Given automaton has the same number of states, but different transitions than the minimal one.
Also, given automaton doesn't accept string 'aba'.

Kysyn huomenna asiasta ylläpidolta.

Benu87 [19.12.2010 21:04:13]

#

Nyt sain uuden lausekkeen, joka oli sitten helppo ratkaista. Kiitoksia kuitenkin.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta