1 Kurssin asema opetuksessa



Samankaltaiset tiedostot
Laskennan perusmallit (LAP)

Laskennan teoria

Laskennan teoria

Laskennan mallit

Esimerkki 1: Kahviautomaatti.

Rajoittamattomat kieliopit (Unrestricted Grammars)

Muodolliset kieliopit

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

5.3 Ratkeavia ongelmia

Output. Input Automaton

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Täydentäviä muistiinpanoja laskennan rajoista

Muita vaativuusluokkia

Chomskyn hierarkia ja yhteysherkät kieliopit

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

Chomskyn hierarkia. tyyppi 0 on juuri esitelty (ja esitellään kohta lisää) tyypit 2 ja 3 kurssilla Ohjelmoinnin ja laskennan perusmallit

Lisää pysähtymisaiheisia ongelmia

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut

Rekursiiviset palautukset [HMU 9.3.1]

Algoritmin määritelmä [Sipser luku 3.3]

Aloitus. TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 14. maaliskuuta 2011 TIETOTEKNIIKAN LAITOS. Aloitus.

Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria)

Matematiikan mestariluokka, syksy

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

8. Kieliopit ja kielet 1 / 22

FUNKTIONAALIANALYYSIN PERUSKURSSI Johdanto

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Automaatit. Muodolliset kielet

2. Laskettavuusteoriaa

Algoritmit 1. Luento 2 Ke Timo Männikkö

Ongelma(t): Mikä on Turingin kone? Miten Turingin kone liittyy funktioihin ja algoritmeihin? Miten Turingin kone liittyy tietokoneisiin?

1. Universaaleja laskennan malleja

4.3. Matemaattinen induktio

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

2. Laskettavuusteoriaa

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

} {{ } kertaa jotain

Kurssikoe on maanantaina Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

Johdatus matematiikkaan

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa.

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }?

Yhteydettömän kieliopin jäsennysongelma

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys.

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Säännöllisen kielen tunnistavat Turingin koneet

Luonnolliset vs. muodolliset kielet

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi

Injektio. Funktiota sanotaan injektioksi, mikäli lähtöjoukon eri alkiot kuvautuvat maalijoukon eri alkioille. Esim.

8. Kieliopit ja kielet

Matematiikan tukikurssi

uv n, v 1, ja uv i w A kaikilla

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

Ratkeavuus ja efektiivinen numeroituvuus

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

LUKU II HOMOLOGIA-ALGEBRAA. 1. Joukko-oppia

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Rajoittamattomat kieliopit

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Laskennan vaativuus ja NP-täydelliset ongelmat

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

3SAT-ongelman NP-täydellisyys [HMU ]

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

3. Laskennan vaativuusteoriaa

Äärettömistä joukoista

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

Säännöllisten kielten sulkeumaominaisuudet

Johdatus Ohjelmointiin

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

S BAB ABA A aas bba B bbs c

Talousmatematiikan perusteet ORMS.1030

811120P Diskreetit rakenteet

Vastauksia. Topologia Syksy 2010 Harjoitus 1

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 26. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

Esitetään tehtävälle kaksi hieman erilaista ratkaisua. Ratkaisutapa 1. Lähdetään sieventämään epäyhtälön vasenta puolta:

Talousmatematiikan perusteet ORMS.1030

Talousmatematiikan perusteet ORMS.1030

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 20. lokakuuta 2016

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

Talousmatematiikan perusteet ORMS.1030

6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli. H = {c M w M pysähtyy syötteellä w}

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

4. Tehtävässä halutaan todistaa seuraava ongelma ratkeamattomaksi:

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

Transkriptio:

1 Kurssin asema opetuksessa Tietojenkäsittelytieteen pääaineopiskelijoille pakollinen aineopintokurssi (3 op). Esitietovaatimukset: Johdatus tietojenkäsittelytieteeseen (JTT): Laskennan, algoritmin ja tietokoneen käsitteet. Diskreetit rakenteet (DSR): Sovelletaan joitakin diskreetin matematiikan peruskäsitteitä, kuten puita ja verkkoja. Lisäksi molemmilla kursseilla lähestymistapa ja ajatusmaailma on matemaattinen (eikä esimerkiksi ohjelmointitekninen). Tietorakenteet 1 (TRA1): Käytetään joitakin siellä selostettuja perustietorakenteita, kuten pinoja ja puita. Lisäksi viitataan joihinkin siellä esiteltyihin käsitteisiin, kuten asymptoottiseen aikavaativuuteen. Kiinnostuneille lisää valinnaisilla syventävien opintojen jatkokursseilla: Algoritmien suunnittelu ja analyysi (ASA): Tätä kurssia laajemmat perustiedot ns. P? = NP-ongelmasta sekä teoreettisesta että algoritmisuunnittelun näkökulmasta. Laskennan teoria (LAT): Syvällisemmin tästä ongelmasta ja muistakin tällä kurssilla esitellyistä asioista. Tämä P? = NP-ongelma onkin tunnetuin esimerkki laskennan vaativuusteorian käsittelemistä ongelmista. Yksi (mutta ei läheskään ainoa!) tapa lukea se on: P = sellaiset laskentaongelmat, joiden vastaukset voi laskea tietokoneella tehokkaasti NP = sellaiset, joiden vastauksille on olemassa lyhyet perustelut. Silloin ongelma on: Onko olemassa ongelmia, joiden vastauksilla on kyllä olemassa lyhyet perustelut, mutta niin mutkikkaat ettei tietokoneella pysty niitä löytämään tehokkaasti? Tämä P? = NP-ongelma on osoittautunut teoriassa hyvin vaikeaksi ratkaista se on yhä avoin, ja on saatu tuloksia ainakaan menetelmällä X sitä ei voi ratkaista erilaisille lähestymistavoille X. käytännössä merkittäväksi, koska monet käytännön ongelmat ovat osoittautuneet ns. NP-koviksi, eli sellaisiksi että jos yksikin niistä voitaisiin ratkaista tehokkaasti (eli se kuuluisi luokkaan P) niin sen avulla ne kaikki muutkin voitaisiin ratkaista tehokkaasti. Clay Mathematics Institute onkin valinnut sen yhdeksi seitsemästä Millenniumongelmastaan, ja antaa sen ratkaisusta palkinnoksi 1 000 000 USD! (http://www. claymath.org/millennium/) Jo tietojenkäsittelijän yleissivistykseen kuuluu tuntea peruskäsitteet kuten laskentaongelma jne., ja tämän kurssin tavoitteena onkin tutustuttaa niihin. 1

Oppimateriaali Nämä luentokalvot tulevat kunkin luentoviikon lopulla Wikiin: http://wiki.uef.fi tkt-wiki Kurssien kotisivuja - Course homepages LAP - Laskennan perusmallit (3621317, 3op). Luennot pohjautuvat Kimmo Fredrikssonin edellisiin luentoihin keväältä 2010, joissa hän puolestaan käytti materiaalia Wilhelmiina Hämäläisen aikaisemmilta luennoilta. Pelkät kalvot eivät välttämättä riitä itseopiskeluun, vaan voivat vaatia tuekseen joko luentojen tai jonkun oppikirjan seuraamista. Tällaisia oppikirjoja ovat mm. Hopcroft, John E., Motwani, Rajeev ja Ullman, Jeffrey D.: Introduction to Automata Theory, Languages and Computation, 2. painos. Addison Wesley, 2001. Lewis, Harry R. ja Papadimitriou, Christos H.: Elements of the Theory of Computation, 2. painos. Prentice-Hall, 1997. Sipser, Michael: Introduction to the Theory of Computation, 2. painos. Course Technology, 2005. 2 Kurssin asema tietojenkäsittelytieteessä Erään määritelmän mukaan tietojenkäsittely tutkii 1. millaiset tietojenkäsittelytehtävät on mahdollista automatisoida ja 2. miten tämä automatisointi tulisi suorittaa. Peruskurssien (ja useimpien muidenkin kurssien) lähestymistapa on yleensä konstruktiivinen, eli kohta 2. Esimerkiksi TRA: Kehitetään annetun laskentaongelman tehokkaasti ratkaiseva algoritmi ja sen tarvitsemat tietorakenteet. Tällä kurssilla painoalue onkin kohdassa 1. Osoittautuu, että on olemassa erilaisia tehtäviä: 1. Tehtäviä, joita ei edes periaatteessa voi automatisoida minkäänlaista algoritmia ei voi olla olemassa. 2. Tehtäviä, jotka kyllä voi automatisoida, mutta vain tehottomasti tehokasta algoritmia ei voi olla olemassa. 3. Tehtäviä, jotka voi automatisoida ja tehokkaasti tehokaskin algoritmi on keksitty, edellä tehtäväluokka P. 4. Tehtäviä, joista emme vielä tiedä ovatko ne tyyppiä 2 vaiko 3 erityisesti edellä NP. 2

2.1 Historiaa Laskentaongelman käsitteen muotoilu sekä ongelmien erottelu automatisoitumattomiin (eli tyyppiin 1) ja automatisoituviin tehtiin 1930-luvulla. Siis jo ennen tietokoneita! (Ensimmäiset yleiskäyttöiset tietokoneet rakennettiin pian II maailmansodan jälkeen.) Motivaationa oli matematiikan filosofian ja formaalin logiikan kehitys: Haluttiin erottaa toisistaan sellaiset matemaattiset ja loogiset ongelmat, jotka vaativat aitoa luovuutta, sellaisista joihin riitti pelkkä laskeminen...... siis antaa tarkka formaali määritelmä arkikielen käsitteelle mekaaninen laskenta. Näin syntyi laskettavuuden teoria yhdeksi keskeiseksi osaksi matemaattista logiikkaa. Tällä kurssilla esitetään mekaaniselle laskennalle tarkka formaali määritelmä käyttäen ns. Turingin koneita tietokonepioneeri Alan M. Turingin vuonna 1936 esittämää abstraktia matemaattista mallia hypoteettiselle laskulaitteelle. Samaan aikaan oli muitakin loogikkojen ehdotuksia mekaanisen laskennan määritelmäksi, esimerkiksi: Kurt Gödel kehitti 1930-luvun alusta alkaen rekursiivisten funktioiden teoriaa osana kuuluisan (ensimmäisen) epätäydellisyyslauseensa todistusta. Ideana oli induktio: funktion seuraava arvo f(n+1) voidaan määritellä edellisen arvon f(n) avulla, jossa n N. Alonzo Church esitti vuonna 1936 oman λ-laskentansa. Ideana oli laskenta lausekkeen sievennyksenä. Nämä taas olivat tärkeitä ohjelmoinnin ja ohjelmointikielten kehitykselle. Tällä kurssilla niitä ei käsitellä, mutta kurssilla Johdatus funktionaaliseen ohjelmoitiin (FOH) sivutaan λ-laskentaa. Miksi valittiin Turingin laitelähtöinen lähestymistapa mekaanisen laskennan määritelmäksi eikä Gödelin tai Churchin ohjelmointilähtöistä? Eksplisiittinen laite joka kulkea raksuttaa kuin kello on konkreettisempi käsite kuin induktio tai sievennys joiden voisi epäillä sittenkin vaativan sitä aitoa luovuutta... Laskentaan kuluva aika ja tila on helpompi määritellä laitteen kuin siinä pyörivän ohjelman kautta. Tietokoneiden yleistymisen myötä alettiin huomata, että tämä mekaaninen laskenta jakautui edelleen vaivalloiseen (eli tyypin 2) ja vaivattomaan (eli tyypin 3) mekaaniseen laskentaan. Yksi tapa selventää tätä jakoa on tutkia vielä yksinkertaisempia laskulaitteita kuin Turingin kone. Tätä automaattien teoriaa on kehitetty 1960-luvulta lähtien. Tällä kurssilla tutustummekin sen keskeisiin käsitteisiin kuten äärellisiin ja pinoautomaatteihin. 3

Toinen tapa on asettaa resurssirajoja Turingin koneille. Tätä laskennan vaativuusteoriaa on kehitetty 1970-luvulta lähtien. Sen keskeinen ongelma on juuri edellä mainittu P? = NP. Vaativuusteoria kuitenkin jätetään valtaosin kursseille ASA ja LAT. 2.2 Kurssin sisältö tästä eteenpäin 1. Johdanto: Yleiskatsaus laskennan teoriaan, laskennan vaativuusteoriaan ja laskennan malleihin. Kurssilla käytettävien käsitteiden ja notaatioiden määritelmiä. 2. Säännölliset kielet: äärelliset automaatit ja säännölliset lausekkeet. Äärelliset automaatit ovat mahdollisimman yksinkertaisia laskulaitteita. Säännölliset kielet taas ovat sellaisia merkkijonojoukkoja, joihin kuuluminen voidaan ratkaista näillä laitteilla. Säännölliset lausekkeet taas ovat notaatio, jolla niitä voidaan kuvata lyhyesti. Kun esimerkiksi kirjoitat Linuxin komentoriville ls *.jar niin käytät säännöllistä lauseketta *.jar kuvailemaan säännöllisen kielen kaikki sellaiset ASCII-merkkijonot, jotka päättyvät merkkijonoon.jar ja kone listaa sinulle kaikki ne tämän hakemiston tiedostonimet, jotka tämän kielen tunnistava automaatti hyväksyy sen jäseniksi. Käytännössä niihin törmää esimerkiksi merkkijonoalgoritmeissa sekä hajautettujen järjestelmien mallintamisessa. 3. Kontekstittomat kielet ja kieliopit sekä pinoautomaatit. Vastaavasti pinoautomaatit ovat hieman mutkikkaampia laskulaitteita ja kontekstittomat kielet niitä, joita ne voivat tunnistaa. Ne ovat käytännössä tärkeitä rakenteisen syötteen käsittelyssä. Esimerkiksi HTML, XML sekä rakenteisella ohjelmointikielellä kirjoitettu lähdekoodi ovat rakenteisia syötteitä, koska niissä on mielivaltaisen mutkikkaita sisäkkäisyyksiä, joista syötettä lukevan ohjelman pitää ottaa selvää. Esimerkiksi HTML-syötettä lukevan ohjelman pitää löytää korostuksen aloittavalle tagille <em> juuri oikea sitä vastaava lopettava tag </em>, ja niiden välissä voi olla muita senkaltaisia tagpareja, jotka pitää samoin parittaa. Kontekstittomat kieliopit taas ovat näiden kielten kuvailutapa, vastaavasti kuin säännölliset lausekkeet ovat säännöllisille kielille. 4. Johdanto laskennan teoriaan, eli laskettavuuden teorian ja laskennan vaativuusteorian peruskäsitteisiin. Laskennallisesti vaativiin tai jopa kokonaan ratkeamattomiin ongelmiin törmää esimerkiksi tekoälyssä sekä ohjelmien ja järjestelmien formaalissa verifioinnissa. 4

3 Johdanto Laskennan teoria (theory of computation) käsittelee sitä, miten ongelma luokitellaan ratkeavuuden, vaikeuden ja tehokuuden perusteella ennen kuin se ratkaistaan. Se jaetaan perinteisesti kahteen osa-alueeseen: Laskettavuuden teoria (theory of computability) tutkii, mitä tietokoneella ylipäänsä voidaan ratkaista ja kuinka vaikea annettu ongelma on. Ongelmien vaikeus määritellään melko karkealla tasolla sen perusteella, kuinka monimutkaista laskennan mallia ratkaisussa tarvitaan. Lisäksi laskettavuuden teoria antaa hyviä eväitä itse ratkaisun laatimiseen. (LAP, LAT) Laskennan vaativuusteoria (theory of computational complexity) tutkii, kuinka tehokkaasti ongelma voidaan ratkaista. Laskennan vaativuusteoria muistuttaa algoritmien analyysia, mutta siinä ei määritellä yksittäisen ratkaisualgoritmin aika- tai tilavaativuutta, vaan itse ongelman pahimman tapauksen aika- ja tilavaativuusluokka. Laskennan vaativuusteoria antaa myös hyvät eväät ongelmien palauttamiseksi toisiin, jo tunnettuihin ongelmiin. (LAT, ASA) Tällä kurssilla käsitellään jonkin verran laskennan teorian ensimmäistä osa-aluetta eli laskettavuuden teoriaa. Aihepiirinä ovat laskennalliset ongelmat ja niiden ratkaisun mekaaniset mallit, joita kutsutaan laskennan malleiksi. Käsittelemme kahta eri laskennan mallia äärellisiä automaatteja ja pinoautomaatteja sekä tutkimme, mitä kullakin mallilla voidaan ratkaista. Kurssin loppupuolella esitellään lyhyesti myös Turingin koneet (joista enemmän kurssilla LAT). Laskettavuuden teoriasta Laskennan mekaaninen malli, automatisointi, tarkoittaa tämän kurssin kannalta algoritmin esittämistä. Intuitiivisesti algoritmi kuvaa tietojenkäsittelyprosessin niin täsmällisesti, että se voidaan tämän kuvauksen perusteella suorittaa mekaanisesti (ilman luovaa ajattelua ). Mekaanisen laskennan tarkemmaksi määrittelemiseksi, eli algoritmikäsitteen matemaattiseksi formalisoimiseksi, on kaksi lähestymistapaa: 1. Lähdetään liikkeelle tyhjästä ja mietitään, mitä voidaan pitää mekaanisena laskentana. 2. Otetaan lähtökohdaksi nykyiset tietokoneet, jotka selvästi suorittavat mekaanista laskemista, ja pelkistetään pois epäolennaisuudet. Koska mekaaninen laskenta on keskeistä matematiikan perusteiden tarkastelussa, matemaatikot ja loogikot miettivät asiaa paljon 1930-luvulla. He sovelsivat luonnollisesti lähestymistapaa 1 koska tietokoneita ei silloin vielä ollut. 5

Jos taas halutaan soveltaa tuloksia käytännön tietojenkäsittelyyn, lähestymistapa 2 tuntuisi lupaavammalta. Tämä on oleellisesti se tapa, jota käytettiin esimerkiksi kurssilla TRA, kun siellä laskettiin asymptoottisia resurssitarpeita eli O-arvioita. Onneksi osoittautuu, että lähestymistavat 1 ja 2 johtavat samaan algoritmikäsitteen formalisointiin. Siis matemattista logiikkaa ja tietokoneita koskevilla periaatteellisilla rajoituksilla on syvällinen yhteys. Laskettavuuden teoria tarkastelee näitä rajoituksia, eli sitä millaisille ongelmille on olemassa ratkaisualgoritmi. Automaattiteoria Kun on saatu valmiiksi abstrakti malli tietokoneelle, voidaan kysyä, mikä muuttuu, jos mallista jätetään jokin piirre pois. Rajoitettujen mallien tarkasteleminen auttaa ymmärtämään yleisempiä malleja. Äärellinen automaatti on hyvin yksinkertainen (abstrakti) laskentalaite, jolla kuitenkin voi tehdä mielenkiintoisia asioita. Teoreettisen mielenkiinnon lisäksi se on hyödyllinen käytännössä ohjelmointi- ja mallinnustekniikkana. Kontekstittomat kieliopit ovat hieman äärellisiä automaatteja ilmaisuvoimaisempi mekanismi, jolla on tärkeitä sovelluksia esimerkiksi ohjelmointikielten määrittelemisessä ja kääntämisessä ja luonnollisen kielen mallintamisessa. 3.1 Laskennalliset ongelmat Laskennallinen ongelma = mikä tahansa tehtävä, joka voidaan mallintaa ratkaistavaksi digitaalisella tietokoneella. (Kuva 1.) Laskennallisia ongelmia: kokonaislukujen kertolasku, kirjastokortiston aakkostaminen, yrityksen palkanlaskenta, yliopistollisen kurssin kurssitietojen ylläpito, kokonaislukujen järjestäminen, jne... Ei-laskennallinen ongelma: Onko oikein huijata tentissä? Ongelman ratkaiseva ohjelma on sen yksi esitystapa. Ongelman esitys Laskennallinen ongelma = kuvaus äärellisesti esitettävien tapausten joukosta äärellisesti esitettävien vastausten joukkoon Ongelmalla on potentiaalisesti ääretön joukko tapauksia ( syötteitä ). Ongelman ratkaisu on algoritmi, joka liittää kuhunkin tapaukseen sen oikean vastauksen ( tulosteen ). Jokaisen yksittäisen tapauksen ja sen vastauksen on oltava äärellisesti esitettäviä (muutenhan laskenta ei päättyisi). Esimerkki 1. Kokonaislukujen kertolaskuongelmassa (kuva 2) 6

ONGELMA EI LASKENNALLINEN ONGELMA LASKENNALLINEN ONGELMA RATKEAVA ONGELMA RATKEAMATON ONGELMA TEHOKKAASTI RATKAISTAVISSA TEHOKASTA RATKAISUA EI OLE MISSÄ NÄIDEN VÄLINEN RAJA KULKEE? OSITTAIN RATKEAVA TÄYSIN RATKEAMATON (useita eri asteita) Kuva 1: Ongelmien hyvin karkea luokittelu. tapaukset ovat kaikki mahdolliset kokonaislukuparit (p, q) (merkkijonoiksi koodattuna) vastaus annetulle tapaukselle on kyseisen lukuparin tulo p q (merkkijonoksi koodattuna) ratkaisu on mikä tahansa yleinen kertolaskualgoritmi (esimerkiksi se alakkain laskeminen jonka koulussa opimme). Äärellinen esitys Kaikki tietokoneen käsittelemä tieto on viime kädessä voitava koodata bittijonoiksi. On luontevaa sallia koodaukseen käytettävän myös muita merkkejä kuin bitit 0 ja 1 (koska nämä muut merkit voidaan tietenkin tarvittaessa edelleen esittää bittijonoina). Määritelmä: äärellinen esitys = äärellisen pituinen merkkijono (eli jono merkkejä) jossakin äärellisessä aakkostossa. Merkkijonoihin liittyviä peruskäsitteitä ja merkintöjä Aakkosto on äärellinen, epätyhjä joukko alkeismerkkejä eli symboleita. Esimerkiksi binääriaakkosto B = {0, 1} ja latinalainen aakkosto {A,B,C,...,Z}. 7

Syötteet Tulosteet π (1,1) (1,3)... (2,2) (2,4)... (1,2) (2,3) jne. 1 3 4 8... 2 6 Kuva 2: Kertolaskuongelman syötteet ja tulosteet. Aakkosto voidaan määritellä ihan miten halutaan, esim: {HiiriVasenNappi, HiiriOikeaNappi, HiiriKeskiNappi, HiiriRullaYlös, HiiriRullaAlas}. Merkkijono on äärellinen järjestetty jono jonkin aakkoston merkkejä. Esim. 01001 ja 000 ovat binääriaakkoston B merkkijonoja, ja LAP ja XYZZY ovat latinalaisen aakkoston merkkijonoja. Merkintä Σ tarkoittaa kaikkien niiden merkkijonojen joukkoa, jotka voidaan muodostaa annetun aakkoston Σ eli merkkien merkeistä. Siis B = {ε, 0, 1, 00, 01, 10, 11, 000,...}. Tyhjä merkkijono ε ei sisällä yhtään merkkiä. (Huom! Eri asia kuin välilyönti ). Merkkijonon x pituus x on siihen sisältyvien merkkien määrä. Esim. 01001 = XYZZY = 5 ja ε = 0. Katenaatio on merkkijonojen kirjoittamista peräkkäin, esimerkiksi: jos x = 00 ja y = 11, niin xy = 0011 ja yx = 1100; kaikilla x on xε = εx = x; kaikilla x ja y on xy = x + y. Toisto eli merkkijonon katenaatio itsensä kanssa voidaan merkitä potenssina: a 3 = aaa (ab 2 ) 3 = (abb) 3 = abbabbabb. Itse asiassa merkintä (...) voidaankin lukea toisto mielivaltaisen (mutta äärellisen) monta kertaa. Käänteismerkkijono x R on merkkijono x kirjoitettuna takaperin. Esim. (abbc) R = cbba. 8

3.2 Päätösongelmat ja formaalit kielet Yleisesti laskennallinen ongelma π on kuvaus eli funktio π: Σ Γ jossa Σ ja Γ ovat aakkostoja: syöteaakkosto Σ on se jolla kysymys, ja tulosaakkosto Γ on se jolla vastaus kirjoitetaan. Päätösongelmat ovat laskennallisten ongelmien aliluokka, jossa kunkin ongelman tapauksen vastaus on kyllä tai ei. Formaalisti päätösongelma on muotoa π: Σ B. Esimerkiksi päätösongelma onko annettu kymmenjärjestelmän luku alkuluku? voidaan esittää syöteaakkoston Σ = {0, 1, 2,...,9} kuvauksena π: Σ B { 1 jos x on alkuluku, π(x) = 0 jos ei. Yleisesti, jokaista päätösongelmaa π : Σ {0, 1} vastaa merkkijonojoukko A π = {x Σ : π(x) = 1} eli niiden ongelman tapausten joukko, joihin vastaus on kyllä. Kääntäen, jokaista merkkijonojoukkoa A Σ vastaa päätösongelma (kuva 3) { 1, jos x A; π A : Σ {0, 1}, π A (x) = 0, jos x / A. Tätä π A kutsutaan joukon A karakteristiseksi funktioksi koska se kertoo kuuluuko annettu x Σ joukkoon A vaiko ei. Aakkoston Σ (formaali) kieli = mikä tahansa merkkijonojoukko A Σ Siis lyhyesti: olemme kiinnostuneita siitä, kuuluuko jokin annettu merkkijono annettuun merkkijonojoukkoon. Eli kuuluuko annettu sana annettuun kieleen. Kielen A Σ tunnistusongelma = merkkijonojoukkoon A liittyvä päätösongelma π A : Tässä on merkkijono x Σ. Onko x A vaiko ei? Jatkossa käsittelemme vain päätösongelmia. Huomaa että tämä ei periaatteessa ole rajoitus, koska monimutkaisemmat kysymykset voi aina pilkkoa joukoksi kyllä-ei -kysymyksiä... Esimerkiksi monimutkaisempi kysymys Mikä on lukujen x ja y tulo? voidaan pilkkoa kysymyksiin Onko lukujen x ja y tulo z vaiko ei? Esimerkki 2. Olkoon A aakkoston {+,,0,1,2,...,9} kieli, joka koostuu yksinkertaisista kokonaislukuvakioista (esim. Java-kielessä). Siis 0 A, +7326 A ja 32 A, mutta 2 +3 A. Tämä kieli A on esimerkki säännöllisestä kielestä. 9

Σ π A A 0 1 Kuva 3: Kielen A Σ päätös- eli tunnistusongelma π A. Esimerkki 3. Olkoon B aakkoston {+,,, (, ),0,1,2,...,9} kieli, joka koostuu laillisista kokonaislukulausekkeista. Esim. 1 +1 B ja (1 +2+3) 4 5 B, mutta (1 +2)) B ja 3+ B. Tämä kieli B on esimerkki kontekstittomasta kielestä. Esimerkki 4. Muodostukoon ASCII-aakkoston kieli C niistä Java-kielisistä ohjelmista, jotka tyhjällä syötetiedostolla joutuvat ikuiseen silmukkaan. Kieli C on esimerkki ratkeamattomasta kielestä. Sitä siis ei voida tunnistaa millään tietokoneohjelmalla. Esimerkki 5. Kieli {a k k N} on säännöllinen; kieli {a k b k k N} on kontekstiton; kieli {a k b k c k k N} on kontekstillinen. Ongelman vaikeuden arviointi päätösongelmilla Minkä tahansa laskennallisen ongelman vaikeuden voi arvioida vastaavan päätösongelman avulla (kuva 4). Jos päätösongelma (komponentti M 3 ) on ratkeava niin ongelmakin on ratkeava ratkeamaton niin ongelmakin on ratkeamaton helppo (jossakin mielessä) niin ongelmakin on helppo (samassa mielessä) jne. Erityisesti, jos kieli A kuuluu säännöllisiin kieliin, niin sen tunnistusongelma π A voidaan ratkaista helposti rakentamalla sen ratkaiseva äärellinen automaatti; kontekstittomiin niin rakentamalla pinoautomaatti; rekursiivisiin niin rakentamalla Turingin kone. 10

input x M 1 M 3 Aseta Onko y = 0 π(x) = y on M 4 Tulosta ratkaisu y ei Generoi seuraava y M 2 Kuva 4: Laskentaongelma päätösongelmana. Jos kieli A ei kuulu edes rekursiivisiin kieliin, niin sen π A ei ole ratkeava lainkaan. Silloin se voi olla joko osittain ratkeava eli voidaan tehdä Turingin kone joka osaa vastata kyllä mutta ei -vastauksen sijasta voi myös jäädä ikuiseen silmukkaan, tai sitten vieläkin vaikeampi jolloin se ei enää ole tietojenkäsittelyn vaan esimerkiksi matemaattisen logiikan ongelma. Esimerkki 6. Tarkastellaan kokonaislukujen kertolaskuongelmaa: Mitä on pq, missä p, q Z? Merkitään kokonaisluvun x merkkijonoesitystä string(x). Nyt u = string(p) v = string(q) w = string(r). Lisäksi käytetään erottimina merkkejä ja =. Ongelma Päätösongelma Kuvaus Laske pq Onko pq = r? Syöte u v u v = w Tuloste w 0 tai 1 Päätösongelmaa vastaava formaali kieli A on joukko merkkijonoja u v = w, joille pätee pq = r: A = {u v = w: pq = r}. Nyt kertolaskuongelman vaikeus = kielen A vaikeusluokka. Kertolaskuongelman ratkaisu päätösongelmalla siis generoi (järjestyksessä) kaikki mahdolliset ratkaisut, ja kokeilee milloin saadaan vastaus 1. (Tämän voisi tehdä toisinkin...) Kielten vaikeusluokat Chomskyn kielihierarkia (kuva 5) määrittelee seuraavat kielten vaikeusluokat: Tyyppi 3: säännölliset kielet (erikoistapauksenaan äärelliset kielet). Tyyppi 2: kontekstittomat kielet (tai yhteysvapaat tai yhteydettömät ). 11

ratkeamattomat ongelmat tyyppi 0: rajoittamattomat kielet rekursiivisesti lueteltavat kielet tunnistus: universaali Turingin kone (pysähtyy "kyllä" tapauksessa) rekursiiviset kielet tunnistus: Turingin kone + riittävän mittainen työnauha (pysähtyy aina), RAM kone, ohjelmointikielet tyyppi 1: kontekstiset kielet tunnistus: Turingin kone + kohtuullisen (eli polynomisen) mittainen työnauha tyyppi 2: kontekstittomat kielet tunnistus: pinoautomaatti tyyppi 3: säännölliset kielet tunnistus: äärellinen automaatti vakiomäärä muistia äärelliset kielet Kuva 5: Chomskyn kielihierarkia. Tyyppi 1: kontekstilliset kielet (tai kontekstiset tai yhteyksiset ). Tyyppi 0: rajoittamattomat kielet = rekursiiviset rekursiivisesti lueteltavat (tai numeroituvat ) kielet. Noam Chomsky on erittäin merkittävä kielitieteilijä, ja hänen hierarkiassaan on vastaava näkökulma: esimerkiksi kontekstittomilla kielillä on suora yhteys tietynlaisiin formaaleihin kielioppeihin ja kontekstillisillä kielillä sellaisiin kielioppeihin, joissa huomioidaan myös lauseyhteys. Esimerkki 7. Joillekin yksinkertaisille ohjelmointikielille (kuten Pascal) pätee Leksikaalisesti oikeiden ( muodostuu oikeista sanoista ) ohjelmien joukko voidaan tuottaa säännöllisillä kielillä ( oikealle lineaarinen kielioppi ). Syntaktisesti oikeiden ( sanat järkevässä järjestyksessä ) ohjelmien joukko voidaan tuottaa kontekstittomilla kielillä. Kontekstilliset ja rekursiiviset kielet eivät kuulu kurssin alueeseen, mutta näillä voitaisiin kuvata ohjelman suorittama laskenta... Toisaalta kaikkien ohjelmien joukkoa jotka ratkaisevat jonkin ongelman ei voi kuvata kieliopilla. 12

Laskennalliset ongelmat Kaikki binäärijonot Σ={0,1} Päätösongelmat Lailliset konekieliohjelmat Ratkeavat päätösongelmat Päätösongelmien ratkaisuohjelmat Kuva 6: Laskennalliset ongelmat vs. ohjelmat. Rajoittamattomat kielet koostuvat rekursiivisista kielistä, joiden tunnistusongelma on ratkeava rekursiivisesti lueteltavista kielistä, joiden tunnistusongelma on osittain ratkeava. Sellaisella kielellä on ohjelma, joka tulostaa sen merkkijonot äärettömänä luettelona x 0, x 1, x 2,... 3.3 Laskennallisten ongelmien ratkeavuus Läheskään kaikkia laskennallisia(kaan) ongelmia ei voida ratkaista tietokoneella yksinkertaisesti jo siksi, että ongelmia on ylinumeroituvan monta ( yhtä monta kuin reaalilukuja R ) mutta ratkaisuohjelmia vain numeroituvan monta ( yhtä monta kuin luonnollisia lukuja N ). Perustelu... 1. Tietokoneohjelmat ovat merkkijonoja. 2. Minkä tahansa aakkoston merkkijonojen joukko on numeroituvasti ääretön (lause 1). 3. Ongelman ratkaisevia tietokoneohjelmia on korkeintaan numeroituva määrä. 4. Laskennallisia ongelmia on vähintään yhtä paljon kuin päätösongelmia. 5. Minkä tahansa aakkoston päätösongelmien joukko on ylinumeroituva (lause 2). 6. Laskennallisia ongelmia on ylinumeroituvan monta. 7. Jokaiselle laskennalliselle ongelmalle ei millään riitä sen ratkaisevaa tietokoneohjelmaa. 13

Aakkoston merkkijonoja on numeroituva määrä Lause 1. Minkä tahansa aakkoston Σ merkkijonojen joukko Σ on numeroituvasti ääretön. Todistus: Olkoon Σ = {a 1, a 2,...,a n }. Kiinnitetään merkeille jokin aakkosjärjestys, esim. a 1 < a 2 < < a n. Joukon Σ merkkijonot voidaan järjestää seuraavasti (kanoniseen järjestykseen): 1. Ensin luetellaan 0:n mittaiset merkkijonot (= ε), sitten 1:n (= a 1, a 2,...,a n ), sitten 2:n (= a 1 a 1, a 1 a 2, a 1 a 3,...,a 1 a n, a 2 a 1, a 2 a 2, a 2 a 3,...) jne. 2. Kunkin pituusryhmän sisällä merkkijonot luetellaan aakkosjärjestyksessä. Jokaiseen luonnolliseen lukuun n voidaan siis liittää Σ :n merkkijono ja päinvastoin, joten Σ on numeroituva. Vaadittu bijektio f : N Σ lauseessa 1 on: Päätösongelmia on ylinumeroituva määrä Lause 2. Minkä tahansa aakkoston Σ päätösongelmien joukko on ylinumeroituva. Todistus: Merkitään aakkoston Σ kaikkien päätösongelmien kokoelmaa Π = {π: π on kuvaus Σ {0, 1}}. Tehdään vastaväite: Oletetaan, että Π onkin numeroituva, eli että on olemassa numerointi Π = {π 0, π 1, π 2,...}. Olkoot Σ :n merkkijonot kanonisessa järjestyksessä lueteltuina x 0, x 1, x 2,... Muodostetaan uusi päätösongelma ˆπ: { 1, jos ˆπ : Σ πi (x {0, 1}, ˆπ(x i ) = i ) = 0; 0, jos π i (x i ) = 1. Koska oletuksen mukaan ˆπ Π (koska Π on kaikkien päätösongelmien joukko), niin ˆπ = π k jollakin k N. Tällöin { 1, jos πk (x ˆπ(x k ) = k ) = ˆπ(x k ) = 0; 0, jos π k (x k ) = ˆπ(x k ) = 1. Tämä on ristiriita. Siis vastaoletus, että joukko Π on numeroituva, on väärä. Todistus 2 kuvana: Ajatellaan (ääretöntä) taulukkoa ongelmista π 0, π 1, π 2,... ja merkkijonoista x 0, x 1, x 2,... Ongelma ˆπ poikkeaa kaikista muista ongelmista π i taulukon diagonaalilla, vaikka i kasvaisi äärettömään: ˆπ ց π 0 π 1 π 2 π 3 x 0 1 0 0 0 1 x 1 0 x 2 1 1 x 3 0 0 0.. 0 1 0 0. 0 1 1. 1 0.... 14

Suomeksi: ˆπ ei voi esiintyä taulukon millään sarakkeella, joten päätösongelmia (ja yleisemmin laskennallisia ongelmia) on ylinumeroituva määrä. (Eli ˆπ eroaa jokaisesta sarakkeesta ainakin yhdessä kohtaa.) Tämä todistustekniikka on ns. Cantorin diagonaaliargumentti jolla hän todisti, että reaalilukuja 0 x < 1 on aidosti enemmän kuin luonnollisia lukuja. Käytännössä tämä merkitsee sitä, että kaikista laskentaongelmista voidaan esimerkiksi Java-ohjelmilla ratkaista vain häviävän pieni osa: ylinumeroituvan joukon numeroituva osajoukko. Sama pätee kaikilla ohjelmointikielillä, sillä kaikki riittävän vahvat ohjelmointikielet määrittävät täsmälleen saman ratkeavien ongelmien luokan (ns. Churchin Turingin teesi). (Jotkut ovat spekuloineet kvanttikoneiden olevan aidosti vahvempia, mutta tätä ei ole todistettu...) Useimmat laskennalliset ongelmat ovat siis absoluuttisesti ratkeamattomia. Valitettavasti ratkeamattomat ongelmat käsittävät myös monia mielenkiintoisia / käytännöllisiä ongelmia, erityisesti pysähtymisongelman: jos on annettu ohjelma P ja sen syöte w, niin pysähtyykö ohjelman P laskenta syötteellä w vai jääkö se ikuiseen silmukkaan? (Tämä ongelma on kuitenkin osittain ratkeava...) 3.3.1 Churchin Turingin teesi Churchin Turingin teesi väittää seuraavaa: Epäformaalin käsitteen funktio f on mekaanisesti laskettavissa oikea formaali vastine on f on laskettavissa Turingin koneella. Siis että on olemassa Turingin kone M f joka syötteellä x tulostaa sitä vastaavan arvon f(x) ja pysähtyy. Tämä on teesi eikä tulos: sitä ei voi todistaa, koska sehän väittää että nyt olemme löytäneet juuri sen oikean määritelmän tälle arkikielen käsitteelle. Teesin tueksi voi esittää seuraavaa: : Turingin koneet ovat niin yksinkertaisia laitteita, että jos f on laskettavissa koneella M f, niin silloin f on selvästi mekaanisesti laskettavissa. : Muutkin esitetyt yleisesti hyväksytyt vaihtoehtoiset määritelmät voidaan toteuttaa myös Turingin koneilla. Helppo suunta on näyttää, että annettu Turingin kone M voidaan toteuttaa jollakin tämän vaihtoehtoisen määritelmän mukaisella ohjelmana P M. Vaikea suunta on näyttää, että annettu tämän vaihtoehtoisen määritelmän mukainen ohjelma Q voidaan toteuttaa myös jollakin Turingin koneella M Q eli kääntäjä. Tällaisia muita vaihtoehtoisia malleja ovat esimerkiksi 15

edellä mainitut Gödelin ja Churchin omat ehdotukset RAM-koneet, jotka ovat idealisoitu malli nykyaikaiselle digitaaliselle tietokoneelle jopa kaksilaskurikoneet, joissa on vain kaksi muuttujaa x, y N sekä operaatiot kasvata/vähennä muuttujan arvoa yhdellä ja testi if muuttujan arvo on = 0 then... John Conwayn Life -peli, jne... 3.3.2 Pysähtymisongelman ratkeamattomuus Olemme edellä nähneet, että valtaosa päätösongelmista on ratkeamattomia laskemalla, että niitä on paljon enemmän kuin ratkaisualgoritmeja. Osoitetaan nyt yksi konkreettinen päätösongelma ratkeamattomaksi eli että ratkeamattomuus on joidenkin oikeidenkin ongelmien piirre, eikä pelkkä matemaattinen ilmiö. Kiinnitetään laskentamalliksemme vaikkapa C-ohjelmointikieli. Church Turingin teesin nojalla sama pätee myös muillakin yhtä ilmaisuvoimaisilla laskentamalleilla. Pysähtymisongelman C-kielinen tulkinta on: Ei ole olemassa totaalista (aina pysähtyvää) C-ohjelmaa, joka ratkaisisi, pysähtyykö annettu C-ohjelma P annetulla syötteellä w. Tehdään vastaoletus, että voitaisiinkin kirjoittaa totaalinen C-funktio bool h(char p[],char w[]) jonka syöteparametrit ovat p: merkkijono, joka sisältää tutkittavan C-kielisen ohjelman P lähdekoodin w: merkkijono, joka sisältää tutkittavan syötteen w ja jonka tulos on true jos ohjelman p suoritus syötteellä w pysähtyisi false jos se jäisi ikuiseen silmukkaan. Vastaoletusta käyttäen voitaisiin kirjoittaa toinen C-funktio void g(char p[]){ if (h(p,p)) while (true); } joka siis pysähtyy täsmälleen silloin, kun C-lähdekoodi p ei pysähtyisi saadessaan syötteenään oman itsensä. Olkoon q tämän funktion g lähdekoodi merkkijonona. 16

Mitä tapahtuu kutsussa g(q)? Saadaan haluttu ristiriita: g(q) pysähtyy h(q,q) palauttaa false g(q) ei pysähdykään! Niinpä tehty vastaoletus ei pädekään. Tässä todistuksessa istutetaan ns. valehtelijan paradoksi Tämä lause on valhetta! totuuden sijasta laskennan pysähtymiseen. Samaa ideaa käytti jo Kurt Gödel kuuluisissa epätäydellisyyslauseissaan istuttamalla se totuuden sijasta todistuvuuteen: Tällä väitteellä ei ole todistusta! Formalismista (Tietojenkäsittely)tieteessä on arvokasta, että laskenta saadaan esitetyksi täsmällisessä matemaattisessa muodossa. Jatkossa haluamme esittää väitteitä muotoa: Kaikki äärelliset automaatit toteuttavat ehdon p ja konstruktioita Mistä tahansa ehdon r toteuttavasta automaatista voidaan muodostaa automaatti, joka toteuttaa ehdon s. Onnistuu kyllä tiettyyn rajaan saakka piirtämällä kuvia ja heiluttamalla käsiä (kuten tällä kurssilla varmaan paljolti tullaan tekemään...), mutta uskottavuuden ja ymmärrettävyyden rajat tulevat melko pian vastaan. Matemaattinen formalismi on työkalu, jota on hyvä opetella käyttämään... 17

4 Säännölliset kielet ja äärelliset automaatit Äärellinen automaatti (englanniksi (Finite State Automaton, FSA) ) on hyvin yksinkertainen laskennan malli (eli abstrakti laskentalaite). Säännölliset kielet (englanniksi [(regular languages) ) on se luokka laskentaongelmia, jonka näin yksinkertaisella laitteella pystyy ratkaisemaan. Näillä tekniikoilla on sovelluksia esim. merkkijonoalgoritmeissa. Tavoitteet: oppia mitä ovat äärelliset automaatit ja säännölliset lausekkeet ja mikä on niiden välinen suhde muodostamaan yksinkertaisia äärellisiä automaatteja ja säännöllisiä lausekkeita (englanniksi (regular expressions) ) tekemään muunnoksia determinististen ja epädeterminististen äärellisten automaattien ja säännöllisten lausekkeiden välillä. osoittamaan kieli joko säännölliseksi tai epäsäännölliseksi. Esimerkki 8. Kahviautomaatti, joka ei anna vaihtorahaa, hyväksyy vain 50 sentin ja yhden euron kolikoita ja minimimaksu on 2 euroa. Millaisia syötejonoja kahviautomaatti hyväksyy? Kelvollisia syötejonoja ovat esim. seuraavat (yksikkönä snt): 50 + 50 + 50 + 50 100 + 100 50 + 100 + 100 100 + 50 + 50 + 100 Ts. kahviautomaatti hyväksyy syötejonot, jotka ovat muotoa 1 euro + 1 euro + [0 tai useampia 50 sentin tai 1 euron kolikoita] 1 euro + 50 senttiä + [1 tai useampia 50 sentin tai 1 euron kolikoita] 50 senttiä + 1 euro + [1 tai useampia 50 sentin tai 1 euron kolikoita] jne... Kahviautomaatin toiminta voidaan kuvata äärellisenä automaattina. Automaatin syötteitä ovat 50 sentin ja 1 euron kolikot ja automaatti hyväksyy syötejonon, jos siihen sisältyvien rahojen summa on vähintään 2 euroa Automaatti voidaan esittää tilasiirtymäkaaviona (kuva 7). TRA-kurssin terminologialla se olisi suunnattu verkko jonka kaaret on painotettu syöteaakkosilla. Automaatilla on 18

50, 100 100 q 0 q 2 100 q 4 50 50 50 50, 100 q 1 100 q 3 Kuva 7: Kahviautomaatti. q Tila q q 0 Alkutila Hyväksyvä tila Hylkäävä lopputila a q q Tilasiirtymä δ(q, a) = q Kuva 8: Tilasiirtymäkaavion merkinnät. tiloja (5 kappaletta), jotka on esitetty ympyröinä ja nimetty q 0,...q 4, siirtymiä jotka on esitetty tilojen välisinä kaarina; aakkosto jonka symboleilla siirtymät on merkitty; alkutila (tila q 0 ) joka on merkitty tyhjästä tulevalla kaarella; ja hyväksyvä tila (tila q 4 ) joka on rengastettu. Tilojen nimet ovat vapaavalintaisia, automaatin toimintaan ne eivät vaikuta. 4.1 Äärellisen automaatin esitystapoja Tilasiirtymäkaaviona eli kuvien 7 ja 8 mukaisena piirroksena. Tilasiirtymätaulukkona jossa 19

jokaisella tilalla on oma rivinsä jokaisella syöteaakkosella on oma sarakkeensa tilan p sarake c ilmoittaa sen tilan (eli rivin) jonne siirrytään tilasta p merkillä c. Kuvan 7 kahviautomaatin tilasiirtymätaulukko on yhtälönä (1). 50 snt 1 euro q 0 q 1 q 2 q 1 q 2 q 3 q 2 q 3 q 4 q 3 q 4 q 4 q 4 q 4 q 4 (1) Esimerkki 9. Etumerkillisen kokonaisluvun tunnistaminen. Tilasiirtymäkaaviona (jossa d = {0, 1,..., 9} ovat 10-järjestelmän lukumerkit): d +, d q 0 q 1 q 2 d Tilasiirtymätaulukkona: d +, q 0 q 2 q 1 q 1 q 2 q 2 q 2 Taulukon puuttuvat kohdat vastaavat virhetilaa Error. Tehtävä 1. C-kielessä 0-alkuiset luvut tulkitaan oktaaliluvuiksi (jolloin merkkejä 8 ja 9 ei sallita lainkaan), ja 1... 9 alkuiset 10-kantaisiksi luvuiksi. Muuta esimerkin 9 automaattia siten, että nämä tapaukset erotellaan, eli että ne johtavat eri hyväksyviin tiloihin. Tehtävä 2. (Jatkoa tehtävään 1.) C-kielessä 0x-alkuiset luvut tulkitaan heksadesimaaliluvuiksi. Ota tämäkin huomioon. Ohjelmana tässä C-ohjelmointikielellä: int q=0; char c; while (c=fgetc(stdin)!= EOF) switch (q) { case 0: if (c== + c== - ) q=1; else if (isdigit(c)) q=2; else q=3; break; case 1: if (isdigit(c)) q=2; else q=3; break; 20

case 2: if (isdigit(c)) else break; case 3: break; } q=2; q=3; Esimerkki 10. C-kielen mukaisen etumerkittömän liukulukuvakion tunnistava automaatti: d. E,e +, 1 3 2 2 4 3 3 4 5 4 4 5 5 7 6 6 7 7 7 1. d 2 3. d e,e 4 d e,e 5 d 7 d d +, 6 d 21