Tämän veppisivun avulla voit harjoitella kurssin TIEA241 Automaatit ja kieliopit tenttejä varten. Sivulla esitetään 6.11.2019 pidetyn tentin kysymykset ja vastaukset, ja kerrotaan, miksi oikeat vastaukset ovat sellaiset kuin ovat. Jotta voisit miettiä itse ennen kuin luet vastauksen, oikeat vastaukset ja muuta tietoa on piilossa ruskeissa alueissa. Ne tulevat näkyviin, kun siirrät kursorin niitten päälle. Kokeile tästä!Toimii! (Joissakin iPhoneissa tämä ei toimi.)
Muutamissa kohdissa on kenttä, johon voit syöttää oman vastauksesi. Vastausnappi ”oikealle” tuottaa palautteen oikealla olevaan laatikkoon. Yleensä on kätevintä ensin klikata sitä. Vastausnappi ”uuteen” tuottaa palautteen uuteen välilehteen tai uuteen ikkunaan riippuen selaimesi asetuksista. Sitä kannattaa käyttää, jos ”oikealle”-napin tuottama palaute ei mahdu laatikkoon.
Tentissä vastattiin konseptipaperille. Mukana ei saanut olla kirjoja, laskinta tms. Jokainen tehtävä oli tasan 6 pisteen arvoinen. Pisteet jakautuivat tasan alakohtiin (a), (b) jne., paitsi missä sanottiin toisin. Pisteytys ei ollut ”kaikki tai ei mitään” -periaatteella, vaan oikeansuuntainen vastaus tuotti osan pisteistä, tehtävästä riippuen jopa neljäsosapisteittäin.
Eri tenteissä on tietenkin eri kysymykset. Aihepiirit ovat kuitenkin paljolti samoja. Tämän tentin vastausten ulkoa opettelu ei todennäköisesti auta paljoa tulevissa tenteissä. Vastausten takana olevien periaatteiden opettelu niin, että osaa soveltaa niitä erilaisissa tilanteissa, auttaa todennäköisesti hyvin paljon. Alla olevien selitysten ja esimerkkien tavoitteena on auttaa ymmärtämään ne.
Kaikissa kysymyksissä ei pyydetty perustelemaan vastausta. Silti on hyvä tietää, miksi oikea vastaus on se mikä se on. Siksi nekin vastaukset on perusteltu alla.
Alla olevia kuvaa ja kielioppia tarvitaan monessa tehtävässä. Saat ne palautelaatikkoon sen alla olevasta linkistä. Myöhemmin tällä veppisivulla on kerrottu, mistä ne ovat peräisin.
C ::= L | (G) | C ∧ L | C ∧
(G)
D ::= B | D ∨ B
G ::= L ∨ L | G ∨ L
B ::= L | B ∧ L
L ::= p | ¬p
1. (a) Onko kuvan automaatti NFA? Onko se DFA?
Onko se NFA?Kyllä. perusteluKuvassa ei ole muuta kuin yksin- ja kaksinkertaisia ympyröitä (epälopputilat ja lopputilat), nimellä varustettuja nuolia niiden välillä (kaaret) sekä yksi tyhjästä alkava nuoli, joka osoittaa alkutilan. Aakkosto määräytyy kuten (b)-kohdassa.
Onko se DFA?Kyllä. perusteluSe on NFA, jonka mistään tilasta ei lähde ε-kaarta eikä kahta samannimistä kaarta. Jokainen sellainen NFA on DFA.
(b) Mikä on kuvan automaatin aakkosto?
vastaus{(, ), p, ¬, ∧, ∨} perusteluKoska aakkostoa ei ole erikseen ilmoitettu, käytetään yleissääntöä eli kerätään kaarten varrelta muut merkit kuin ε. Tulos ilmoitetaan joukkona, koska aakkosto on joukko.
(c) Kirjoita mahdollisimman lyhyt merkkijono, jonka kuvan automaatti hylkää.
vastausε
Miksi kuvan automaatti hylkää tämän merkkijonon? vastausε tarkoittaa tyhjää merkkijonoa. Alkutilasta ei pääse ε-kaarilla mihinkään lopputilaan, koska alkutila ei itse ole lopputila eikä siitä lähde ε-kaaria. Siksi automaatti hylkää tyhjän merkkijonon.
Miksi tämä merkkijono on mahdollisimman lyhyt? vastausMikään merkkijono ei ole lyhyempi kuin ε. Automaatti ei hylkää mitään ε:a lyhyempää merkkijonoa, koska sellaisia ei ole olemassakaan.
(d) Kirjoita mahdollisimman pitkä merkkijono, jossa ∧ esiintyy korkeintaan kerran, ∨ esiintyy korkeintaan kerran, ja jonka kuvan automaatti hyväksyy.
Oikeita vastauksia on kaksi: tämä(¬p∨¬p)∧¬p ja tämä¬p∧(¬p∨¬p). Vastaukseksi kelpaa niistä kumpi tahansa.
Perustelu alkaaAlkutilasta kannattaa lähteä joko ¬:lla tai (:lla, koska p vie samaan kuin ¬p mutta vähemmillä merkeillä. Jos lähdetään ¬:lla, niin seuraavana on p ja ollaan lopputilassa. Jos lähdetään (:lla, niin kannattaa valita (¬p∨¬p, koska se on parempi kuin toisen tai molempien ¬ ohittaminen, eikä muita vaihtoehtoja ole. Sen jälkeen ei voida valita ∨, koska ∨ on jo käytetty. On pakko valita ), joka vie lopputilaan. ja jatkuuLopputilasta voidaan jatkaa ∧:lla alkutilaan ja sen jälkeen edetä uudelleen alkutilasta lopputilaan, mutta vain yhden kerran, koska ∧ saa esiintyä enintään yhden kerran. Saadaan neljä yhdistelmää ¬p∧¬p, ¬p∧(¬p∨¬p), (¬p∨¬p)∧¬p ja (¬p∨¬p)∧(¬p∨¬p). Niistä viimeinen ei kelpaa, koska siinä on kaksi ∨:ta. Keskimmäiset kaksi kelpaavat ja ovat yhtä pitkät. Ensimmäinen on niitä lyhyempi, joten se ei ole mahdollisimman pitkä..
(e) Luettele kaikki sellaiset luonnolliset luvut, että kuvan automaatti ei hyväksy yhtään sen pituista merkkijonoa. Perustele vastauksesi.
vastaus0
Mainitut luvut kuuluu luetella tästä syystäAutomaatti ei hyväksy yhtään nollan pituista merkkijonoa, koska ainoa sen pituinen merkkijono on ε, ja (c)-kohdassa nähtiin, että automaatti hylkää sen..
Muut luvut kuuluu jättää pois luettelosta tästä syystäAlkutilasta pääsee lopputilaan p-kaarta pitkin, joten automaatti hyväksyy 1:n pituisen merkkijonon p. Alkutilasta pääsee lopputilaan myös kulkemalla ensin ¬-kaaren ja sitten p-kaaren, joten automaatti hyväksyy 2:n pituisen merkkijonon ¬p. Lopputilasta pääsee takaisin alkutilaan ∧-kaarella ja uudelleen lopputilaan p-kaarella. Siksi kaikki parittomat pituudet saadaan merkkijonoilla p, p∧p, p∧p∧p, … ja kaikki nollaa suuremmat parilliset pituudet merkkijonoilla ¬p, ¬p∧p, ¬p∧p∧p, …..
Vastauksissa esiintyi epätietoisuutta siitä, alkavatko luonnolliset luvut nollasta vai ykkösestä. Joillakin matematiikan alueilla on tapana aloittaa nollasta ja toisilla ykkösestä. Tietojenkäsittelyssä aloitetaan melkein aina nollasta. Koska molempia käytäntöjä esiintyy, kirjoissa, julkaisuissa ja kursseilla tavallisesti mainitaan, kumpaa käytäntöä noudatetaan. Tälläkin kurssilla se on mainittu, mutta vasta nyt ymmärrän, että se olisi kannattanut mainita myös tentin kysymyspaperissa.
(f) Olkoon n kuvan automaatin hyväksymässä merkkijonossa esiintyvien merkkien p määrä, olkoon v samassa merkkijonossa esiintyvien merkkien ∨ määrä, ja olkoon j samassa merkkijonossa esiintyvien merkkien ∧ määrä. Kirjoita yksinkertainen näitä lukuja koskeva yhtäsuuruus (jotakin tyyliin 3j + 4 = n + 2v).
perustelu 1Kuvasta on helppo tarkastaa, että kuljetaan mikä ∧- tai ∨-kaari tahansa, välittömästi sitä ennen on täytynyt kulkea p-kaari tai p-kaari ja )-kaari. Niiden lisäksi lopputilaan tultaessa on juuri kuljettu joko p-kaari tai p-kaari ja )-kaari. perustelu 2Toisaalta jokaisen p-kaaren jälkeen, joko välittömästi tai heti )-kaaren jälkeen, joko kuljetaan ∧- tai ∨-kaari tai tullaan lopputilaan. perustelu 3Niinpä kuljetut p-kaaret vastaavat yksi yhteen kuljettuja ∧-kaaria, kuljettuja ∨-kaaria ja lopullista lopputilaan saapumista. Siksi kuljettujen p-kaarten määrä eli n on yhtäsuuri kuin kuljettujen ∧-kaarten määrä plus kuljettujen ∨-kaarten määrä plus lopullisten lopputilaan saapumisten määrä. Toisin sanoen n = j + v + 1.
2. (a) Kirjoita säännöllinen lauseke, joka tuottaa täsmälleen ne kuvan automaatin hyväksymät merkkijonot, jotka alkavat merkillä ( ja joissa ) esiintyy vain viimeisenä.
Tälle on monta oikeaa vastausta, joista yksi on tämä ”(”(¬p|p)∨(¬p|p)(∨(¬p|p))*”)” .
Vastauksen voi keksiä näinSulkuja koskevat ehdot rajoittavat merkkijonot niihin, jotka voi hyväksyä kulkemalla alakautta alkutilasta lopputilaan. Reitillä on ensin (, sitten joko ¬p tai p, sitten ∨, sitten uudelleen joko ¬p tai p, sitten nolla tai useampia kierroksia silmukassa, ja lopuksi ). Silmukassa on ensin ∨ ja sitten joko ¬p tai p. Kohdekielen sulut on syytä erottaa jotenkin metakielen suluista, esimerkiksi panemalla kohdekielen sulut ”lainausmerkkeihin”..
(b) Miten voidaan testata, tuottaako säännöllinen lauseke kaikki merkkijonot, jotka kyseessä olevasta aakkostosta voi tuottaa?
vastausMuunnetaan säännöllinen lauseke NFA:ksi ja saatu NFA DFA:ksi. Tästä voidaan jatkaa eri tavoilla. Voidaan esimerkiksi minimoida DFA ja katsoa, tuliko yksitilainen DFA, jonka alkutila on lopputila, josta on kaari itseensä jokaisella aakkosella.
Vastauksen voi keksiä näinKurssilla on esitetty algoritmeja, joista kannattaa muistaa ainakin mitä ne saavat aikaan. Niistä voi rakentaa monenlaista melkein kuin legopalikoista..
(c) Piirrä NFA jonka hyväksymä kieli on sama kuin välisymbolin D tuottama kieli.
D:n kielioppi ja eräs oikea vastaus
Vastauksen voi keksiä näinL:n tuottamat merkkijonot saadaan NFA:lla, joka on muuten kuten vastauksessa, mutta ∨-kaari ja ∧-kaari puuttuvat. B ottaa yhden tai useamman L:n tuottaman merkkijonon, ja lisää niiden väliin ∧:n. Sama vaikutus saadaan lisäämällä kuvan ∧-kaari. D ottaa yhden tai useamman B:n tuottaman merkkijonon, ja lisää niiden väliin ∨:n. Sama vaikutus saadaan lisäämällä kuvan ∨-kaari..
3. (a) Kirjoita jokin merkkijono, jonka D tuottaa mutta C ei tuota. Piirrä sen jäsennyspuu.
Oikeita vastauksia on vaikka kuinka monta. Yksinkertaisin niistä on tämäp∨p. On helppo nähdä, että C ei tuota sitä, koska …C tuottaa ∨:n vain G:n kautta, mutta silloin mukaan tulee sulut..
(b) Onko C:n tuottama kieli säännöllinen? Perustele. Onko se yhteysriippumaton? Perustele.
Onko se säännöllinen? vastaus Se on säännöllinen, koska kysymyspaperin kuvassa oleva NFA hyväksyy sen.
Onko se yhteysriippumaton? vastaus Se on yhteysriippumaton, koska jokainen säännöllinen kieli on yhteysriippumaton. (Yhteysriippumattomuuden voi perustella myös sillä, että C:n kielelle on esitetty kysymyspaperissa BNF-määritelmä eli yhteysriippumaton kielioppi.)
(c) Kirjoita kielioppi, joka tuottaa kielen {abb, aabbbb, aaabbbbbb, …}. (Merkkijonoissa on ensin jokin nollaa suurempi määrä a:ta ja sitten kaksinkertainen määrä b:tä.)
Yksi oikea vastaus on tämäX ::= abb | aXbb.
4. Aliohjelma f(σ) ottaa syötteekseen merkkijonon σ ja pysähtyy palauttaen 0, 1, 2 tai 3. Jos f(σ) palauttaa 0, niin σ:n sisältö ei ole aliohjelma. Jos f(σ) palauttaa 1, niin σ:n sisältö on aliohjelma joka pysähtyy tyhjällä syötteellä. Jos f(σ) palauttaa 2, niin σ:n sisältö on aliohjelma joka ei pysähdy tyhjällä syötteellä.
Jos yllä oleva kuvaus tuntuu kummalliselta, niin kannattaa lukea tämäVastauksille 0, 1 ja 2 annetut kuvaukset eivät ole muotoa ”jos ja vain jos”, vaan muotoa ”jos … niin”. Siis ei esimerkiksi luvata, että jos σ:n sisältö ei ole aliohjelma, niin f(σ) palauttaa 0. Jos σ:n sisältö ei ole aliohjelma, niin f(σ) ei voi palauttaa 1 eikä 2, koska 1:n ja 2:n tapauksessa σ:n sisällön on oltava aliohjelma; mutta voi palauttaa 3, koska 3:n tapauksessa σ:n sisällölle ei ole asetettu mitään rajoituksia. ja käydä läpi seuraavat kysymykset ja vastaukset:
kysymysJos σ:n sisältö ei ole aliohjelma, niin f(σ) palauttaa vastaus0 tai 3.
kysymysJos σ:n sisältö on aliohjelma joka pysähtyy tyhjällä syötteellä, niin f(σ) palauttaa vastaus1 tai 3.
kysymysJos σ:n sisältö on aliohjelma joka ei pysähdy tyhjällä syötteellä, niin f(σ) palauttaa vastaus2 tai 3.
kysymysMikä on yksinkertaisin f(σ), joka täyttää annetut ehdot? vastaus Sellainen, joka palauttaa aina 3, siis return 3.
(a) Perustele, että on olemassa ainakin yksi σ, jolle f(σ) palauttaa 3. Et saa olettaa tunnetuksi, että tyhjän syötteen pysähtymistesteriä ei ole.
Kuvatun kaltainen aliohjelma, joka ei palauta 3 millekään syötteelle, tekee hieman enemmän kuin tyhjän syötteen pysähtymistesteri. Sen vastaukset 0 ja 2 tarkoittavat samaa kuin tyhjän syötteen pysähtymistesterin vastaus F, ja vastaus 1 tarkoittaa samaa kuin tyhjän syötteen pysähtymistesterin vastaus T.
Tehtävän kysymys tarkoittaa siis, että pitää todistaa, että tyhjän syötteen pysähtymistesteriä ei ole olemassa. Täysiin pisteisiin riittää mikä tahansa vastaus, josta käy ilmi, että vastaaja ymmärtää jonkin todistuksen perusidean. Yksi todistus löytyy täältä ja toinen täältä.
(Täysiin pisteisiin riittäisi myös pätevä perusidea todistukselle, että on olemassa syöte, jolle vastauksen pitää olla 0 tai 2, mutta f ei pysty sanomaan kumpi. Sellaista perusideaa ei kuitenkaan ole olemassa, koska on olemassa aliohjelma, joka ratkaisee kysymyksen, esittääkö annettu merkkijono aliohjelmaa. Kääntäjiähän osataan tehdä.)
(b) Perustele, että on olemassa äärettömän monta σ, joille f(σ) palauttaa 3. Saat käyttää (a)-kohdan tulosta apuna.
vastausJos niitä olisi vain äärellinen määrä, niin f:n alkuun voitaisiin lisätä seuraavanlainen if-then-else-rakenne. Siinä on haara jokaiselle syötteelle, jolle alkuperäinen f palauttaa 3. Haara palauttaa 0, 1 tai 2 sen mukaan, mikä on oikea vastaus syötteelle, jolla joudutaan kyseiseen haaraan. Näin f voitaisiin täydentää sellaiseksi, joka ei koskaan palauta 3. (a)-kohdan mukaan sellaista täydennettyä f ei voi olla olemassa, joten on oltava äärettömän monta σ, joille f(σ) palauttaa 3.
Tämä idea käsiteltiin täällä. Siellä osittainen tyhjän syötteen pysähtymistesteri vastasi ”en tiedä” jäämällä ikuiseen silmukkaan, mutta nyt se vastaa ”en tiedä” palauttamalla 3. Tämä ero ei ole olennainen.
(c) Joko perustele, että on olemassa merkkijono, jolle jokainen kuvatunlainen aliohjelma palauttaa 3, tai perustele, että sellaista merkkijonoa ei ole olemassa.
vastausSellaista merkkijonoa ei ole
olemassa.
Mille tahansa merkkijonolle ρ jokin seuraavista kolmesta on pätevä
f(σ), joka ei palauta ρ:lle 3:
if σ = ρ then return 0 else return 3
if σ = ρ then return 1 else return 3
if σ = ρ then return 2 else return 3
5. (a) (2 pistettä) Mitä tarkoittaa merkkijonon Kolmogorov-kompleksisuus? Täysien pisteiden vastaus mahtuu 10 sanaan, joten älä kirjoita kovin pitkää vastausta.
vastausLyhimmän syötteettömän ohjelman pituus, joka tulostaa kyseisen merkkijonon ja pysähtyy.
On paljon tilanteita, joissa jonkin tiedon esittämiseen käytetyn muistin määrää voidaan pienentää jollain häviöttömällä pakkausmenetelmällä. Toiset pakkausmenetelmät tiivistävät saman tiedon pienempään muistin määrään kuin toiset. Tästä voi herätä ajatus mitata tiedon informaatiosisältöä sillä, kuinka pieneksi sen saa pakattua, jos pakkausmenetelmän saa valita vapaasti. Tämä ajatus ei kuitenkaan toimi sellaisenaan, koska jos eri tiedot puretaan eri menetelmillä, niin tiedon purkamiseksi tarvitaan pakatun tiedon lisäksi tieto siitä, millä menetelmällä se pitää purkaa.
Toimivampi informaation määrän mitta on mahdollisimman pienen sellaisen paketin koko, josta yksi ja sama, kaikille pakatuille tiedoille yhteinen ohjelma purkaa tiedon yhtä ja samaa nappia painamalla, ilman mitään lisäinformaatiota. Jotta tiedon pakkaamisessa voitaisiin käyttää mitä tahansa nyt tunnettua tai tulevaisuudessa keksittävää pakkausmenetelmää, purkuohjeiden pitää olla esitettynä paketissa mahdollisimman yleispätevällä tavalla. Käsitteellä ”mahdollisimman yleispätevä ohjeiden esittämistapa” on nimi: ohjelmointikieli.
Paketissa on siis esitettävä sekä pakattu tieto että sen purkamiseen käytettävä ohjelma. Koska pakattu tieto voidaan kirjoittaa literaalivakioina ohjelman sisään, jakoa pakattuun tietoon ja purkamisohjelmaan ei tarvita, vaan riittää puhua ohjelmasta. Paketissa on siis ohjelma, joka ei lue syötettä. Yhteinen purkuohjelma ei tee muuta kuin ajaa tämän ohjelman.
Näin on päästy vastauksessa esitettyyn Kolmogorov-kompleksisuuden käsitteeseen. Asiaa on käsitelty perusteellisesti tehtävässä Datan pakkaaminen ja Kolmogorov-kompleksisuus.
(b) (4 pistettä) Kirjoita ennalta miettimäsi essee.
Alla oleva essee on ehkä hieman liian pitkä, mutta muissa suhteissa se on esimerkki neljän pisteen esseestä. Siinä on esitetty jokin kurssin aihepiiriin liittyvä epätriviaali asia täsmällisesti matemaattisia merkintöjä hyödyntäen. Sen asiasisältö ei ole suora kopio lähteistä, vaan siinä on mukana omaa luovuutta. Siinä ei (toivottavasti ☺) ole asiavirheitä.
Liika pituus johtuu siitä, että halusin näyttää tentin kysymyspaperissa esiintyvät kieliopit. Esseestä saisi lyhyemmän pisteet säilyttäen jättämällä pois disjunktiivisen normaalimuodon tai etenemällä nopeammin konjunktiivisen normaalimuodon viimeiseen kielioppiin.
Propositiologiikan kaava on disjunktiivisessa normaalimuodossa, jos ja vain jos sen rakenne on seuraava. Se koostuu yhdestä tai useammasta osasta, jotka on yhdistetty toisiinsa tai-operaattorilla eli ∨:lla. Jokainen osa koostuu yhdestä tai useammasta literaalista, jotka on yhdistetty toisiinsa ja-operaattorilla eli ∧:lla. Literaali on propositiosymboli tai propositiosymbolin negaatio, eli muotoa p tai ¬p. Seuraava kielioppi esittää tämän rakenteen ilman sulkuja.
D ::= B | D ∨ B
B ::= L | B ∧ L
L ::= p | ¬p
Propositiologiikan kaava on konjunktiivisessa normaalimuodossa, jos ja vain jos sen rakenne on seuraava. Se koostuu yhdestä tai useammasta klausuulista, jotka on yhdistetty toisiinsa ∧:lla. Klausuuli koostuu yhdestä tai useammasta literaalista, jotka on yhdistetty toisiinsa ∨:lla. Kuten edellä, literaali on propositiosymboli tai propositiosymbolin negaatio. Seuraava kielioppi esittää tämän rakenteen siten, että jokaisen klausuulin ympärillä on sulut. Suluilla varmistetaan, että operaattorien ∧ ja ∨ välinen laskujärjestys säilyy oikeana.
C ::= (K) | C ∧ (K)
K ::= L | K ∨ L
L ::= p | ¬p
Tämä kielioppi vaatii enemmän sulkuja kuin on välttämätöntä. Sulut tarvitaan silloin ja vain silloin, kun ∧:n alaisuudessa on ∨. Sulut voidaan siis jättää pois klausuuleista, joissa on vain yksi literaali. Seuraavassa kieliopissa G esittää klausuulit, joissa on ainakin kaksi literaalia. C rakennetaan niistä sulutettuina ja/tai yksittäisistä literaaleista ilman sulkuja.
C ::= L | (G) | C ∧ L | C ∧ (G)
G ::= L ∨ L | G ∨ L
L ::= p | ¬p
Sulkuja ei tarvita myöskään silloin, kun ∧-operaattoreita ei ole lainkaan. Seuraava kielioppi esittää konjunktiivisen normaalimuodon ilman turhia sulkuja.
C ::= K | A ∧ L | A ∧ (K ∨ L)
K ::= L | K ∨ L
A ::= L | (K ∨ L) | A ∧ L | A ∧ (K ∨ L)
L ::= p | ¬p